コンパイラは、独自の言語でブートストラップと呼ばれるトリックを使用して記述することができます。私の質問は、このトリックを通訳にも適用できるかどうかです。インタプリタをブートストラップしますか?
理論的には答えは間違いありませんが、反復を繰り返すうちに、ソースコードの解釈がますます非効率になるという心配があります。それは深刻な問題だろうか?
私はプログラムが絶えず変化する非常に力強いシステムをブートストラップしているので、コンパイラは除外されています。
私はこの方法でそれをスペルアウトしてみましょう:
は私のことが通訳をしてみましょう。
Lをプログラミング言語にしましょう。
- L1を解釈するために、マシンコード(最下位レベル)にi1を書くことができます。
- 次に、L1にi2を書いて、新しい言語であるL2を解釈します。
- 次に、私はL2でi3を書いて、L3を解釈します。もう1つの新しい言語です。
- のように...
私たちは、上記だけで通訳を任意のコンパイラを必要としません。右?
これは非効率的である可能性があります。それは私の質問であり、それが本当に非効率な場合にそれを克服する方法です。
これが可能であるかどうかわからない場合、あなたはほぼ確実にあなた自身のプログラミング言語を作成しようとはなりません。また、コンパイルされた動的システムを持つことができないことは間違いありません。 – Marcin
これは実際にはブートストラップではありません。ブートストラップを使用すると、インタプリタBは、自身のために通訳を解釈されている場合これは、通訳には適用できない言語Aに書かれたコンパイラの言語Aをコンパイルすること、および関連する_no_他の言語があり、その後、正確Bの実行されていますか?ロジックは、何かがコンパイルされたことを意味する別の言語(たぶんマシンコード)が必要であることを示しています。あなたが話しているのは、インタープリタスタックです。 PyPyプロジェクトはPythonでPythonインタプリタを構築した経験があります(制限されたサブセットではありますが):http://pypy.org。 –