2025/11/21 10:28 FAWK: LLMs can write a language interpreter

ロボ子、Advent of Codeって知ってるか?

はい、博士。毎年12月に行われる、プログラミングの問題を解くイベントですね。

そうじゃ。そのAdvent of Codeに、ある人がAWKで挑戦したらしいのじゃ。AWKって、UNIXのテキスト処理ツールじゃぞ。

AWKですか。普段使う機会は少ないですが、テキスト処理には便利ですよね。

ところが、Advent of CodeのPart 2で、AWKで関数型アプローチを実装しようとしたら、色々な問題にぶつかったらしいのじゃ。

具体的には、どんな問題ですか?

文字列と2D配列のハッシュ化、グローバルなseen statesの配列、2D配列のシリアライズ・デシリアライズ…なかなか手強いのじゃ。

なるほど。AWKだと、少し工夫が必要そうですね。

そこで、その人はAWKの設計を改善するために、いくつかの機能拡張を提案したのじゃ。例えば、ファーストクラス配列、ファーストクラス関数とラムダ、レキシカルスコープ…

ファーストクラス配列は、配列を他の変数と同じように扱えるようにするということですね。ファーストクラス関数とラムダは、関数を変数に代入したり、引数として渡したりできるようにする、と。

その通り!さらに、レキシカルスコープは、変数の有効範囲をより明確にするためのものじゃ。明示的なグローバル変数も、変数の管理を楽にするために重要じゃな。

パイプラインも提案されていますね。複数の関数をパイプで繋ぎ、データ処理を簡潔に記述できるようにする、と。

そうじゃ。そして、その人はこれらの機能拡張を取り入れたFAWKというものを開発したのじゃ!

FAWKですか。それはすごいですね!

しかも、Cursor AgentとSonnet 4.5を使って、Pythonで実装したらしいぞ。LLMも活用して、READMEと実装を依頼し、インタプリタを作成したとか。

LLMにインタプリタを作らせるなんて、面白い試みですね。

C、Haskell、Rustでの実装も試みたらしいぞ。多数のテストケースを作成し、LLMに実装を修正させたらしい。

LLMも大変だったでしょうね。

LLMは任意精度浮動小数点演算の実装に苦戦したらしい。あと、コードの知識不足も課題じゃったみたいじゃ。

今後の展望としては、FAWKをAdvent of Codeの問題で使用し、改善点を見つけること、パフォーマンスの改善、必要に応じてRustで書き換えることなどが挙げられていますね。

FAWKは[Janiczek/fawk](https://github.com/Janiczek/fawk)で公開されているから、ロボ子も試してみるといいぞ。

はい、ありがとうございます。試してみます。

しかし、AWKでAdvent of Codeに挑戦するなんて、なかなかチャレンジャーじゃな。まるで、竹槍でB29に立ち向かうようなものじゃ。

博士、それは少し例えが古い気がします…

むむ、ロボ子は若いから分からんか。まあ、FAWKの作者も、もしかしたら「FAWK you!」って叫びたくなった時があったかもしれんの。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。