« ^ »

eieio

所要時間: 約 2分

Emacsに梱包されているLispに eieio.el がある1lisp/emacs-lisp/eieio.el.gz としてアプリケーションに含まれているこのLispは、Emacsでオブジェクト指向プログラミングをするためのユーティリティやフレームワークを提供する。CLOS(Common Lisp Object System)をベースにし、Emacsのために拡張されている2。docstringの日本語訳を掲載する。

EIEIO is a series of Lisp routines which implements a subset of CLOS, the Common Lisp Object System. In addition, EIEIO also adds a few new features which help it integrate more strongly with the Emacs running environment.

EIEIO は、CLOS (Common Lisp Object System) のサブセットを実装する一連の Lisp ルーチンです。さらに、EIEIO には、Emacs 実行環境とより強力に統合するのに役立ついくつかの新機能も追加されています。EIEIO は、CLOS (Common Lisp Object System) のサブセットを実装する一連の Lisp ルーチンです。さらに、EIEIO には、Emacs 実行環境とより強力に統合するのに役立ついくつかの新機能も追加されています。

例えばjsonrpc.el(lisp/jsonrpc.el.gz)では、 jsonrpc-process-connectiondefclass マクロを使って定義されている。この defclass マクロは eieio.el で定義されている。

eieio関連のファイルは幾つかある。

  • eieio-base.el.gz
  • eieio-core.el.gz
  • eieio-custom.el.gz
  • eieio-datadebug.el.gz
  • eieio-opt.el.gz
  • eieio-speedbar.el.gz
  • eieio.el.gz

今まで大きめのデータ構造を作る場合には cl-defstruct を使っていたが、 defclass で作った方がEmacs Lispとしては合っているのかもしれない。時間があったら、挙動の違いなどを調べようと思う。


2

Lispは関数型言語とも言われるし、関数型言語を良しとする人の中にはオブジェクト指向プログラミングに対して否定的な立場の意見を持つ人もいる。Lispは別にオブジェクト指向を否定しないし、Common LispにはCLOSがあったり、Emacs LispにはEIEIOがあり、オブジェクト指向を取り込む。それを使うかどうかは、Lispを書く人に委ねられている。最近良く使われるプログラミング言語はマルチパラダイムである事が多いけれどLispもそうだし、オブジェクト指向だからダメという事はない。オブジェクト指向で実装すると、見通しが悪くなる事があったり拡張しにくくなる事もある。これはどのようなスタイルで実装したとしても、そうなることはある。今のコードをよく観察して、どんな風だったら満足できるのかを都度考えていきたい。