SlideShare a Scribd company logo
1 of 37
Download to read offline
出た! 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 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ビルド
• 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
• 状況によってパフォーマンスが違う!
• 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

What's hot

「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 

What's hot (20)

【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
 

Viewers also liked

Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
 

Viewers also liked (9)

FunScript: Why bother?
FunScript: Why bother?FunScript: Why bother?
FunScript: Why bother?
 
IL2CPP: Debugging and Profiling
IL2CPP: Debugging and ProfilingIL2CPP: Debugging and Profiling
IL2CPP: Debugging and Profiling
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action
 
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 

Similar to IL2CPPに関する軽い話

関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 
130329 04
130329 04130329 04
130329 04
openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
openrtm
 

Similar to IL2CPPに関する軽い話 (20)

関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
 
Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話 Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話
 
Amazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep diveAmazon EC2 Container Service Deep dive
Amazon EC2 Container Service Deep dive
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
 
第4回「クラウドを支えるKVMの現在と未来」(2011/07/07 on しすなま!)
第4回「クラウドを支えるKVMの現在と未来」(2011/07/07 on しすなま!)第4回「クラウドを支えるKVMの現在と未来」(2011/07/07 on しすなま!)
第4回「クラウドを支えるKVMの現在と未来」(2011/07/07 on しすなま!)
 
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
 
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
cndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmaltcndjp: 「Microclimate」by capsmalt
cndjp: 「Microclimate」by capsmalt
 
Deploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipelineDeploy TypeScript Application by CodePipeline
Deploy TypeScript Application by CodePipeline
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
NET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ APINET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ API
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 

IL2CPPに関する軽い話