EusLisp は、その他のLispを基礎としたオブジェクト指向プログラム言語(
例えばCLOS [#!CLOS:Keene!#])と異なり、オブジェクト指向を基礎とした
Lispシステムである。
以前の考え方として、Lispはオブジェクト指向プログラミングを実現するための
言語として使用され、その中でシステムのデータ型がそれ相応のクラスを
持っていなかったので、システム定義オブジェクトとユーザー定義
オブジェクトとの間に明らかな区別があった。
一方、EusLisp内の数値を除く全てのデータ構造は
オブジェクトで表現されている。
そして、内部データ型(例えばconsやsymbols)とユーザー定義クラス
との間に特別な違いはない。
これは、システムの内部データ型でさえユーザー定義のクラスによって
拡張(継承)できることを意味する。
また、ユーザーが内部クラスのサブクラスとして自分独自のクラスを定義したとき、
その新しいクラスに対して内部メソッドおよび内部関数を使用することができ、
新しいプログラムを記述する量を減らすことができる。
例えば、キューやtreeやスタックなどを定義するために、carやcdr
と異なった特別な部分を持つようにconsクラスを拡張したとする。
これらのインスタンスでさえ、
consクラスの内部関数が型の継承を一定時間で認識するため、
それらの関数をのロス時間なしで適用できる。
したがって、EusLispはシステムの全ての内部機能(拡張可能なデータ型の形式)を
プログラマーに公開している。
この画一性もまた、EusLispの実行のために役に立つ。なぜなら、実行言語の中で
defclassやsendやinstantiateのような僅かな核になる関数を
定義した後は、内部データ型の内部構造にアクセスするための大部分の関数を
EusLisp自身で書くことができる。
これは、EusLispの確実性および維持性を改善するものである。
2016-04-05