今月の活動 (ミローネ言語、最適化コンパイラ、読んだ記事など)
- 前回 (2022-07-31) https://vain0x.github.io/blog/2022-07-31/diary/
ミローネ言語
https://github.com/vain0x/milone-lang
- プロジェクトをライブラリとしてビルドするための設定の追加
- Windowsでの不具合の修正
- インストールディレクトリの変更:
- いままで
$HOME/.milone
に配置していた $HOME/.local/share/milone
とかに置くほうがよいとされているらしい- XDG Base Directories に書いてある
- いままで
- モジュールロード機能の移動:
- (ModuleLoad.fs の冒頭にも詳しく書いた)
- ソースファイルの読み込みかたはクライアントによって異なるので、クライアント側でやるようにした
- 例えばLSPサーバーはファイルではなくテキストエディタの内容を使ったり、パースの結果をキャッシュしたりしている
- これ以外にもパイプラインがコンパイラ用になってしまっていて、LSPサーバー側は改善の余地がある
- ワークスペース内に複数のプロジェクトがあるときStdの型検査が行われてしまうところとか
最適化コンパイラ
playground/2022-08-07-optimizing-compiler (F#)
- ミローネ言語のコンパイラの中間表現がいまいちなので改善したい
- 適切な中間表現と思われるSSA(静的単一代入)形式の試し書きを行うための処理系を作っている
- ついでに構文や型検査で試したいことをやっている
- 構文: スペースの有無を利用してセミコロン自動挿入を行う方式を試している (リンク先に詳細)
- 型検査: 式の型検査の際にターゲットの型 (その式に期待される型) を伝播する方法を試している
- エラー報告の仕組みがまだない
- インライン展開を部分的に実装した
実装面:
- ミローネ言語の型システムの探索のため、可変なオブジェクトをユニークに使うような実装になっている (というか、そうしようとした)
- 関数に可変な参照を渡すのが可変性の表現の素直なかたちなので、それができる型システムにしたいと思っている
- 多数の可変なオブジェクトからなるレコードを渡すと実際にどれが変化するのかよく分からず、可変性の表現になっていない (読み取り専用と読み書き可能の区別がつかない) ことが分かってきた
読んだ記事など
- Semantic Domain: Thought Experiment: An Introductory Compilers Class (公開日 2020-02-13)
- コンパイラの授業で何を教えるかという話
- 帰納的に定義されたデータ構造 (構文木のようなもの) の上での計算と、不動点計算 (何も起きなくなるまでループするやつ) は汎用的で学ぶ価値があるんじゃないかという考察 (特に後者)
- このブログはすべての記事がおもしろい
- The quick and practical “MSI” hash table (公開日 2022-08-10)
- C言語でハッシュテーブルを書くやつ
- (HSPでの実装に役立ちそうな気がする……)
- dotnetで使えるReadLineっぽいライブラリで日本語が使えるのは無いのだろうか? - なーんだ、ただの水たまりじゃないか (公開日 2022-08-26)
- 表題の通り、.NETで使えるGNU readline的なライブラリがことごとく日本語 (というか非ASCII文字やIME) と相性が悪いという話
- 私もほしかったのであらためて調べたが見つからなかった
- PowerShellはうまく動いている
- 実装の一部を取り出してライブラリ化するのがいいのかもしれない
- こういうCJK用の処理がたくさん埋まっているしちゃんと考慮されてそう: ConsoleControl.cs#L2787
- あるいは他言語の実装を移植したりP/Invokeするとかか……