■
体調は相変わらず良くないのだけど、とりあえずMono Summit 2007のレポートを上げておこうと思う。
Mono Summit notes 1日目 (2007/11/28)
Opening Keynote
Miguelによるイントロダクション。と言っても、この間に70-80人くらいの参加者の紹介が入っているので、実際にはもう少し短かった。Monoをcore(ECMA)/ms stack/mono stackに分割するという話、monoチームのステータス(今年だけで人数が2倍に増えている)、moonlightのステータス、バージョン番号をどうしようかという話、
C Sharp 3.0 and LINQ
Marek SafarによるC# 3.0のセッション。initializer, partial methods, anonymous type, extension methods, lambdaなどの言語要素について説明した後、(System.Coreの)Expression treeを経てLINQ(クエリ式、LINQ to objects、LINQ to XML…)について説明していた。実装の説明ではなくて、言語仕様の説明なので、Linqに慣れている人ならおさらい的な内容ではあったと思う。ちなみに、C# 3.0コンパイラの実装は完成していて、あとはバグフィックスだけというフェーズにいるようだ。XLinqもfeature completedとして紹介された(XStreamingElementは出来てないんだけど、まあ誤差かな)。
Developing Applications with MonoDevelop
LluisによるMonoDevelopの紹介。MDは来年の2月頃に1.0がリリースされる予定で、そろそろfeature frozenになる(Extrasはfreeze状態にはならないけど)。この1年で開発・実用化されたものとして、VSプロジェクトやAutotoolsサポートが挙げられる。他にも2.0ランタイムのサポート、エディタの自動補完(これは去年もう有った)や、新しいDock manager、stetic(Gtk# GUIデザイナ)について説明していた。エディタやsteticの説明は、ほぼ去年のうちにMiguelやLluisが確立したライブコーディングベースの流れに沿っている(これは僕も去年やろうとしたんだけど、雑談に飲み込まれてしまった記憶があるw)。
その後svn integration。packaging add-in、gettext add-in(.poファイルを簡単にいじれるやつ)と、新機能の紹介が続いた。
ちなみにSharpDevelopのリーダーのMike Kruegerもmonoチームの一員なので来ているのだけど、同じドイツ人でもMartinとは全然キャラが違うのが何ともおもしろい。Martinは大の呑兵衛で知られているが、私はビールは好まないのだ、と言っていた。Martinはどうやら有名人らしい。どんな意味でかは知らないが…
Towards a virtual babel: Mono in SecondLife
Jim Purbrick (babbage) によるSecond Lifeの紹介セッション。最初はUGCがどうとか、テキストからビジュアルコンテンツへの変遷がどうとか、今の参加人数がどうとかいった、SLお約束の話。SLがゲームでないとかライブに使われているとかシミュレーションに使われているという話も、最近たまに見る話だし、ここでも何度か言及した。
それからLSL/LSL VMについて。30MBのスクリプトが稼働していて、うち15%が住人のコードで、25MB / 25億行のソースがある。氏曰く”2.5B lines of code in a broken language” とな。
LSLVMでは、LSLをバイトコードにコンパイルし、“textbook” VMで動かすようになっているが、これは欠点だらけである(以下、LSL/LSLVMの欠点が10件以上並ぶ)。問題はどうすれば解決するか: 最小単位のコード, メッセージングの並列性、迅速な開発サイクル、コード再利用、大規模並列プログラミング…
以下文章でまとめ直すのが面倒なので、メモ書き:
- Why Mono? : LSL on CLI, CLI langs, CLI libs, bytecode verifier, JIT etc…
- 何が必要か: script migration, thread serialization, preemptive threads
- thread serialization: continuations, call and jump yield tests / induce stack at yield, generates stackframe, copy stack to heap, unwind stack, serialize script, JavaGoX. brakes
- injectionの説明に使われているILソースの字が細かくて読めんが、永久ループみたいなところでスレッドをシリアライズしているようだ。
- migration: 10K scripts per region / Mono uses OS threads / LSL2 uses 1 thread / use continuations for microthreading /
- 移行中に停止しないために: 10KものAppDomain というのは非現実的 / スクリプトをアンロードされたAppDomainにマイグレートする作業が必要
- 16K per script / subvert profiler / オブジェクトグラフを16Kのアロケーションで構成?
- 現状どうなっているか: LSLはCLIにコンパイルされる / ほとんどのCLIアセンブリを翻訳できる/ LSL2とCLIスクリプトをシミュレータで実行したら、Monoが10倍高速だった
- 次のゴール: 任意のアセンブリのアップロード、source language neutrality, verification (MS PEVerify service on Windows? / Portable.NET?), Sandboxing (今は翻訳時にmethodをホワイトリストで許可 / Silverlightモデルにする?), transformer (完全なCLI命令セットサポート / マネージドポインタのsynthesizing、RAILからCecilに以降?), better threading (monoco? linux thread libs? injected bytecode just for migration? full continuation and migration support in VM?), 最適化
- futures: arbitrary .NET langs / new second life langs / open source virtual world