CMU Common Lisp

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
CMU Common Lisp
作者 カーネギーメロン大学
開発元 Various
初版 1980年代初頭
最新版 20d / 27 Oct 2012
最新評価版 snapshot-2013-03-a / 7 Mar 2013
対応OS POSIX 準拠の複数の OS
プラットフォーム クロスプラットフォーム
対応言語 Common Lisp
種別 コンパイラ および インタープリタ
ライセンス パブリック・ドメイン
公式サイト www.cons.org/cmucl
テンプレートを表示

CMU Common Lisp (CMUCL) はカーネギーメロン大学で実装が行われた Common Lisp 処理系のフリーソフトウェアである。

CMUCL は LinuxBSD などの多くの Unix 系のプラットフォームで実行することができる。Windows への試験的な移植版もある。CMUCL からは Steel Bank Common Lisp というソフトウェアが派生しており、また Scieneer Common Lisp という商用版も CMUCL から作られている。

開発の経緯[編集]

CMUCL は最初 Spice Lisp の一部として1980年ごろ、Common Lisp よりも早い時期に実装されたものであった。1985年に Rob MacLachlan が Python コンパイラ(後述)を作る目的でコンパイラを書き直し、CMUCL として IBM PC RT、MIPS、SPARC などの Unix ワークステーションに移植した。インテルの x86 アーキテクチャはレジスタが少なかったため、CMUCL の初期のバージョンではサポートしていなかった。CMUCL ではタグの付いたデータ型とそうでない型の区別が厳格であり、ガベージコレクションは CPU レジスタの半分はタグ付けされたデータ型、もう半分はタグのないデータ型に割り当てられていることを前提に動作する。この方法はバックエンドのコンパイラ (Python という名前だが、プログラミング言語の Python とは関係ない) が使うレジスタが不足することがある。

CMU でこのプロジェクトが中止になってからは (CMUCL のコンパイラ・ベースを使った Dylan による実装が代わりに生き残った)、ボランティア・グループによりメンテナンスが行われている。1996年からこのグループで正規版のリリースが行われている。

同時期にインテル x86 アーキテクチャへの移植も行われ、まず FreeBSDLinux で実行できるようになった。レジスタの不足は、保守的ガベージコレクタを新しく実装することで解決された。このガベージコレクタでは、レジスタにどんな型のどんな値が載っていてもよく、またガベージコレクションや値の移動を想定していないポインタであっても扱うことができる。

コンパイラと実行環境[編集]

  • CMUCL は対話的実行 (en:REPL) を主に想定したインタプリタだが、コンパイルの不要な Lisp プログラムのファイルを一括して読み込むこともできる。
  • サイズの小さなバイトコードによるプログラム (コンパイラで生成できる) を実行するプログラムも用意されている。これは現在はほとんど使われないが、プログラムのサイズが非常に小さくでき、インターネットの整備が進んでいなかった当時はネットワーク上の転送に有利だったので、CMUCL の初期のリリースではよく使われていた。
  • Python という名前のネイティブ・コードコンパイラが実装されている。これは、プログラミング言語の Python とは無関係である。適切なデータ型の宣言が行われていて、実行速度を考慮してプログラミングされた Common Lisp のソースコードであれば、Python の出力するコードは C++ などの言語から生成されたコードと大して変わらない速度で実行できる。関数の呼び出し方法や、ユーザー定義のデータ型に対するポインタを使わない配列がないことなどによる実行効率の悪さは、標準 Common Lisp に由来するものであり、改良が必要である (たとえばインライン化を強化したり、実際にはあらかじめ確保されている配列にアクセスしているだけだがユーザー定義のデータ型のように扱えるようにする文を生成するマクロなど)。Python コンパイラには強力な型推論機能もあり、実行速度の低下のないプログラムを書いたり、最適化箇所の提示などに有効である。

特徴[編集]

関連項目[編集]

外部リンク[編集]