ホームページ >バックエンド開発 >C#.Net チュートリアル >C# の実行原理の詳細な分析 (画像とテキスト)
この記事は、C# の実行原理の詳細な分析 (画像とテキスト) を提供します。一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。
Unity3D で C# を実行できるのはなぜですか? C# と Mono の関係は何ですか? Mono と .Net Framework の関係は何ですか?このトピックについて詳しく話しましょう!
コンパイルの原理から始める
コンパイラを一文で紹介します。コンパイラは、特定のプログラミング言語で書かれたソース コード (ソース言語) を、別のプログラミング言語 (ターゲット言語) に相当するものに変換します。プログラムの形式。通常、私たちは特定の高級言語 (C、C、C#、Java など) を低級言語 (アセンブリ言語、機械語) に変換します。
コンパイラはパイプラインの形式で動作し、ソース コード → 字句解析 → 構文解析 → 意味解析 → ターゲット コード → リンク → 実行ファイルといういくつかの段階に分かれています。最新のコンパイラはより複雑になり、プリプロセッサ、中間コード生成、コード最適化など、より多くの処理が中間に追加されます。
#仮想マシンとは何ですか?
仮想マシン (VM) は、簡単に理解すると、実行できます。特定の命令のプログラム。命令を実行するには、レジスタやスタックなどのいくつかのサポート機能も必要です。仮想マシンは非常に複雑である場合もあり、実際のコンピューター ハードウェアをシミュレートするほど複雑な場合もあれば、加算、減算、乗算、除算のみを実行できるほど単純な場合もあります。 コンパイラの分野では、仮想マシンは通常、高級言語を言語に変換した中間コードと呼ばれる言語を実行します。 Java を例に挙げると、Java のコンパイル後に生成されるのは、実行可能ファイルではなく、Java のコードを含む ByteCode (バイトコード) ファイルです。 ソースコードはバイトコード形式の同等のコードに変換されます。 Java 仮想マシン (JVM) は、このファイルの実行を担当します。 仮想マシンが中間コードを実行するには、解釈実行と解釈実行の 2 つの方法があります。 JIT (ジャストインタイムコンパイル)。解釈と実行とは、各命令を 1 つずつ実行することを意味し、JIT 中間コードは実行開始時にまずマシンコードにコンパイルされ、その後マシンコードが実行されます。中間コードが実行されるため、異なるプラットフォーム上に実装された異なる仮想マシンでも同じ中間コードを実行でき、クロスプラットフォームを実現します。int run(context* ctx, code* c) { for (cmd in c->cmds) { switch (cmd.type) { case ADD: // todo add break; case SUB: // todo subtract break; // ... } } return 0; }要約すると、仮想マシン自体はクロスプラットフォームではありませんが、言語はクロスプラットフォームです。開発者にとっては、開発言語のみを気にする必要があり、仮想マシンがどのように動作するかを気にする必要はありません。仮想マシンが実装されています。これも Java がクロスプラットフォームである理由は C# と同じです。さらに言えば、コンパイラや仮想マシンなどのサポート機能が対応するプラットフォームに実装されている限り、理論上はどの言語でもクロスプラットフォームに対応できます。
C# と IL とは何ですか?
C# は、.NET Framework に基づいて Microsoft によって開発された高レベルのオブジェクト指向プログラミング言語です。 Microsoft は、この言語を Java の代わりに使用することを期待して 2000 年にリリースしました。詳細については、C# Wiki を参照してください。 C# は言語です。Microsoft はその言語仕様をカスタマイズし、開発、コンパイル、展開、実行までの完全なワンストップ サービスを提供しています。最新の仕様は随時リリースされます。いくつかの新しい言語機能。文法レベルから見ると、C# は非常に完成度が高く、非常に書きやすい言語です。 C# Java と同様に、C# は中間言語 (CIL、共通中間言語、MSIL とも呼ばれます) にコンパイルされます。 これも高級言語であり、CIL を実行する仮想マシンは CLR (Common Language Runtime) と呼ばれます。通常、私たちは置きます C#、CIL、CLR、および .Net Framework と呼ばれる Microsoft が提供する基本クラス ライブラリのセット。#C# は宇宙を征服するために生まれましたが、残念ながら Microsoft の閉鎖により、この目標は達成されていません。もちろん、C# は現在も好調で、ゲーム、Unity3D、Mono のおかげで活性化しています。
.Net Framework と Mono
Mono は、.Net Framework のクロスプラットフォーム実装です。 Mono は、サポートされているすべてのプラットフォームで CLR を再実装し、.Net Framework によって提供される基本クラス ライブラリを再実装するという素晴らしいことを行いました。上記のコンパイル時の作業は、実際には Microsoft の既存の成果を直接使用できますが、ランタイムの CLR が他のプラットフォームに実装されている限り、これはwork 量が多いだけでなく、互換性も確保する必要があります。非常に大きなプロジェクトです。Mono がやり遂げました。おめでとうございます。 Unity3D の #C
Unity3D には Mono 仮想マシンが埋め込まれています。上記のことから、特定のプラットフォームの仮想マシンが実装されると、そのプラットフォーム上で言語が実行できることがわかります。したがって、厳密に言えば、Unity3D は Mono 仮想マシンを使用します。コンパイラによってコンパイルされた C# 生成の IL コード。 Unity3D はデフォルトで開発言語として C# を使用しますが、Unity3D は JS と BOO を IL にコンパイルするための対応するコンパイラーを開発しているため、JS と BOO もサポートしています。 概要 C# Windows では、IL コードは Microsoft の C# コンパイラを通じて生成され、CLR で実行されます。 C# Windows 以外のプラットフォームでは、IL コードは Mono コンパイラを通じて生成され、Mono 仮想マシンで実行されます。また、コンパイルされた IL コード (任意のプラットフォームを通じてコンパイルされたもの) を直接実行することもできます。 理論的には、言語を作成し、特定のプラットフォーム用のコンパイラを実装してから、すべてのプラットフォームの言語仕様に準拠する仮想マシンを実装すると、その言語はどのプラットフォームでも実行できます。
以上がC# の実行原理の詳細な分析 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。