Crystal プログラミング言語に興味がありますが、少し混乱し
The compiler is written in Crystal.
ています。言語をブートストラップする (それ自体で作成する) ことができることは知っていますが、コンパイラ/インタープリターを実行できるように別の言語のコードが必要です。CrystalリポジトリでCrystalソースではないコードも検索しましたが、言語全体を処理していないように見えるllvm-ext.ccファイルしか見つかりませんでした。
それで、私の質問: Crystal は単なる言語仕様であり、他の (非公式の) コンパイラが必要ですか?
1 に答える
Crystal フロント エンドを含む Crystal ソースからプログラムをコンパイルするには、Crystal ドキュメントで推奨されているコンパイラ (Crystal フロント エンドから LLVM へのコンパイル済みバイナリおよび LLVM のバイナリ) 以外のコンパイラは必要ありません。Crystal は単なる言語仕様ではありません。これは実行中のコンパイル済み言語であり、自己ホスト型のフロント エンドを備えています。
別の方法で言語を提供するために、Crystal または任意のコンパイル済み言語用の新しいコンパイラ フロント エンドを作成することは可能ですが、難しく、必ずしも実用的ではありません。多くの言語では現在実装が 1 つしかなく、複数の実装を持つ一般的な言語では、通常、コンパイラ スイートごとにフロント エンドが 1 つしかないことが、困難であり、しばしば非現実的であるという証拠です。
既存のコンパイラーやインタープリターに依存するのではなく、「ゼロから」言語を提供するには、テーブルで機械語命令を検索し、コンピューターにバイト単位で入力する方法でコンパイラーを作成できます。これは非常に難しいプログラミング方法であり、その証拠は個人的な経験です。私はその方法で約 10 バイトの長さのプログラムを書きましたが、それらのプログラムはあまり機能しませんでした。私は他の方法でもっと長いプログラムを書いたことがあります。
2013 年 11 月から 2017 年まで、Crystal の実装にはセルフホスティング コンパイラ フロント エンドしかありませんでした。それ以前は、Crystal は Ruby で書かれたフロント エンドによって実装されていました。Ruby のフロント エンドを Crystal で書き直した後、Ruby のフロント エンドを使用して、Crystal ソースからフロント エンドをコンパイルしました。これが、Crystal が自己ホスト型のフロント エンドを持つことになったブートストラップ プロセスでした。
参照:
Crystal サイト: DOCS: インストール: From source
さよならRuby木曜日— Crystalのブートストラップの発表