#:g1: Emacs LispのEIEIOはCLOSではない

Posted 2017-01-05 20:53:49 GMT

個人的にCommon Lispのオブジェクト指向システムをCLOSとは呼ばないようにする試みを実施中だが、ここではCLOSと書くことにする

EIEIOは、CLOSではない。

まず、EIEIOは、CLOSではない。
Common Lisp風のAPIを持つEmacs Lispのオブジェクト指向拡張である。
具体的には、Emacs Lisp上で総称関数を再現しているが、主な違いは、

位だろうか。

EIEIOをCLOSと考えた場合の弊害

少しEIEIOを試したり、EIEIO近辺を眺めた感想程度だが、EIEIOをCLOSと考えた場合の弊害には、

位があるだろうか。

MOPを意識するかどうかというのは、CLOSではMOPが前提なので拡張するとなればMOPに従うことになることを指している。EIEIOには特に従うべき規約はない。
結果として、EIEIOの拡張をCLOSに取り込もうとした場合、不自然だったりする。

設計思想の相違

Common Lispに限らずLisp上には様々なオブジェクト指向システムが構築されてきたが、CLOSの場合は「プログラミング可能なプログラミング言語であるLisp」のオブジェクト指向システムはどうあるべきであるかを考えた結果であり、オブジェクト指向システムをLispに取り込んだというよりは、オブジェクト指向システムをLisp化したという面が大きい。

この背景を知らないと意味が分からない機能が多いし、実際あまり理解されていないので無用な機能が豊富とされることも多い。
「プログラミング可能なオブジェクト指向システム」のためにMOPがサポートされるが、こちらが理解され難いことについても同様である。

EIEIOはCLOSのAPIを真似ただけで、「プログラミング可能なオブジェクト指向システム」を実現したいわけではないと思う。
CEDITという統合環境を実現する計画の中で、OOPの枠組みとしてCLOSを参考にしたのが発端であり、当然ながらCEDITありき、である。

むすび

EIEIOは、CLOS風の総称関数風インターフェイスを持つOOP拡張位に考え、見た目は似ているがまったくの別物と考えた方がEmacs Lispコミュニティ、Common Lispコミュニティ双方にとって幸せであると思う。

EIEIOは、Common Lispの資産(設計思想/教材)を活かすような実装でもないし、「プログラミング可能なオブジェクト指向システム」を目指しているわけでもないし、ベースになる言語に統一されているわけでもないし、EIEIOをCLOSと考えて良いことは何もない。

同じMACLISP方言だけに、Common Lispの機能をEmacs Lispに導入しようという試みは多いが、別にCommon Lispに倣う必要など全くない。実際資産の行き来も殆どないのだし。

MACLISP方言だけでも、多重継承、多重メソッドなしのFlavors、多重継承、多重メソッドなしで隠蔽機能に取り組んだCommonObjects、プロトタイプ指向のObject LISP、プログラミング可能なオブジェクト指向システムであるCLOSと多種多様であった。
Emacs Lispは、Emacs Lispらしいオブジェクト指向システムを構築しても良いのではないだろうか。
(蛇足だが、Emacsのメーリングリストを眺めていてもRMSの発言の背景には、こういうLispの試行錯誤の歴史の中に居た人という所があるが、他の人達にはこういう視点はないので、話が噛み合っていないことが多々あるように思える)

コンパクトなCLOS系のオブジェクト指向システムとしては、ISLISPのILOSがある。
同じ追い掛けるなら、設計段階から考えて機能をコンパクトに整理(MOPもなし)しているという点では、ILOS方が良いのではないだろうか(まあ、無いと思うが)


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus