今月の活動 (ミローネ言語、LALRとreturn式、HSP3アナライザミニ、hsp3-debug-window-adapter、行分割DPと禁則処理、ブログテーマの改修など)
- 前回 (2021-05-31) https://vain0x.github.io/blog/2021-05-31/diary/
ミローネ言語
https://github.com/vain0x/milone-lang
milone run
run
サブコマンドを追加した。
ミローネ言語で書かれたコードを手軽に動かせるようにするため。
(dotnet
や cargo
にもあるやつ。)
仕組みは単純で、コンパイルと実行をまとめただけ。コンパイル結果であるCのコードと、ビルドスクリプトを一時ディレクトリに書き込んでから ninja && ./<生成したexe>
を実行する。
実装の一部はCの標準ライブラリの範囲ではできなさそうだった。 具体的には「一時ディレクトリがなかったら作る」という挙動と、サブプロセスを起動する挙動。 そのため、Linuxのmkdir関数とexecv関数を使った。 Windowsでは動かない。できれば動くようにしたい……
脆弱なビルドチェイン
ビルドスクリプトが壊れているのがつらい。更新されるべきファイルが更新されないとか、何度実行してもdirtyのままになるとか。
LALRの衝突
https://twitter.com/vain0x/status/1408061981970468868
- パーサジェネレータを使ったことがなかったので、Rustのlalrpopを試していた
- いつもどおりRust風の構文のパーサを書いていたら、return式の定義が衝突してしまった
文法はこんな感じ:
atom =
ident
| "(" expr ")"
| "return" expr?
mul =
atom
| mul "*" atom
| mul "/" atom
add =
mul
| add "+" mul
| add "-" mul
expr = add
(LALRだから左再帰でもOK)
return a + b
が (return a) + b
なのか return (a + b)
なのか曖昧だと指摘されてしまう。
HSP3アナライザーミニ
- プレリリースとしてvsixの公開をしてみた (v0.3.1)
- 挙動はそれなりに安定している
- ホバーとシグネチャヘルプがうるさい気がする
hsp3-debug-window-adapter
- F5を押してもデバッグできない (launch.jsonを作る必要がある) 現象が報告されたので調査した
- 忘れてたけど以前からそうだった
- 設定ファイルにミスがあったせい
contributes.debuggers[].languages
にデバッグの対象となる言語を書いておく必要があった
行分割アルゴリズムをかじった
- 状況: PDFに文字列を描画する機能を作っていた
- 単語を矩形内に適度に配置したり、長い文章を矩形に収めたりする必要があった
- 行分割アルゴリズムや禁則処理について調べた
- 行分割は、単語数に対して線形時間でできるらしいけど、2乗のオーダーでよければ典型的なDPでできた
- 禁則処理は、間に改行が入らないような文字を1単語として分割するだけだった
ブログのテーマ
- このブログのテーマ (デザイン) を更新した
- コードのシンタックスハイライトがみづらかった
- hugoの機能でGitHub風のテーマに変更できるようだったので、そっちに切り替えた
- https://gohugo.io/content-management/syntax-highlighting/#generate-syntax-highlighter-css
- フォントが小さいとか、引用ブロックがイタリックにならないようにするとか、コントラストを上げる (灰色を白や黒に近づける) とか、細かいところを調整した
- h2 (見出し) の上に空白をつけて文章構造を分かりやすくした
- 本文の右端の折り返しが分かりづらかったので、両端にボーダーをつけようとしたけど、不格好なのでやめた
- この記事のように箇条書きの途中に改行があると、文が途中で切れているようにみえる
- 本文の外側の背景を灰色にするのは、構造的に厳しそうだった
- 代わりというわけではないけど、テキストの割りつけ(text-justify)を使って右端が縦に揃うようにしてみた
- マシになった(?)
その他
- 記事を書いた:
- GUIアプリのルーティング・ページ遷移 - ベインのブログ (厳密には先月書いたけど、前回の近況記事に書き忘れた)
- 値とストレージの区別 - ベインのブログ