3

CosmosとSharpOSが独自のコンパイラを作成してC#からバイナリコードを構築していることは理解していますが、Microsoftの.NET AOTを使用して同じことを行うことはできますか?C#をx86にコンパイルします。ステートメントを含める場合は、OS開発のように、ステートメントの使用を省略しなければならないと思います。フィードバックをいただければ幸いです。ありがとう

編集:カーネル開発でC#を使用したい主な理由は、マネージコードがもたらすメモリ管理、特に単一のアドレス空間プロパティのためです。JITコンパイラを起動してから、C#をコンパイルする必要がありますか?それとも、その時点で環境はまだ機能不全に陥っていますか?フィードバックをありがとう

4

4 に答える 4

5

簡単な答え:いいえ、ngen.exe / AOTコンパイラを使用するだけでは、カーネルをコンパイルするのに十分ではありません。

長い答え:ngen.exe / AOTコンパイラはJITコンパイラの仕事を切り取りますが、CLRは単なるJITコンパイラではなく、他のアセンブリを参照しなくても、メモリ管理、ガベージコレクション、タイプなどを提供します。チェックと例外処理(およびその他のすべての負荷)。

はい、ngenを使用すると、C#でカーネルを作成するのに一歩近づきますが、それほど近づきません。解決すべき他の問題がたくさんあります。これらの問題は、コンパイラを作成することでより簡単に解決できます。 (CLRではなく)目的の環境を対象としています。

更新: C#の「管理された」部分が必要な場合は、コードを実行するための管理された環境、つまりガベージコレクターなどを自分で作成する必要があります(または、CLRのような既存の環境を機能させるようにしてください。おそらくもっと難しいです)。これは、基盤となるOSのサポートがあっても、非常に困難な作業です。これは、OSがさらに重要な場合に実行しますただし決して不可能ではありません。結局のところ、これはSingularityやCosmosなどのプロジェクトが行ったこととまったく同じです)。

于 2011-07-29T11:35:08.850 に答える
0

できません。C#は管理された言語です。つまり、コード(ILコード)は実行時にコンパイルされます... C#をネイティブコンピューターコードにコンパイルする独自のコンパイラーを作成できますが、これにより、.NETの多くの機能がなくなります。ガベージコレクター、メモリ管理、JITコンパイラーなどがあり、C#構文だけでC++のようなものになります

抽象的アイデアとして、JITコンパイラとガベージコレクタを使用して小さなCLRの代替案を作成できると思います。これはアプリケーションに組み込まれますが、これによりアプリケーションのサイズが大きくなり、より多くのリソースが必要になります...

于 2011-07-29T11:18:26.873 に答える
0

いいえ、ngenではできませんでした。ngenの出力自体は、サポートされているすべてのCLRとWindowsインフラストラクチャが一緒に実行されていないと、カーネルを起動するのに十分な低レベルではありません。

あなたが言及する他のプロジェクトは、CLRのサブセットをバイナリにコンパイルします。これはわずかに異なるプロセスです。

于 2011-07-29T11:15:55.320 に答える
0

cosmOSプロジェクトで使用されているILをネイティブコードにコンパイルするために使用しているこのリソースを見つけました

于 2011-08-01T19:37:15.967 に答える