私は現在、F#やRustを用いて、システムプログラミング言語を開発しています(今回は本気)
設計思想
-
プログラムはメモリ安全でなければいけない
-
実行時コストを限界まで抑えなければいけない
-
並列処理を安全に行わなければいけない
-
ビルド時間は短くなくてはならない(ビルド時間は支障のない程度でなければいけない)
メモリ管理モデルについて
「GCとかARCはイマイチだな〜...」
「所有権システムもなぁ...」
結果、メモリ管理モデルを新しく作ることにしました
パーサについて
F#のFParsecを使っています。いろんな意味で面倒臭い...
あと、式と少しの構文だけ
コンパイラ
多分この言語を作る中で、これが一番難しいのでは
AST
ASTは配列を使って平坦化します
判別共用体で階層的にやってもいいけど、CPUの気持ちで考えるとこっちの方が良いと思った
これのおかげでパーサがめんどい
型推論
ASTがフラットなので、型の断定後の変更は結構楽かも
バイナリ生成
MLIRファイルを作成
→ 書き込み
→ LLVMへコンパイル
→ バイナリ
といった感じです。早く.NETにもMLIRSharpみたいなのが追加されてくれ...
最後に
なんか独自概念が2, 3個ほどできそうです
学生なので完成するまでに長い時間を要すると思います