今月の活動 (ジャッコ言語のスコープ解決、型システムの悩み、sql-placeholder-js、短い記事を書いた、など)
- 前回 (2020-08-31) https://vain0x.github.io/blog/2020-08-31/diary/
ジャッコ言語
スコープ解決
いままで名前解決は CPS 変換と同じく抽象構文木を辿りながらやっていた。今度は、名前解決の一部を「スコープ解決」と称して分離し、構文解析と同時に行うように変更した。
いままでシンボルを「スコープから引く」ことと「名前空間のパスを使って参照すること」を区別できていなかったことに気づいた。(詳細: #ローカルの環境と名前空間を分けて考える)
実装: jl_compiler/src/scope/scope_system.rs
型システム
一部の暗黙のアップキャスト (*mut T
→ *T
など) と演算子のオーバーロード (i32 + i32
と usize + usize
など) を組み合わせるための型システム (型推論) の設計に悩んでいる。わりと迷走中
SQL の名前付きプレイスホルダーを解決するライブラリを作った
その他: 短い記事を書いた
式指向の構文を採用すると言語の設計や実装に一定の複雑性を追加するという話: 式指向構文が言語処理系にもたらす複雑性
Map をいわゆるレコードのように使えるような型を TypeScript で定義する話: Mapをレコード代わりにするための型付け
TypeScript では組み込みの Date オブジェクトはスルーして、日時を文字列で持つ方がよいという考え: 日時を文字列で持つ案 (Dateのことは忘れる)
脱参照できないポインタの存在は認めないわけにはいかないので nullをポインタとみなしても破綻はないが、参照はそうではない、という話: nullはポインタだがリファレンスではない
React は UI が first-class なところがよいという考え: ReactのよさはUIが第一級なこと
関数の一部を抽象化するとき、その部分を関数として渡す方法と、副作用を表現するエフェクトを返す方法の比較: 関数を渡すvs.エフェクトを返す
その他: SDL のチュートリアルをやった
Linux 向けの GUI アプリを作れるようにしようと思って SDL のチュートリアルをやった。GTK+ の方もやろうとしている