数年間UnityC#を使っているものの、C#がコンパイル以降どういう流れを辿ってどう動くのか、ぶっちゃけ面倒くさくて目を背けていた。
「俺達は雰囲気でC#を扱っている」
「ガチで危機感持った方がいいと思う」
不意に心の声にそう諭された。SNSの見過ぎかもしれない。
────────────────────────────
言ってる内容自体はまあ全うなのでC#とその周辺について調べて、小難しいことは端折って簡単にまとめました。
大体の構成とか、見覚えのある用語が何を指すものなのか、くらいが分かればいいかなという粒度です。
あまり深堀りして調べてはいませんので、もし間違いなどありましたらご容赦ください。
以下の構成で進めます
・C#とは
・.Netとは
・C#コードのコンパイル以降の流れ
・Unityの独自仕様
・参考
C#とは
C#とは、Microsoft製の汎用マルチパラダイム言語である。
C#は.Net(後述)の一部で、.Netランタイム(後述)上で動く。
C#はCやJavaの影響を強く受けているが、C/C++との互換性はない。(C++はCのコードを書いても動く)
オブジェクト指向、関数型、のようなプログラミングパラダイムの内、複数に対応している、ということ。
wiki曰く、「静的型付け、タイプセーフ、スコープ、命令型、宣言型、関数型、汎用型、オブジェクト指向(クラスベース)、コンポーネント指向のプログラミング分野を含んでいる。」
.Net(旧.Net Core)とは
Microsoftが開発を主導しているオープンソースのアプリ開発/実行フレームワーク。内容物は以下。
・ランタイム(コードの実行機能)
・ライブラリ(Json解析等のユーティリティ機能)
・コンパイラ
・SDK(要は開発キット) とその他のツール
・アプリスタック(上位レイヤーの開発キット?)
クロスプラットフォーム。Windowの他、mac、unix系OSにも対応。
.NET 5以降は、.NET Framework、Xamarin/Monoが統合された。
・.NET Framework・・・Microsoft製のアプリ開発/実行フレームワーク。WindowsアプリやWebアプリが開発できる
・Mono/Xamarin・・・.NET Framework互換の環境を実現するためのオープンソースのソフトウェア群
C#コードのコンパイル以降の流れ
.NetはC#以外にもF#、VB.Netといった言語が使える。
それらのコードはコンパイル時、まず共通中間言語(CIL)に翻訳される。
その後、共通言語基盤(CLI)によって各プラットフォームで動くネイティブコードに翻訳される。
調べると図が出てくるので、そっちを見てもらった方が分かりやすい。
Unityの独自仕様
UnityはScripting Backend(IL翻訳後に処理をするのでバックエンド?)という独自方法で中間言語を変換する。
IL2CPP
ILをC++コードに翻訳し、C++コンパイラによってネイティブコードに変換される。
C++なので基本的にはC#より軽い。
Burst
最適化されたC#コード用のコンパイラで、性能がめちゃめちゃ良くなるらしい。
参考




