【要約】ChatGPT PlusのProjectsだけでプログラミング言語を作り始めて早10週間 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者が開発中の言語「Ane」において、言語仕様の構築からツールチェーンの構築へとフェーズを移そうとした際、設計の複雑性が爆発する問題に直面した。既存のCバックエンドに依存することで、本来言語が管理すべき低級な責務が隠蔽されていることが原因である。
- ・CコンパイラがABI、スタックフレーム、呼び出し規約等の詳細を隠蔽している。
- ・L6(ツールチェーン層)の責務が言語仕様の論理と混在し、境界が曖昧になる。
- ・ビルドグラフ等の設計を誤ると、言語の「隠れた制御フローなし」という原則が崩れる。
// Approach
筆者は、L6を単なる便利機能ではなく、言語の入出力を管理する中核層と定義し、設計の境界を明確にする手法を検討している。言語機能とツールチェーン機能を分離し、観測可能な形で設計を定義することを目指している。
- ・L5(言語機能)とL6(ツールチェーン機能)の差をテストで観測可能にする。
- ・モジュールグラフに、論理パスやリソース等の詳細なメタデータを保持させる。
- ・自己ホスト検証の指標として、バイナリの一致ではなく型付きIRの比較を採用する。
// Result
筆者は、L6の設計が言語の将来を決定づけることを認識し、設計の切り口を整理することで、次なるステップへの準備を行った。具体的な機能追加はないが、設計上のリスクを明確化したことが成果である。
- ・アセンブリ、ABI、リンカ等の設計要素が相互に依存していることを特定した。
- ・Cバックエンドの恩恵が、言語仕様の曖昧さを招くリスクを明確化した。
- ・「便利なビルドコマンド」ではなく「ツールチェーン中核」としての設計指針を得た。
Senior Engineer Insight
> コンパイラ開発における「抽象化の罠」を突いた、極めて実践的な考察である。C環境を利用したブートストラップは初期開発を加速させるが、Cが隠蔽する低級な詳細を設計段階で分解しなければ、言語の独立性は保てない。L6のようなツールチェーン層の設計を疎かにすると、言語の整合性が崩壊する。スケーラブルな言語設計には、言語仕様とビルド仕様の厳格な分離が不可欠である。