Common Lisp
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/27 15:44 UTC 版)
実装
Common Lisp は、唯一の実装により規定されるものではなく、Ada やC言語のように仕様によって規定されている。
実装は、標準規格でカバーされていない機能を提供するライブラリとともに配布される傾向がある。そのような追加機能をポータブルに利用可能とする フリーソフトウェア ライブラリが作成されている。最も顕著なものが、Common-Lisp.net
や Common Lisp Open Code Collection プロジェクトである。
Common Lisp の評価器は式を評価する前にコンパイルする所謂インクリメンタルなコンパイラとして実装が可能なように設計されている[4]。関数のインライン展開のような最適化コンパイルのための標準的な宣言も言語規格内で規定されており、多くの Common Lisp 実装は関数を機械語へとコンパイルする。また、性能では劣るが、バイトコードへとコンパイルする処理系も存在する。また、コンパイル済みのコードとコンパイルされていないコードを混交させても動作に差異がないように言語が設計されているためインタプリタを搭載する処理系でもコンパイラのみ搭載の処理系と動作に違いがない。
CLISP のような、UNIX 上で動くいくつかの実装は、システムが Perl やUNIXシェルインタプリタを透過的に呼び出すのと同様に スクリプトのインタプリタ[5]として使うことができる。
処理系
再配布可能な実装の一覧
- Steel Bank Common Lisp (SBCL)
- 後述のCMUCL から分岐して保守性を大幅に強化した処理系[6]であり、現在通常のx86コンピュータで最も使用されている実装の一つ。SBCL は、REPLから入力された評価式であっても、インタプリタを介さず全てネイティブコードにコンパイルしてから実行する[注釈 19]。CMUCL譲りのコンパイラにより非常に強力な最適化を行うことが出来、生成するコードはC言語のコードを上回ることもある。SBCL は、CMUCL が動作するプラットフォームに加えて、Linux(PowerPC、SPARC、MIPS)、Mac OS X、Microsoft Windows 上でも動作する。ただし、HP-UX 上では動作しない。
- Clozure Common Lisp (CCL)
- フリー の処理系であり、SBCLと並んで使用されている実装。祖先はMacintoshをプラットフォームとするMacintosh Common Lispという商用の処理系であったが、他のOSプラットフォームへオープンソースとしてフォークされるようになり混同を避けるためClozure CLと改名した[7]。その歴史のため、Mac OS の Cocoa API との連携(実装による独自機能)に強みをもつほか、ファイルの遅延ローディング、デバッグメッセージのわかりやすさなどの特色を持つ。現在は Mac OS X、Darwin、Linux(PowerPC、Intel x86-64)Windows に移植されている。[8]
- Embeddable Common Lisp (ECL)
- 後述のGCLから派生した、C言語で作成されたプログラムに組み込むために設計された処理系である。lispコードはCのコードに変換された上でコンパイル実行されるので、最低限のCコンパイラしか提供されていない組み込み機器などの環境でも、クロスコンパイルにより利用することが出来る。また、C言語の高速性も受け継いでいる。
- Armed Bear Common Lisp (ABCL)
- Java仮想マシン上で動作する実装である。同マシンのJavaバイトコードへのコンパイラを備えており、Common Lisp プログラムから Java のライブラリにアクセスする事が可能。この処理系は Armed Bear J Editor のコンポーネントであるが、単独で利用する事もできる。[9]近年もアクティブに開発されている。
- CMU Common Lisp (CMUCL)
- カーネギーメロン大学 で開発された実装を起源とする。現在はボランティアグループによりメンテナンスされる。Pythonと呼ばれる(プログラミング言語の Python とは関連なし)高速なネイティブコードコンパイラの起源となった実装である。Intel x86 上の Linux や BSD、Alpha 上の Linux、Solaris、IRIX、HP-UX、PowerPCを含むMac OS Xなどで動作する。
- CLISP
- バイトコードコンパイラを備えた実装である。移植性に富み、多くの UNIX や、Mac OS X などの UNIXに類似したシステム、および Microsoft Windows、その他のオペレーティングシステムで動作する。
- GNU Common Lisp (GCL)
- Kyoto Common Lisp から発展したGNUプロジェクトの製品である。完全な ANSI 準拠ではないが、数学ツールの Maxima や AXIOM、ACL2 などを含むいくつかの大規模なプロジェクトで採用されている。この処理系は 11 の異なるアーキテクチャ上の Linux で動作し、Windows や Solaris、FreeBSD でも動作する。[10]
- Macintosh Common Lisp (MCL)
- デジツール社[11]製の処理系である。MCL 5.2 からオープンソース化された。PowerPC 上の Mac OS X で動作する。
- Movitz
- x86 アーキテクチャ用の処理系であり、オペレーティングシステムに依存しない。
- Poplog
- Common Lisp を備えたバージョンが存在する。POP-11 は Common Lisp と Prolog、Standard ML を備えており、複数の言語を混在させたプログラミングが可能である。また、全ての言語が逐次的にコンパイルされる。コンパイラと通信する Emacs に類似のエディタが統合されている。
- Jatha
- Common Lisp の大半をサブセットとして実装した Java のライブラリである。[12]
- Corman Lisp
- Windows用の統合開発環境。コーマン・テクノロジーズ[13]による商用処理系だったが、2015年にオープンソース化[14]
商用の実装
- Allegro Common Lisp
- Franz(フランツ)[15]による処理系。
- LispWorks
- LispWorks(リスプワークス)[16]による処理系。
- Scieneer Common Lisp
- Scineneer(サイエニア)[17]による処理系。
- ^ ごくまれにclispとも。なおCLISPという実装が実在するので混同回避のためあまり用いられない
- ^ 一方で型nullは、オブジェクトNILを表す型である。
- ^ このようなtypespecは、配列の型arrayのvalid type specifierである。
- ^ 英: value cell
- ^ 英: function cell
- ^ 英: cons
- ^ 英: cons cell
- ^ 英: pair
- ^ 英: export
- ^ 英: instance
- ^ 英: declaration
- ^ 英: docstring
- ^ 英: condition
- ^ 英: class
- ^ 英: metaclass
- ^ 英: binding
- ^ 彼は ジェラルド・J・サスマンとともに Scheme を設計した。
- ^
nil
はまた、空リストをも表現する。 - ^ 最近、インタプリタのサポートも試験的に実装されている。
- ^ CLHS: Type ATOM
- ^ CLiki : Unicode support
- ^ Technical Issues of Separation in Function Cells and Value Cells
- ^ 3.1 Evaluation
- ^ 32.6. Quickstarting delivery with CLISP
- ^ History and Copyright - Steel Bank Common Lisp
- ^ Clozure CL History
- ^ http://trac.clozure.com/openmcl
- ^ http://armedbear.org/abcl.html
- ^ http://www.gnu.org/software/gcl/
- ^ http://www.digitool.com/
- ^ http://jatha.sourceforge.net/
- ^ http://www.cormanlisp.com/
- ^ https://github.com/sharplispers/cormanlisp
- ^ http://www.franz.com/
- ^ http://www.lispworks.com/
- ^ http://www.scieneer.com/
- ^ http://www.stsci.edu/resources/software_hardware/spike/
- ^ http://ic.arc.nasa.gov/projects/remote-agent/
- ^ 「2003 年 1 月、ヤフーは新しいバージョンの、C++ と Perl で書かれたエディタ(訳注: Viawebのシステムのうち、Lispで書かれていた、サイトを構築するシステムの部分)をリリースした。それは『もはやプログラムは Lisp で書かれていない』というよりも『プログラムを C++ に変換するために Lisp インタプリタを書いた』というようなものであった。私の知る限り、すべてのページ生成テンプレートのソースファイルは依然として Lisp コードのままだった(「グリーンスパンの第10法則」を見よ)。」、ポール・グレアム、Beating the Averages
- ^ http://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/
- ^ ページ下部,開発者のコメント http://dwave.wordpress.com/2011/05/20/learning-to-program-the-d-wave-one-software-you-should-install-a-book-you-should-buy/
- ^ http://www.dwavesys.com/careers/senior-software-developer
- ^ http://www.itasoftware.com/about/index.html
- ^ http://www.izware.com/
- ^ http://www.izware.com/mirai/
- ^ http://www.piano.aero/
- ^ http://www.xanalys.com/
- ^ http://www.genworks.com/
- ^ http://www.noteheads.com/
- ^ http://compo.sourceforge.net/
- ^ http://lisa.sourceforge.net/
固有名詞の分類
プログラミング言語 |
Pure Data MHEG-5 Common Lisp Icon Text Editor and Corrector |
オブジェクト指向言語 |
Object Pascal JRuby Common Lisp Sather Ruby |
関数型言語 |
LOGO Dylan Common Lisp Haskell Mozartプログラミングシステム |
- Common Lispのページへのリンク