LoginSignup
22
12

More than 5 years have passed since last update.

Unity開発するにあたって知っておきたいコンパイラのすゝめ(Part1~Mono編~)(Unity2018.1対応)

Last updated at Posted at 2018-12-05

最初に

この記事はUnityで使用されているコンパイラについてまとめた記事のうちの、基本的に使われている部分であるMonoについて簡単にまとめた記事です。

Monoとは?

.NET Framework互換の環境を実現するオープンソースのソフトウェアです。
UnityではMonoをコンパイラの一つとして取り入れています。

Monoはマルチプラットフォームであり、JITコンパイラを搭載しています。JITは前回の記事でも説明した通り、実行中にILコードをネイティブコード化し、そのコードをキャッシュして2回目以降高速に実行ができる方式です。ただしMonoはAOT方式も可能で、実行前にネイティブコード化しキャッシュしておくこともできます。

JITコンパイラが対応するプロセッサは

  • x86
  • x86-64
  • IA-64
  • SPARC
  • PowerPC
  • ARM
  • S/390(32ビットおよび64ビット)
  • MIPS

となっています。それ以外ではネイティブコードに変換するのではなくインタプリタによって逐次バイトコードが実行されます。

またMonoではSIMDへの対応も行っており、独自の機能が多く取り込まれています。

Monoの構成

Monoを構成するコンポーネントは以下の通りです。

  • C#コンパイラ:MonoのC#コンパイラは、version 5.10.0以降NET 4.7.1・C# 7.2が使用できます。ただし現在Unityでは.NET4.6対応となっているので、C#6までの機能が使用できる。

  • Mono Runtime:ランタイムはCommon Language Infrastructure(CLI)を実装しています。ランタイムは、JITコンパイラ、AOTコンパイラ、ライブラリローダ、GC、スレッドシステム等を提供します。

  • .NET Frameworkクラスライブラリ

  • Monoクラスライブラリ:Monoは、Microsoftが提供するBCL以上に多くのクラスも提供しています。特にLinuxアプリケーションを構築する際に便利な機能を提供します。

  • 共通言語ランタイム(Common Language Runtime(CLR)):CLRを使用すると、他のCLR言語で書かれたコードと相互運用が可能です。例えば、C#でクラスを作成した後にVB.Netでクラスを継承して使用することも可能です。

ちなみにMonoのランタイムとJITコンパイラはC言語で記述されているようです。

Unityでの立ち位置

Unity2017.3以降ではIL2CPPかMonoを選択することができます。ただし、WebGLではIL2CPPのみ使用可能となっています。 (@Ash_Yin(デコシ) さんより、UWPでIL2CPPしか使えなくなるのはUnity2019からとご指摘頂きました)

IL2CPPに比べると

  • ビルド時間が短い。
  • JITのため、より多くの管理系ライブラリをサポートする。
  • ランタイムの実行をサポートする。
  • dllファイルが配布時に必須となる。

このIL2CPPに関しては次回の記事でもう少し詳しく見ていこうと思います。

最後に

今までMonoに関してここまで調べたことがなかったため、どのような役割を担っているのか詳しく知りませんでした。また、Unityでは現在どういった扱いになっているのかも知れて良かったです。

参考

22
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
12