Metro Style AppsでMSILver.2012/06/09
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,126
On Slideshare
1,126
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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