レガシーコード生産ガイド

私に教えられることなら

Lisp処理系制作途中

処理系のコアは段々出来てきてて、builtin.lでマクロを使ってletやcond、delay/forceにtakeなんかを書いてた。めちゃくちゃ楽しい。

テスト駆動で書いてるからストレスあんまり無く進んで楽しかった。

あとはプリミティブ手続きとかの実用のための実装になっていくかな、と思ったのでブランチ切って継続に挑戦してみた。

phaendal/a-piece-of-lisp at continuation · GitHub

しかし…よくわからない。

まず最初に後で取り消すから、と手当たり次第継続渡し方式に書き換えていった。もちろん途中で意味不明になったので取り消し。

次にテストを一番最初だけ残してコメントアウトして、徐々に継続渡し形式に書き換えていった。テストの有り難みを痛感した。

しかし、マクロのアンクォートの処理で今の頭の演算能力をオーバーして、ょくゎからなぃけど一応テスト通ったょ…と力無い笑いと共にコミット。

call/cc手続きの実装で完全に意味不明になったところでタイマーが鳴ったので中断した。

冷静になって考えてみると、継続渡しのみで書くコードに慣れてないし、call/ccをそもそも使ったことが無いので、動作をイメージできるはずもなかった。継続の基本動作が、頭で考える必要がなくなる(=小脳レベルでイメージを処理できるようになる)まで、しばらくSchemeの本なんかを読んで練習する必要がある。

というわけで継続の実装は後回しにして、masterブランチの方を充実させたり、テストを書いたり、少しずつ遊ぶことにする。

広告を非表示にする