Lamina - 依存関係なしで独自実装したコンパイラバックエンド
(github.com/SkuldNorniern)Laminaは Intermediate Representation code(IR code)を入力として受け取り、マシンコード/バイナリを生成するコンパイラバックエンドプロジェクトです。
私がこの4〜5年間にわたって学んできた言語/コンパイラの知識やプロジェクトをもとに開始したもので、コンパイラに関心のある方々にとって、直感的に理解できるシンプルなリファレンスになればと思います。
現在サポートしているプラットフォーム
- macOS (aarch64)
- Linux (x86_64)
- WebAssembly (wasm32/64)
対応予定のプラットフォーム
- Windows (x86_64)
- macOS (Intel)
- Linux (aarch64)
- Risc-V
Windows aarch64については、筆者が実機を所有していないため優先度が低く、ひとまず対象外
現在の状態
現在はコンパイラ最適化パスがないため、速度はC#よりやや遅い程度です。
次回以降のアップデートで Machine IR レイヤーの実装が予定されており、それにあわせて最適化パスの導入も予定されています。
また、0.1リリースまでに Testcode と codegen 部分でAIを使って生成された内容の大半を削除し、書き直す予定
コンパイラフロントエンドの例
Brainfuck-Lamina Repo - シンプルなBrainfuckコンパイラ
今後開発予定の機能
- GPUコード生成のサポート(今後、独自実装のMLライブラリのバックエンドとして活用)
- JITコンパイルのサポート
- デバッガなどのツールセットの提供
- 独自実装のアセンブラ、リンカの提供(既存ユーティリティのサポートは維持)
2件のコメント
すごいですね……
まだまだ未熟なプロジェクトですが、
好意的に見ていただきありがとうございます!
今後もプロジェクトを改善し続けて、コンパイラ関連を勉強している方々にとって良い資料になればうれしいです