空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

Emacsのソースコード

今まで読まなくて正解だった。これを読んでたら,まず,C++で書こうなんて思わなかっただろうし,影響を受けまくっていただろうなぁ。半日,見た限りでは,Emacs Lispはかなり素朴であることが分かった。Lispを記述能力の高いDSLとして利用するぶんには,そこまで仰々しい実装は要らないという自説も的外れではないようだ。

Emacs Lispは,Lisp_Objectは単なる整数型で,下位3ビットをシコシコ丁寧に使う倹約家。C++には既に仰々しい仮想関数テーブルがあって,1ワード占有するし,アクセスのコストも高い。これだけでC++の鈍重さを感じてしまうが,そこは割り切って利用するしかないだろう。というのも,それがC++を利用する唯一と言っていい利点。C++の機能を享受することで,汚いマクロとはほとんどおさらばできる。

当然といえば当然なんだけど,Emacs Lispのコードは,初めて見る気がしない。Lispの関数定義をDEFUNでマクロにしてるのも同じで笑った。Emacsのコードでマクロを使ったアクセサは,etolispではメンバ関数で提供しているといった感じ。

今日は lisp.h から入って,eval.c,bytecode.c,alloc.c,lread.c あたりを眺めた。最初の3ファイルに知りたかったことは大体書いてあって,alloc.cは後で参考にすることに。lread.cは,まあ,誰が書いても大体似たようなものになるんだなと思った程度。あくまでetolispとの差分としてコードを追うのと,etolispとしてもう変えたくない,参考にする必要のない部分は軽くすっ飛ばす感じだったので適当に流し読みだったんだけど。

心の清らかさを保つためにも深入りは避けておこう…おっさんGPLだしな…。