今月の活動 (ミローネ言語、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アプリのルーティング・ページ遷移 - ベインのブログ (厳密には先月書いたけど、前回の近況記事に書き忘れた)
 - 値とストレージの区別 - ベインのブログ