今月の活動 (ミローネ言語、コンパイラの教科書、AA木、読んだ記事など)
- 前回 (2022-06-30) https://vain0x.github.io/blog/2022-06-30/diary/
ミローネ言語
- 関数ポインタを扱えるようになってきた
- 呼び出し規約とかを指定できるうまい構文を考えていたが、Cの呼び出し規約以外をサポートする必要がなさそうなことに気づいた
- ジェネリックなレコード型を実装した
- ジェネリックな判別共用体型はずいぶん前に実装したのに放置していた
- いまいち使いみちがわからない
- オブジェクト代数(Object Algebra)で使えて便利そうということを知った
コンパイラの教科書
- 前月は意味解析まで読んだ
- 今月はコード生成まで読み、コンパイラとして動くようになった
- 詳細は別の記事を書いた
- 次はタイガー本のサンプルを書くか、「8つの最適化」のやつをやるか
AA木
- AA木の実装を書こうとした
- 赤黒木の変種で、左側に赤ノードを認めないという感じの制約を入れることで実装がシンプルになる
- ミローネ言語で使えるかと思ったが、ミローネ言語で書くとまったく簡潔にならないのでやめた
読んだ記事など
Lessons from Writing a Compiler (公開日 2022-07-06)
- コンパイラを実装してみて教科書に書いてない部分を学んだという話
- 実装の進めかたやテストの作りかた、環境やエラーの表現とか
Carbon言語
- C++の後継を目指している言語として発表された
- まだ実験段階で、実用化は早くても数年後
- C++との相互運用に重点を置き、既存のC++のプロジェクトから漸進的に移行できるようなものにしたいらしい
- こう聞くとすぐ気になることがある
- C++を改善するのではなく新しい言語を作るのはなぜか、既存の言語(Rustとか)に移行するのではダメか、など
- ドキュメントに説明がある
- FAQ #What alternatives did you consider?
- Difficulties improving C++
- C++におけるABI-compatibilityの扱いへの批判はこっちのほうが詳しい: The Day The Standard Library Died | cor3ntin
- そもそもC++との相互運用がどこまで実現可能なのかというのも気になる
- ロマンはある
- C++は仕様的に入力支援と相性が悪く、ビルド時間が増大しやすい
- C++で書かれた部分をなるべくそのままにして、追加・変更する部分をCarbonで書くことにすると開発体験がよくなりそう