コンテンツにスキップ

CMU Common Lisp

出典: フリー百科事典『ウィキペディア(Wikipedia)』

2023年5月23日 (火) 05:59; 98.47.210.159 (会話) による版(日時は個人設定で未設定ならUTC

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
CMU Common Lisp
作者 カーネギーメロン大学
開発元 Various
初版 1980年代初頭
最新版
21e / 2023年5月14日 (17か月前) (2023-05-14)[1]
リポジトリ ウィキデータを編集
対応OS POSIX準拠の複数のオペレーティングシステム
プラットフォーム クロスプラットフォーム
対応言語 Common Lisp
種別 コンパイラおよびインタプリタ
ライセンス パブリックドメイン
公式サイト cmucl.org
テンプレートを表示

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、MIPSSPARCなどの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コンパイラには強力な型推論機能もあり、実行速度の低下のないプログラムを書いたり、最適化箇所の提示などに有効である。

特徴

[編集]

脚注

[編集]

関連項目

[編集]

外部リンク

[編集]