処理系開発の効用
このエントリは二年前くらいに書いたものなのでちょっと古いのだが、もったいないので公開。
新しい視点
オレ処理系 [Nendo]の開発は単に楽しいからやっているのだが、開発してみるとアプリケーション開発では得られない視点が得られる。 言語の中でもLisp処理系を作るのは貴重な体験だ。 Lisp処理系を作るためには、Lispの内部構造やプリミティブの制御構文などについて詳細に落とし込んで考える必要がある。 自分で考えた処理系がある程度動くようになるころには、特定の言語に依存しない抽象的な脳内モデルが生まれる。 自分は処理系を作って初めて明確な形を取るようになったが、Lispでプログラミングしただけでも脳内モデルが形成される人もいるかもしれない。
コードの中にlambdaの存在が見えるようになる
私の場合は脳内モデルとして、抽象的な lambda式の連鎖(lambda計算)として見えるようになった。 以前は、PHPでプログラムをする時はPHP、Rubyでプログラムする時はRubyの見た目に近い脳内モデルだったような気がするが、最近は全部lambdaになっている気がする。 そういえば、shiroさんのブログ記事にも似たような話があった。 Island Life - グラフ指向理解 で、おもしろいなあと思ったのは、私はプログラムを考える時も頭の中には グラフがあって、プログラムはそのグラフをテキストとしてダンプしたもの になっている。WiLiKi:Lisp:S式の理由で書いたけれど、だからプログラムを 書くときにいちいち頭の中のグラフを翻訳しなければならないプログラミン グ言語よりも、グラフを生に近い形でダンプできるLispの方がずっと書きや すい。
でも非Lisperなプログラマに脳内グラフのことを話してみてもあまり賛同さ れないので、Lispを好むか好まないかの境目は案外そのへんにあるんじゃな いかという仮説を持っているのだけれどどうだろう。
lambdaの連鎖で見えていることを言葉で説明するのが非常にわかりにくいのも同じかなぁ。 図で描いたほうが良いのだろうな。 描いて説明したところで、フウンで終わってしまってセツナイので描かないが。
設計に役に立つこともある
例えば、RESTベースのWebAPIを考える時や、1ページを超える長い関数を追う時、それぞれのパーツがlambda単位(クロージャ単位)に分割して見えるようになった。 長いソース中だろうと、ブロックさえあればなんでもlambda化して切断面が見える能力。意識しなくてもコード中に切断面が飛び出して見えているような。 うまく言えないけど便利で強力な特殊能力だと思う。 これは設計時、リファクタリング時に威力を発揮する。もしかしてこれが悟り体験?