2020-04-05: Cコンパイラ作ってた
やったこと
Cコンパイラ
式のパーサを作った。
一度もコンパイルできていないがきっと動くだろう、きっと。
参考にしてるのがそうやってるから、パーズ時に型情報を(必要なら)付けてるけど、これはイマイチなのではないかという気がする。
暗黙の型変換とかの規則が結構複雑なのを考えると、
- 変数の参照は解決しつつ、ソースコードの構造になるべく厳格な形でパーズ。
- 型情報を追加しつつ、より単純なASTに変換。
- コード生成。
という3パスでやるのがしっくり来る気がする。
このツイートに書いた通り、ローカル変数の参照はパーズと共に解決した方が自然になるのでそうした方が良いのが難しいところ。
https://twitter.com/make_now_just/status/1246510815261286400
あとメモリ管理。
どうせならちゃんとやりたいけど、どうするのがいいんだろうな‥‥。
shared_ptrが欲しい‥‥。
調べたらこんなのがあるようだ。
https://github.com/Snaipe/libcsptr
Crystal
Enumerable#firstのPRで、ドキュメントを整理した。
あとテストを通るようにした。
本当にIndexErrorの代わりにEnumerable::EmptyErrorでいいのかなぁ、という感じもするけど、IndexErrorが別段良いわけでもないのでこれでいいと思う。思いたい。
再帰的なデータに対して==とhashを動くようにするやつは説明が難しくて困る。
はたして伝わっているのだろうか。
もうちょいPRの説明欄の文章を拡充すべきか。