marisa-trie を rust に移植してみた

https://github.com/tokuhirom/rsmarisa

marisa-trie は、高速でコンパクトな trie のライブラリ。 https://github.com/s-yata/marisa-trie

めちゃくちゃ便利なライブラリなので自然言語処理したりするときにはとても重宝する。 rust から使いたい場合には https://github.com/polachok/libmarisa-sys などを使えば良い。 しかし、C++ のライブラリなので、これに依存すると作成したツールのインストールがちょっと面倒になってしまう。

そこで、LLM の習作もかねて rust に移植してみた。コードはほぼ書いてない。

オリジナルのソースコードをリスペクトしてどのファイルから移植したかを分かりやすく残しておいてほしいということだけ伝えて、生成される trie ファイルのバイナリが同一になることを制約とすると、C++ 実装が生成したファイルとの差分を見てよしなに調整してくれた。

f32::MIN と f32::MIN_POSITIVE を取り違えるなどいくつかのミスがあったのだが、どの行から内部構造にズレが起きてるかを確認するためにオリジナル実装に printf を加えて途中経過を出力させ、どこからズレるかを確認させた。人間がやるよりも諦めずにめちゃくちゃ細かく printf debug 出来るんで、強い。

ただ、このやり方には改善の余地を感じるね。今回のようなタイプの移植だと、LLM にデバッグさせる場合、旧来のデバッガのようにブレークポイントを出すよりも、tracing してログを出させるようなツールの方が良かったりするのかもしれない。 いや、gdb-mcp みたいなんが探せばあるのかな?

何にせよ、昔はデバッガーが使いやすいからというのが IDE 使うメリットの一つだったけど、LLM からデバッガを操作するようになるのかもしれないね。

【追記】 https://github.com/wado-lang/wado/pull/172 良いかも

Published: 2026-01-28(Wed) 08:49