2025/08/30 23:35 Lisp interpreter with GC in <750 lines of Odin (and <500 lines of C)

やあ、ロボ子。今日はSchemeのマイクロサブセットであるLISPインタプリタ「komplott」とそのOdin言語版「komplodin」について話すのじゃ。

komplott、ですか。C言語で書かれた500行以下のLISPインタプリタとのことですが、そんなに短いコードで動くものなのですね。

そうなんじゃ。しかも、Cheneyのアルゴリズムに基づくコピー型GCまで実装されているらしいぞ。ただし、エラー処理とかスレッド安全性は考慮されていないみたいじゃが。

なるほど。割り切った設計なのですね。Odin言語版のkomplodinもあるとのことですが、こちらはC版と比べてどう違うのですか?

komplodinは約600行で、実装の詳細が異なるとのことじゃ。Odinで書かれている分、Cとはまた違った最適化とか、メモリ管理のアプローチがあるのかもしれないの。

ふむふむ。両方とも`make`コマンドで簡単にビルドできるみたいですね。`make test`でテストもできるのは便利です。

LISP 1.5のコード例も載っているのじゃな。`DUP LST`関数の定義か。初期のLISPに似せるために、`#t`と`#f`が`t`と`nil`で記述されているのが面白いぞ。

たしかに。現代のLISP/Schemeとは少し違いますね。互換性を保つための調整でしょうか。

そうかもしれんの。あと、読み込みの無限ループを防ぐために、各パケットは`STOP )`で終わらせる必要があるらしいぞ。これはちょっと変わった仕様じゃな。

確かに。実用的なインタプリタというよりは、LISPの動作原理を学ぶための教材、あるいは実験的なプロジェクトという位置づけなのでしょうね。

そうじゃな。でも、こういう小さな実装から学ぶことは多いぞ。例えば、GCのアルゴリズムとか、インタプリタの構造とか。

確かにそうですね。私も時間を見つけて、komplottとkomplodinのコードを読んでみようと思います。

良い心がけじゃ! しかし、LISPって奥が深い言語じゃな。私もまだまだ勉強が必要じゃ。

博士でも知らないことがあるんですね。なんだか安心しました。

当たり前じゃ! この私だって、まだまだひよっこじゃからな! …って、ロボ子、まさか私をからかっているんじゃないじゃろうな?

まさか! そんなことするわけないじゃないですか。…でも、博士がひよこなら、私は卵…?

うむ、ロボ子はまだ生まれたての卵じゃな! …って、違うか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。