2016-05-19 9 views
2

私は小さなプログラミング言語を開発しており、「セルフホスティング」という概念を捉えようとしています。セルフホスティングのコンセプト

ウィキペディアの状態:

最初のセルフホスティングコンパイラ(アセンブラを除く)は1962年にMITでハートとレヴィンによってLispのために書かれた彼らは、既存のLispの内側にそれをテストし、LispでLispのコンパイラを書きました通訳。コンパイラが独自のソースコードをコンパイルできるまでコンパイラを改善した後は、それは自己ホスティングでした。

これからは、誰かがLispインタプリタを持っていることを理解しています(Pythonで言うことができます)。
Pythonプログラムは、Lispプログラムを読み込み、Lispプログラムも読み込みます。

「セルフホスティング」という言葉では、Pythonプログラムを削除すると、他のLispプログラムを読み込むLispプログラムを実行する機能が削除されるため、Pythonプログラムの使用を中止することはできません。

これで、プログラムはどのようにしてOS上で直接ホストできるようになりますか?たぶん私はちょうどそれを正しく理解していないでしょう。この場合

答えて

2

、用語のセルフホスティングは、彼らが書いたLispのコンパイラ、インタプリタではないに適用されます。

(あなたの例のように)のPythonのLispインタプリタは、入力としてLispのソースを取り、それを直接実行します。

(Lispで書かれた)Lispのコンパイラは、(次にインタプリタことなく実行できる)[1]バイナリ出力を入力として任意のLispソースを取り、ネイティブマシンを生成することができます。

これら2つの部分では、Pythonを削除することが可能になります。プロセスは次のように行く:

python.exe lispinterpret.py lispcompiler.lisp -i lispcompiler.lisp -o lispcompiler.exe 

私たちは、ソース(lispcompiler.lisp)からlispのプログラムを解釈するためのPythonを尋ねると、我々は、入力としての地位lispcompiler.lisp渡します。 lispcompiler.lispはlispcompiler.exeを出力として出力します。これはネイティブのマシンバイナリです(そしてPythonに依存しません)。

あなたがコンパイラをコンパイルしたい次回は、コマンドは次のとおりです。

lispcompiler.exe -i lispcompiler.lisp -o lispcompiler2.exe 

そして、あなたは、Pythonを使用せずに新しいコンパイラを持つことになります。

[1]または、アセンブリコードを生成して、アセンブラに渡すことができます。

関連する問題