2

私はそれらがどのように機能するかを理解し始めることさえできません、それは私が推測する非常に広い質問です。CLR用にILにコンパイルされたC#などの言語を使用し、実行時にさらにJITをマシンコードにコンパイルして、モノラルプロジェクトで実装されたインタプリタまたはREPLを作成することはどのように可能でしょうか。彼らはどうやってそれを正しくしたのですか?

4

1 に答える 1

1

どうした?マシンコードは単なるデータです(実行可能な仮想メモリページに配置されます)。そのデータを生成し、それがコードでもあるため、実行することができます。

さまざまな方法でメモリ内のマシンコードを生成できます。たとえば、LLVMlibjit、または他の多くのライブラリを使用できます(または独自のライブラリを作成することもできます)。

いくつかの言語のいくつかの実装(私はCommon LispのSBCL実装を考えていました)は、インタラクティブに入力しているすべての行をマシンコードに変換することさえできます。そしてこれは新しいことではありません、いくつかの1957年のコンピュータはそれをしました(例えばPAFのためのフランスのCAB500)。

ソースコード(Cなど)を生成し、コンパイルプロセスをフォークして、そのコードを動的にロードすることもできます(例:dlopen(3))。現在のコンパイラとプロセッサは、ユーザーフレンドリーな対話のための遅延と互換性を持たせるのに十分な速度です。私のMELTドメイン固有言語(GCCを拡張するため)はそれをうまく行います。

ミリムースがコメントしたように、Monoはフリーソフトウェアなので、そのコードを調べることができます。

コードとデータの同等性は、コンピューターの基本的な特性です。同様に、ゲーデルチューリングの基本的な洞察における数とデモンストレーションの同等性(そして、お気に入りのMP3音楽を聞くときは、それも使用します)。

于 2012-11-12T19:36:08.393 に答える