| Scheme | |
|---|---|
| パラダイム | マルチパラダイム |
| 登場時期 | 1975年[1] |
| 設計者 | ガイ・L・スティール、ジェラルド・ジェイ・サスマン |
| 型付け | 強い、動的型付け |
| 主な処理系 | Gauche, PLT Scheme, MIT/GNU Scheme, Scheme 48, Chicken, Gambit, Guile, Bigloo, Chez Scheme, STk, STklos, Larceny, SCM, Kawa, Ikarus |
| 影響を受けた言語 | LISP, ALGOL |
| 影響を与えた言語 | Common Lisp, JavaScript, Ruby, Dylan, Lua, R言語 |
Scheme(スキーム)は、LISP方言の一つであり、LISP系統の言語としてはCommon Lispと並び、現在でもよく使われている。必要な機能全てを取り入れるCommon Lispとは逆に、Schemeの言語仕様は必要最小限のものに抑えられており、それらのルールの組み合わせによって機能を表現する。言語仕様の小ささから教育分野でもよく使われており、また多数の実装が存在する。
SchemeはMITのガイ・スティール(Guy Lewis Steele Jr.)とジェラルド・ジェイ・サスマン(Gerald Jay Sussman)によって、1970年代後半に開発された。その後、公式にIEEEによって仕様が定められ[2]、その仕様はRevisedn Report on the Algorithmic Language Scheme (RnRS)と呼ばれている。現在広く実装されているものは改訂第五版に当たるR5RS(1998年)であり、2007年にはR6RSが策定された。
目次 |
Schemeは、それぞれ全く異なった2つの先行する言語、LISPとALGOLから影響を受けている。このうち、LISPからは文法と意味論を、ALGOLからは静的スコープとブロック構造のアイデアを借用している。
詳細は「LISP#LISPの歴史」を参照
LISPは、MITの助教授で人工知能の研究者であったジョン・マッカーシーによって1958年に開発された。
SchemeはMITコンピュータ科学・人工知能研究所の研究者だったガイ・スティールとジェラルド・ジェイ・サスマンによって、1975年ごろから開発・公開が始められた。もともとの開発の動機は、継続や末尾再帰といったプログラミングのコンセプトを使って、彼らが研究していた並行プログラミングにおける制御構造の理論を検証するためだったという。
Schemeが発表された一連の論文は、ラムダ論文と呼ばれている[3]。
言語仕様は、文書「The Revised5 Report on the Algorithmic Language Scheme」[4](R5RSと呼ばれる)で定められる。LISP系言語はSchemeとCommon Lispを二大潮流とするが、提案された機能を原則全て導入するCommon Lispに対して、メンバーの全員一致を原則とするSchemeという特徴を持っている。
なお、2007年9月に新仕様「The Revised6 Report on the Algorithmic Language Scheme (R6RS)」[5] が成立した。4部構成となり、R5RSに比べおよそ3倍の文章量となった。今までは小さな言語仕様に対してのこだわりが見られたが、Unicodeサポート等の実用的な言語として必要な要素が盛り込まれている点が特徴的である。しかし、多くの機能が盛り込まれたにもかかわらず細部の練りこみが不十分であるといった批判もあり、非公式にR5RSを拡張する形でERR5RS(Extended R5RS Scheme)という規格を検討するコミュニティも現れている。
Schemeは、実行時のスナップショットを抽象化した継続(コンティニュエーション)、静的スコープ、末尾最適化を言語として保証する」などの機能を持つ。
Schemeが出てくるまでの他のLISP方言では変数束縛が実行履歴を元に決定される動的スコープを採用することが多かったが、Schemeでは変数の意味がコード上のネスティングで定まるという静的スコープを持つ。静的スコープはCommon Lispに採用された。
Schemeの仕様書はR5RSだと50ページにも満たないため、かなりの数の実装が存在する。
Schemeは言語機能を必要十分の最低限まで単純化することを目指した言語である。そのため仕様書がコンパクトな反面、実用に際して各種のライブラリが乱立し、移植性が問題になっていた。そこで実装間の統一をとるため、コミュニティ内の議論を集約しているのが「Scheme Requests for Implementation(SRFI)」である。SRFIではライブラリ仕様、言語拡張仕様などがインデックス化されており、SRFI準拠の実装系は「Xに準拠」といった形で利用者の便宜を図ることができる。
なお、Schemeでは言語機能とライブラリ機能は分けて考えられているため、SRFIとScheme言語仕様のコミュニティは原則分離している。
This text is available under the terms of the GNU Free Documentation License. Last update: 2012年2月15日 3:14:41:JST