Download - Yet Another DLR for Silverlightの試作
Yet Anothor DLR for Silverlight
の試作 terurou / YAGI.Teruo
DSTokai, 大名古屋, ...
今から話すこと
• 自己紹介
• Silverlightとは
• DLRとは
• SilverlightでDLRを使ってきた理由
• だが、DLRオワコン。
• Yet Anothor DLR for Silverlight
• 今後に向けて
1
自己紹介
2
自己紹介
terurouです。
• クラウド関係のR&Dとかやってます。
• RIAとかAndroidとかやってます。
–Silverlight、DLR歴は3年以上。
• 最近、Cassandra Conferenceで話しました。
3
自己紹介
• DSTokai
–名古屋のメタコミュニティ
–NGK
• 大規模分散技術勉強会 in 名古屋
–大名古屋
–忙しすぎて開催できていない。
4
\NGK/
5
自己紹介NGK
NGK
• Nagoya Godo Konshinkai
–名古屋 合同 懇親会
• 要は酒とか飲むだけの会
–花見とか
–忘年会とか
6
自己紹介NGK
NGK2011B
• Nagoya Godo Konshinkai 2011 Bonenkai
–名古屋 合同 懇親会 2011 忘年会
• 12/3(土)
–昼の部 LT大会
–夜の部 普通の忘年会
7
Silverlightとは
8
Silverlightとは
• Flashみたいなブラウザプラグイン。
–WindowsとMacで動く。
–LinuxではOSSのMoonlightが辛うじて動く。
• 全般的にFlashよりも速い。
• .NETのサブセットAPIが使える。
• WindowsPhoneアプリもSiverlight。
9
DLRとは
10
DLRとは
• Dynamic Language Runtime
– .NETでLLを動かすためのステキな仕組み
–Silverlightもサポート
• 主なDLR言語
– IronPython
• そもそもDLRはIronPythonからフォークされたもの
– IronRuby
– IronScheme
11
DLRとは
DLRが提供するもの
• コンパイラフレームワーク –AST Compiler(動的バイトコード生成)
• 動的型付け言語向けのランタイム –Dynamic Type System
–Dynamic Dispatch
–CallSite(Inline Method Cache)
• 対話環境用のライブラリ –REPL、エントリーポイントなど
12
DLRとは
DLR言語の動作概要
俺様パーサ DLR AST Compiler
俺様AST to DLR AST 変換
実行!
俺様 スクリプト DLR AST
DLR Runtime
俺様AST バイトコード
言語固有の実装 DLR
13
SilverlightでDLRを 使ってきた理由
14
SilverlightでDLRを使ってきた理由
それ2年ぐらい前に話したわー
• Microsoft Tech Fielders インタビュー – IronPython は、用途によって凄く便利な道具になる
– http://bit.ly/1FNK76
• Microsoft Tech Fielders セミナー LT – Dynamic Language で Silverlight 2 開発
– http://slidesha.re/v7Hitv
15
SilverlightでDLRを使ってきた理由
ちょっとしたGUIの修正がめんどくさい
• 理想
–ソース保存→自動でUI再描画
• HTML/JavaScriptなら普通にやりますよね。
• 現実
–ソース保存→F5押す→デバッグ起動
• ちょっと色を変えただけなのに時間がかかる。
• Twitterをやる時間ばかり増えてしまう…!!!
–まぁ、Androidはもっと酷いけどね…。
16
SilverlightでDLRを使ってきた理由
DLRを使うと理想に近づく。 手軽さ重要。
17
だが、DLRオワコン。
18
だが、DLRオワコン。
DLRを使ったアプリ開発の問題点
• DLRアプリは起動が遅すぎる
–動的バイトコード生成がボトルネック
–DLRというよりも、Silverlight自体の問題
• Silverlightに限らず、.NETでも動的生成は遅い
• 開発者は便利だが、ユーザには利点なし
–折角のRIAなのにUXが損なわれる!!!
19
だが、DLRオワコン。
というか、
DLRという存在自体がオワコン
20
だが、DLRオワコン。
MicrosoftのDLR戦略ぅ
1. IronPythonの開発者を雇用
2. IronPythonからDLRをフォーク
3. DLRを元にIronRubyの開発を開始
4. DLRのおいしい部分を本体に統合
5.おいしい部分を統合したら、IronPythonの開発を放棄(ついでにIronRubyも)
– IronPython/IronRubyの開発者も退職
21
だが、DLRオワコン。
DLRが提供していたもの
• コンパイラフレームワーク –AST Compiler(動的バイトコード生成)
• 動的型付け言語向けのランタイム –Dynamic Type System
–Dynamic Dispatch
–CallSite(Inline Method Cache)
• 対話環境用のライブラリ –REPL、エントリーポイントなど
.NET4.0 dynamic
.NET4.0 ExpressionTree
残り物!
22
だが、DLRオワコン。
• IronPython、IronRuby自体はコミュニティで開発は継続しているが…。
• Silverlight開発ツールとしては、今後の 発展は見込めない。
–もともとマイナーな存在だけどね…。
23
Yet Anothor DLR for Silverlight
24
Yet Anothor DLR for Silverlight
とりあえず以下の要件で作ってみる
• 開発時はスクリプト実行できる
• 配布時は事前にスクリプトをバイトコードにビルドできる
25
Yet Anothor DLR for Silverlight
昔のDLR開発ツール(Chiron.exe)を参考に
• 開発時
–Webサーバとして起動
–ブラウザから.xapなURIにアクセスすると、 ルールに従い、動的にスクリプトとランタイムをパッケージし、レスポンスとして返す
• 配布パッケージ生成時
–スクリプトをDLLにビルドし、パッケージ
–これはChiron.exeではできなかった
26
Webブラウザ
Yet Anothor DLR for Silverlight
動作イメージ(開発時)
• ブラウザリロードだけで最新化・再実行
Web Server
Runtime
スクリプトのパース+ 動的バイトコード生成
リクエスト
XAPパッケージ 実行
レスポンス スクリプトを オンデマンドで パッケージ化
27
Yet Anothor DLR for Silverlight
デモしたいけど、 たぶん時間ないよね
28
Yet Anothor DLR for Silverlight
実装のポイント1:ExpressionTree
• 俺様言語を作る時に便利
–前述のとおり、元々DLRだったヤツだし
• .NET、Silverlight共にビルトインされている
• ExpressionTreeから動的バイトコード生成
–生成したバイトコードはEXE/DLLで保存可能
–ただし.NETのみ、Silverlightではできない
29
Yet Anothor DLR for Silverlight
実装のポイント2:アセンブリ互換
• Silverlightと.NETのバイトコードは相互互換
–Silverlight4からサポート
• .NET向けのDLLも型・メソッドが存在すれば、Silverlightで利用可能
• SilverlightでDLLを生成・保存できなくても、 .NETでDLLを生成すれば良い
30
今後にむけて
31
今後にむけて
• たぶん忙しいから開発継続しないけど…
• Roslynとの連携すると楽しそう
–コンパイラの中間処理をゴニョれるらしい
–C#が真の意味で スクリプト化?
–俺様言語の極楽浄土
–まだCTP
32
ご清聴ありがとうございました
33