metro style appsでmsilver.2012/06/09
TRANSCRIPT
![Page 1: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/1.jpg)
Metro Style AppsでMSIL ver. 2012/06/09
terurou
![Page 2: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/2.jpg)
自己紹介
![Page 3: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/3.jpg)
自己紹介
どうもこんにちわ、 terurou です。
![Page 4: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/4.jpg)
DSTokaiの管理人やってます。
• 東海地方のメタコミュニティ
–複数コミュニティへの共通連絡窓口
– IT系イベント情報の共有
–DSTokaiカレンダー
–http://go.dstokai.info/
• クロスコミュニティイベントの企画
–NGK:名古屋 合同 懇親会
![Page 5: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/5.jpg)
Web技術を広く浅くやってます。
• フロントエンド
–Silverlight, JavaScript, Android
–Tech Fielders Member(ページ消滅)
–最近 Metro Style Apps始めました。
• バックエンド
–Cassandra, 自作KVS, AWS
• フロント寄りのアーキテクチャ設計を割と得意としてます。
![Page 6: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/6.jpg)
今から話すネタについて
![Page 7: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/7.jpg)
ML名古屋の発表スライドの流用です。
• ML名古屋?
–5/26に開催されたイベント
–なごやこわい
• 6/1のWindows8 RPのリリースに 合わせ、最新情報に更新しました。
![Page 8: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/8.jpg)
このLTのゴール地点
Metro Style AppでEXE生成するよ、 デスクトップアプリ用のやつ。
![Page 9: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/9.jpg)
過去の類似犯行
• Silverlight上でScalaプログラムを実行
–Scala→MSIL + アセンブリバイナリ改変
• Silverlightアプリ(XAP)を動的に 生成するWebサーバの作成
–DSL→MSIL→XAP化
![Page 10: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/10.jpg)
Metro Style Appsとは?
![Page 11: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/11.jpg)
Metro Style Apps
• Windows 8から導入される 新しいアプリケーションの種別
–旧来型アプリ=Desktop Apps
![Page 12: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/12.jpg)
WinRT
• Metro Style Apps専用API
–Win32 API と .NET Framework 共にMetro用のサブセットAPIとなっている。
• いろんなものが非同期API
–File I/O APIとかDialogとか
• サンドボックスモデル
–ユーザの同意なしには全てのファイルやデバイスを自由に操作できません。
![Page 13: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/13.jpg)
MSILとは?
![Page 14: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/14.jpg)
MSIL
• CLI(.NETのVM)用の機械語
–コンパイルするとCIL用のバイトコードに
• MicroSoft Intermediate Language
– Intermediate Language = 中間言語
• ECMA CIL(Common IL)としても標準化されている
–MSILはCIL準拠/拡張という位置づけ
![Page 15: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/15.jpg)
Metro Style AppsでMSIL生成
![Page 16: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/16.jpg)
Reflection.Emit!
• .NETでMSILといえばReflection.Emit
–Reflection.Emitを使うとプログラム内で動的にMSIL/アセンブリを生成できる。
• さっそくコードを書こう!
![Page 17: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/17.jpg)
Reflection… Emit…?
え、AssemblyBuilderが存在しない…?
![Page 18: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/18.jpg)
Reflection… Emit…?
がっつりAPIが削られてしまっていて、 ぺんぺん草すら生えていない…!
![Page 19: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/19.jpg)
Reflection.Emit 完全終了のお知らせ
• Reflection.Emit(低レベルAPI)が 隠ぺいされ、高レベルAPIのみ利用可
–System.Linq.ExpressionTree
–System.Dynamic
• でも、Reflection.EmitがないとEXEの出力/保存ができないのだけど…。
![Page 20: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/20.jpg)
詰んだ?
![Page 21: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/21.jpg)
そんなところに颯爽とMono.Cecilが!
![Page 22: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/22.jpg)
Mono.Cecil
• Cecil is a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format.
• 要はCIL(MSIL)をごにょごにょする素敵ライブラリ。
![Page 23: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/23.jpg)
Mono.Cecilが使われているところ
• Mono Debugger
–Cecil自体がMonoプロジェクトだしね。
• ILSpy
– .NET逆アセンブリツール
–SharpDevelopのグループが作ってます。
• 各種weaving/AOPツール
![Page 24: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/24.jpg)
Mono.CecilをMetroに移植しよう
• Mono.CecilはMetroに対応してない。
–Metro用の.NETはサブセット版だしね。
• Metro用クラスライブラリとして移植
–既存の.NETプロジェクトではMetroを ビルドターゲットに指定できないので、Metro用にプロジェクトを作り直す。
–Portable Class Libraryでは多分無理。
•Reflection APIが違いすぎる
![Page 25: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/25.jpg)
Mono.Cecil 移植のポイント
• Reflection APIの差異を埋める
–GetTypeInfo()への置き換えなど
• System.Security.Cryptography → Windows.Security.Cryptography
• File I/Oはサポートしない
–StreamでのI/Oに限定
![Page 26: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/26.jpg)
Mono.Cecil for Metro
• ソースをGitHubに置いておいた
–https://github.com/terurou/cecil
–とりあえずコンパイルを通したレベル
–まだテストコードを移植してない
• Windows8 製品版で動作しなくなる 可能性があるので注意。
![Page 27: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/27.jpg)
デモ
• Metro Style AppsからDesktop用のコンソールアプリを動的生成します。
–Hello World的なことするだけです。
![Page 28: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/28.jpg)
まとめ
![Page 29: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/29.jpg)
Metro Style Appsで EXE出力して何が嬉しいのかは 私にもよくわからないですね。
![Page 30: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/30.jpg)
少し真面目に利用用途を考える
• 動的生成したアセンブリをキャッシュ
–都度生成では性能問題が出るケースに
• Metro用DSL/コンパイラを実装
–Metroアプリ内DSL
–Desktopアプリの生成
–Silverlightアプリ(XAP)の生成
•SilverlightでXAP生成はできたので、 9割方実現できるはず
![Page 31: Metro Style AppsでMSILver.2012/06/09](https://reader034.vdocuments.site/reader034/viewer/2022042714/55660214d8b42aa6628b49af/html5/thumbnails/31.jpg)
ご清聴ありがとうございました