Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

IL2CPPに関する軽い話

11,818 views

Published on

自分の理解の為、軽く作成してみた資料でございます。
必要な方はご覧になってください。

Published in: Technology
  • Be the first to comment

IL2CPPに関する軽い話

  1. 1. 出た! IL2CPP! ヤン ウラム 株式会社 オルトプラス
  2. 2. 自己紹介 • ヤン ウラム (恨む)(Wooram Yang) ソウル 出身 Altplus Inc. Japan Client Programmer wooram-yang@altplus.co.jp
  3. 3. IL2CPPは? • The IL2CPP runtime combines an ahead of time compiler with a virtual machine to convert assemblies to C++ while leveraging standard platform C++ compilers to produce native binaries. The net result is significantly higher performance, platform compatibility and maintainability. • IL2CPPランタイムはネイティブバイナリを作る為、標準プラッ トフォムのC++コンパイラを使いながらアセンブリをC++に変 換する為の仮想マシンとAOTコンパイラとを持っています。最 終結果はすごく高い性能、プラットフォム互換性と保守性です。
  4. 4. IL2CPPは? • ScriptをネイティブC++コードに変換してくれ る技術! • ScriptをC++で書けるのを意味しません!
  5. 5. MonoとIL2CPP
  6. 6. • Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime. • モノはC#とCLRの為のECMA標準に基づいた.NET Frameworkの実装です。 Mono? モノ!
  7. 7. • 簡単に言うとWindows以外のプラットフォムに も.NET Frameworkを使えるようにしてくれる モノ • LINQ, Generic, Reflectionのような技術を存分 に使える! Mono? モノ!
  8. 8. • Linux • Mac OS X, iPhone OS • Sun Solaris • BSD - OpenBSD, FreeBSD, NetBSD • Microsoft Windows • Nintendo Wii • Sony PlayStation 3 Mono? モノ!
  9. 9. Monoの登場背景
  10. 10. 2000年6月 Microsoft .Net Framework 発表
  11. 11. これLinux版も出来るかな? ミゲル・デ・イカザ (Miguel De Icaza)
  12. 12. 2001年6月19日 Monoプロジエクト立ち上げられる 2004年6月30日 Mono 1.0リリース
  13. 13. IL2CPPの登場背景
  14. 14. ね、あたしたちはね、C#を使う利点、Third Library利用 とネイティブ性能の為にMonoを採用してきました。でも いくつか問題がありましたよ。
  15. 15. IL2CPPの登場背景 • まだC/C++に及ばないC#ランタイム性能 • 最近そして一番大切な.Net言語とランタイム特徴が現在 MonoのUnityバージョンをサーポトしない • 23個のプラットフォムとアキテクチャを支援するため、 移植、保守そして機能と品質提供するのに結構手数がか かる • ガベージコレクタ動作中にAPPが停止される可能性あり
  16. 16. Benefits?
  17. 17. • C++の性能とC#の生産性 • 状況によってピード2∼3倍上がる • Mono C# Compiler、Base Classライブラリ、 Runtime 更新 • プラットフォムとアキテクチャ依存コードよりバ グ修正と移植が易くなる
  18. 18. IL2CPPの構成
  19. 19. • AOT(ahead of time) Compiler - ILという中間出力された言語をC++に変換 • Runtime Library - GC、プラットフォム独立的な接近、内部コール提供 - libil2cppライブラリを呼び出して使われる - 静的ライブラリリンク
  20. 20. • IL2CPP consists of two pieces: an Ahead of Time (AOT) compiler and a Virtual Machine (VM). At runtime this code is executed with additional services (like a GC, metadata, platform specific resources) that are provided by the IL2CPP VM. ー THE FUTURE OF SCRIPTING IN UNITY (2014.05.20) http://blogs.unity3d.com/2014/05/20/the-future-of-scripting-in-unity/ • The technology that we refer to as IL2CPP has two distinct parts. An ahead-of-time (AOT) compiler A runtime library to support the virtual machine ー AN INTRODUCTION TO IL2CPP INTERNALS (2015.05.06) http://blogs.unity3d.com/jp/2015/05/06/an-introduction-to-ilcpp-internals/
  21. 21. • IL2CPP VMは何の役割をするのか教えていただけ ますか? • はい、il2cpp.exeは実はただAOT Compilerです。 iL2CPPは最小限のVM機能を提供します。私たち はまだMonoによって作られた『.NET VM』を使っ てます。 • mscorlib.dll, System.dllなどに入ってるC#標準ラ イブラリは既存Mono Scripting backendのこと と同じ
  22. 22. IL2CPPビルド
  23. 23. • A7或いは以後のチップを使ってる端末でデスト(iPhone 5S, iPad Air, iPad Mini Retina, iPhone 6, iPhone 6 Plus, iPad Mini 3, iPad Air 2) • ネイティププラグインが64ビットでコンパイルされるか確認 • UnityEngine.Network* APIは今サポートしてないので注意! (すでにRPCやState Synchronizationを使ってる方は、、) • .NET Reflection APIを使ってる場合にはStripされるか確認!
  24. 24. 主にiOSでReflection関連エラーが出ているのは?
  25. 25. • iOSで動的なコード生成はできない、MonoのJIT 動作ができない • これを解決する為、Mono AOT Compilerは必 要なコードをAOTイメージに生成、保存する • System.Reflection.Emit、 System.Runtime.Remotingなどは使用できな い!
  26. 26. さっぱり分かりません、AOT? JIT?
  27. 27. 事前コンパイラ • AOT Compiler、Ahead of time Compiler、事 前コンパイラ • アプリケーション実行前に事前にコンパイルする コンパイラ • CPU独立な中間コードを実行前ネイティプコード に変換 • Android Runtime、NGen (.Net)
  28. 28. 実行時コンパイラ • JIT Compiler、Just In Time Compiler、実行 時コンパイラ • ソフトウェアの実行時にコードのコンパイルす るコンパイラ • Java VM、.Net Framework
  29. 29. • 状況によってパフォーマンスが違う! • AOTコードは使われる前、ロードされるのでJIT コードより最初起動が遅い (Android Lolipop) • JITコードはRuntime データとヘルパ関数に直接 アクセス、AOTは間接アクセス
  30. 30. TroubleShooting
  31. 31. TroubleShooting • Monoと比べてコード起動が遅くなりました。な ぜでしょう? • Xcodeが『Release』環境設定になっているか 確認した上、テストお願いします。解決されな い場合バグ報告を!
  32. 32. TroubleShooting • Unity3DでXcode プロジェクトを吐き出すとエ ラーが出ます。 • 全てのPluginがARM64とIL2CPPをサポートし ているか確認!
  33. 33. Special Thanks To • 高木賢哉 Masaya Takagi (Altplus Inc. Japan) • 山上建一 Kenichi Yamagami (Altplus Inc. Japan) • Ian Meharg (Altplus Inc. Japan) • Josh Peterson (Unity Technologies)
  34. 34. 参考資料 • http://blogs.unity3d.com/2014/05/20/the-future-of-scripting-in- unity/ • http://docs.unity3d.com/Manual/iphone-64bit.html • http://blogs.unity3d.com/jp/2015/05/06/an-introduction-to-ilcpp- internals/ • http://forum.unity3d.com/threads/official-the-collected-il2cpp- forum-topic.247039/ • http://www.mono-project.com/docs/advanced/runtime/docs/aot/ • http://www.mono-project.com/docs/advanced/aot/

×