Welcome to ISLisp


ISLisp 概要

ISLISP は,当初Common LISP のサブセットを目標 として開発され,Common LISP の基本的な言語仕様 を受け継ぐと共に,Scheme を意識したコンパクトな 仕様や構文の影響を受けている. LISP としての ISLISP は,コンパクトな仕様と実行効率の高さ,効率 の高いオブジェクトシステム,言語仕様と処理系仕様 の分離,データ型のオブジェクトシステムへの統合等 の特徴を持つ.仕様の検討が行なわれながら,今回の ISLISP 規格に含まれなかった機能として,パッケージ あるいはモジュールがある.実用的なソフトウェアの 開発では,名前の衝突を解決するこれらの機能は不可 欠であり,今後の課題である


ISLisp の特徴 

ISLisp は, 当初, Common Lispのコンパクトで一貫したサブセットを目指し、 EuLispやScheme等を参考に開発が始まった。 レキシカルバインディング等のCommon Lisp における概念を継承しながら、 ISLispでは 言語の一貫性を実現するため、またCommon Lisp と同一ではない関数に 対しては新たに新しい関数や Type specificな関数を導入した。 その結果、ISLisp の言語仕様は ボキャブラリ的にもCommon Lisp とは異なる面が出ている。 ISLispのLisp言語としての特徴には以下のものがある。
レキシカルスコープの採用と動的変数の明確な区別 
ISLispは Common Lisdpと同様にlexical principle をサポートする。 ISLispは同様に動的束縛をサポートするが、Common Lispと異なり、 動的変数(dynamic variable)は defdynamic あるいは dynamic-let で宣言され、 参照には陽に dynamic で参照される。動的変数は独自の名前空間を持つ。。
 
コンパクトな仕様と高い実行効率
Common Lispの巨大な仕様を避けるために、オブジェクトシステム、基本的データクラス等を初めとする 基本的言語機能の簡潔化、Pretty Print機能等の周辺機能の削除が行われた。 基本データクラスからは、複素数、有理数、ハッシュ表、ランダムステート等が削除された。
 
データ型のオブジェクトシステムへの統合
Common Lispは既存のデータ型システムとクラスとが混在していたが、 ISLispではすべてのデータ型がクラスとして統一された。
 
効率の高いオブジェクトシステム
Common LispのオブジェクトシステムであるCLOSはMeta Object Protocolに見られるような非常に高度な機能 を持っているが、仕様の巨大さと実行効率が課題であった。 ISLISPでは、多重継承は、クラスCがクラスC1及びC2の下位クラスであるのは、C1,C2のそれぞれの 上位クラスで共通のものが <standard-object> あるいは < object > である場合に限られる。 この制限により効率的な実装が可能になる。
 
言語仕様と処理系仕様の分離
従来の Lispシステムでは、言語仕様と処理系仕様が混在している場合があった。 ISLispでは、マクロ展開等が終了したISLispプログラムを構成する評価形式を “準備された(prepared)評価形式“ と呼び、準備の処理形式については規定しない