それ自体で記述できるような方法で言語を構造化することは可能でしょうか? c で ac コンパイラを書いたり、python で python インタプリタを書いたりできますか? そうでない場合、ソース自体を書き直すことはできますか? その場合、別の言語のコンポーネントを使用する必要がありますか (つまり、コンパイルされた c を Python スクリプトで実行します)? 実際にこのような例はありますか?
3 に答える
あなたが探しているキーワードはself-hostingです。
通常自己ホスト型のその他のプログラムには、カーネル、アセンブラー、シェル、およびリビジョン管理ソフトウェアが含まれます。
自己ホスト型のプログラミング言語には、Ada、BASIC、C、CoffeeScript、F#、FASM、Forth、Haskell、Java、Lisp、Modula-2、OCaml、Oberon、Pascal、Python、Scala、Smalltalk、Vala などがあります。
私が使用したリストにないもう 1 つのコンパイラはMercuryです。
および関連用語の自己通訳者。
Lisp や Prolog など、特に優れたエレガントなセルフインタープリターを備えた言語がいくつかあります。
はい、1 つのアプローチはメタサーキュラー インタープリターを作成することです。これには、非常に理解しやすい、または単純なインタープリターを作成できるという利点があります。おそらく最もよく知られている教科書の例は、Structure and Interpretation of Computer Programs の第 4 章で、Scheme のサブセット自体の実装について説明しています。ただし、インタープリターやプログラミング言語全般について学びたい場合は、 PLAIから始めるのがよいと思います。
プロダクション言語の場合、単純なインタープリター以上のものを必要とすることがよくありますが、ある時点で実装をブートストラップすることもできます。最近の例では、Rustコンパイラ自体が記述されています。