SlideShare a Scribd company logo
出た! IL2CPP!
ヤン ウラム
株式会社 オルトプラス
自己紹介
• ヤン ウラム (恨む)(Wooram Yang)
ソウル 出身
Altplus Inc. Japan
Client Programmer
wooram-yang@altplus.co.jp
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コンパイラとを持っています。最
終結果はすごく高い性能、プラットフォム互換性と保守性です。
IL2CPPは?
• ScriptをネイティブC++コードに変換してくれ
る技術!
• ScriptをC++で書けるのを意味しません!
MonoとIL2CPP
• 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? モノ!
• 簡単に言うとWindows以外のプラットフォムに
も.NET Frameworkを使えるようにしてくれる
モノ
• LINQ, Generic, Reflectionのような技術を存分
に使える!
Mono? モノ!
• Linux
• Mac OS X, iPhone OS
• Sun Solaris
• BSD - OpenBSD, FreeBSD, NetBSD
• Microsoft Windows
• Nintendo Wii
• Sony PlayStation 3
Mono? モノ!
Monoの登場背景
2000年6月 Microsoft .Net Framework
発表
これLinux版も出来るかな?
ミゲル・デ・イカザ (Miguel De Icaza)
2001年6月19日
Monoプロジエクト立ち上げられる
2004年6月30日
Mono 1.0リリース
IL2CPPの登場背景
ね、あたしたちはね、C#を使う利点、Third Library利用
とネイティブ性能の為にMonoを採用してきました。でも
いくつか問題がありましたよ。
IL2CPPの登場背景
• まだC/C++に及ばないC#ランタイム性能
• 最近そして一番大切な.Net言語とランタイム特徴が現在
MonoのUnityバージョンをサーポトしない
• 23個のプラットフォムとアキテクチャを支援するため、
移植、保守そして機能と品質提供するのに結構手数がか
かる
• ガベージコレクタ動作中にAPPが停止される可能性あり
Benefits?
• C++の性能とC#の生産性
• 状況によってピード2∼3倍上がる
• Mono C# Compiler、Base Classライブラリ、
Runtime 更新
• プラットフォムとアキテクチャ依存コードよりバ
グ修正と移植が易くなる
IL2CPPの構成
• AOT(ahead of time) Compiler
- ILという中間出力された言語をC++に変換
• Runtime Library
- GC、プラットフォム独立的な接近、内部コール提供
- libil2cppライブラリを呼び出して使われる
- 静的ライブラリリンク
IL2CPPに関する軽い話
• 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/
• IL2CPP VMは何の役割をするのか教えていただけ
ますか?
• はい、il2cpp.exeは実はただAOT Compilerです。
iL2CPPは最小限のVM機能を提供します。私たち
はまだMonoによって作られた『.NET VM』を使っ
てます。
• mscorlib.dll, System.dllなどに入ってるC#標準ラ
イブラリは既存Mono Scripting backendのこと
と同じ
IL2CPPビルド
IL2CPPに関する軽い話
• 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されるか確認!
主にiOSでReflection関連エラーが出ているのは?
• iOSで動的なコード生成はできない、MonoのJIT
動作ができない
• これを解決する為、Mono AOT Compilerは必
要なコードをAOTイメージに生成、保存する
• System.Reflection.Emit、
System.Runtime.Remotingなどは使用できな
い!
さっぱり分かりません、AOT? JIT?
事前コンパイラ
• AOT Compiler、Ahead of time Compiler、事
前コンパイラ
• アプリケーション実行前に事前にコンパイルする
コンパイラ
• CPU独立な中間コードを実行前ネイティプコード
に変換
• Android Runtime、NGen (.Net)
実行時コンパイラ
• JIT Compiler、Just In Time Compiler、実行
時コンパイラ
• ソフトウェアの実行時にコードのコンパイルす
るコンパイラ
• Java VM、.Net Framework
IL2CPPに関する軽い話
• 状況によってパフォーマンスが違う!
• AOTコードは使われる前、ロードされるのでJIT
コードより最初起動が遅い (Android Lolipop)
• JITコードはRuntime データとヘルパ関数に直接
アクセス、AOTは間接アクセス
TroubleShooting
TroubleShooting
• Monoと比べてコード起動が遅くなりました。な
ぜでしょう?
• Xcodeが『Release』環境設定になっているか
確認した上、テストお願いします。解決されな
い場合バグ報告を!
TroubleShooting
• Unity3DでXcode プロジェクトを吐き出すとエ
ラーが出ます。
• 全てのPluginがARM64とIL2CPPをサポートし
ているか確認!
Special Thanks To
• 高木賢哉 Masaya Takagi (Altplus Inc. Japan)
• 山上建一 Kenichi Yamagami (Altplus Inc. Japan)
• Ian Meharg (Altplus Inc. Japan)
• Josh Peterson (Unity Technologies)
参考資料
• 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/

More Related Content

IL2CPPに関する軽い話