オブジェクト指向型言語: EusLisp
なぜオブジェクト指向か?
- 実世界の物体=オブジェクト
- 大規模な統合システムの構築
- クラスの階層を用いたコードの再利用
- モジュールの独立性、情報隠蔽
なぜ Lisp か?
- 自動メモリ管理
- 幾何モデラの要点はポインタ操作
- 会話型プログラミング
- インタプリタ付: ネットワーク可搬なプログラミング
EusLispのオブジェクト指向プログラミング
- 数値以外のデータ型はクラスで定義
- consやsymbolなどのLispの基本データ型もクラスであり、
サブクラスによる拡張が可能
- 単一継承
- クラスの定義
(defclass class-name :super superclass
:slots (var (var type forward))
- メソッドの定義
(defmethod class-name
(:method1 (arg ...) . body)
(:method2 (arg ...) . body))
- オブジェクトの作成
(instance class . message)
- メッセージの送信
(send object :method args ...)
例:
(car x)= (send x :car) = (cons-car x) =
(slot x cons 'car) = (x . car)
EusLispのLisp仕様
- Common Lispに近い
レキシカルスコープ、パッケージ、シーケンス、キーワード引数、etc.
- Common Lisp非互換
複素数、永続的クロージャ、CLOS
- 拡張機能
幾何計算、グラフィックス、ウィンドウ、マルチスレッド、
Unix、ネットワーク、他言語インタフェース
- 特徴的な実装技術
フィボナッチバディメモリ管理、定コスト型判別、
- 移植性
Cにコンパイル、SunOS4, SunOS5, OSF/Alpha, IRIX/SGI, Linux/PC, Windows/PC