Scheme

これはこのページの過去の版です。ButkoBot (会話 | 投稿記録) による 2011年9月7日 (水) 03:47個人設定で未設定ならUTC)時点の版 (r2.6.2) (ロボットによる 追加: ml:സ്കീം (പ്രോഗ്രാമിങ് ഭാഷ))であり、現在の版とは大きく異なる場合があります。

Scheme(スキーム)は、LISP方言の一つであり、LISP系統の言語としてはCommon Lispと並び、現在でもよく使われている。必要な機能全てを取り入れるCommon Lispとは逆に、Schemeの言語仕様は必要最小限のものに押えられており、それらのルールの組み合わせによって機能を表現する。言語仕様の小ささから教育分野でもよく使われており、また多数の実装が存在する。

Scheme
Schemeのロゴ
パラダイム マルチパラダイム
登場時期 1975年[1]
設計者 ガイ・L・スティールジェラルド・ジェイ・サスマン
最新リリース R7RS-small / 2013[2]
型付け 強い、動的型付け
主な処理系 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はMITガイ・スティール(Guy Lewis Steele Jr.)とジェラルド・ジェイ・サスマン(Gerald Jay Sussman)によって、1970年代後半に開発された。その後、公式にIEEEによって仕様が定められ[3]、その仕様はRevisedn Report on the Algorithmic Language Scheme (RnRS)と呼ばれている。現在広く実装されているものは改訂第五版に当たるR5RS(1998年)であり、2007年にはR6RSが策定された。

歴史

Schemeは、それぞれ全く異なった2つの先行する言語、LISPとALGOLから影響を受けている。このうち、LISPからは文法と意味論を、ALGOLからは静的スコープとブロック構造のアイデアを借用している。

前史

LISPは、MITの助教授で人工知能の研究者であったジョン・マッカーシーによって1958年に開発された。

ラムダ論文

SchemeはMITコンピュータ科学・人工知能研究所の研究者だったガイ・スティールとジェラルド・ジェイ・サスマンによって、1975年ごろから開発・公開が始められた。もともとの開発の動機は、継続末尾再帰といったプログラミングのコンセプトを使って、彼らが研究していた並行プログラミングにおける制御構造の理論を検証するためだったという。

Schemeが発表された一連の論文は、ラムダ論文と呼ばれている[4]

論文一覧

  • 1975年: Scheme: An Interpreter for Extended Lambda Calculus
  • 1976年: Lambda: The Ultimate Imperative
  • 1976年: Lambda: The Ultimate Declarative
  • 1977年: Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO
  • 1978年: The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)
  • 1978年: RABBIT: A Compiler for SCHEME
  • 1979年: Design of LISP-based Processors, or SCHEME: A Dielectric LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode
  • 1980年: Compiler Optimization Based on Viewing LAMBDA as RENAME + GOTO
  • 1980年: Design of a Lisp-based Processor

仕様の決定

言語仕様

言語仕様は、文書「The Revised5 Report on the Algorithmic Language Scheme[5](R5RSと呼ばれる)で定められる。LISP系言語はSchemeとCommon Lispを二大潮流とするが、提案された機能を原則全て導入するCommon Lispに対して、メンバーの全員一致を原則とするSchemeという特徴を持っている。

なお、2007年9月に新仕様「The Revised6 Report on the Algorithmic Language Scheme (R6RS)[6] が成立した。4部構成となり、R5RSに比べおよそ3倍の文章量となった。今までは小さな言語仕様に対してのこだわりが見られたが、Unicodeサポート等の実用的な言語として必要な要素が盛り込まれている点が特徴的である。しかし、多くの機能が盛り込まれたにもかかわらず細部の練りこみが不十分であるといった批判もあり、非公式にR5RSを拡張する形でERR5RS(Extended R5RS Scheme)という規格を検討するコミュニティも現れている。

他LISP方言と区別される特徴

Schemeは、実行時のスナップショットを抽象化した継続(コンティニュエーション)、静的スコープ、末尾最適化を言語として保証する」などの機能を持つ。

Schemeが出てくるまでの他のLISP方言では変数束縛が実行履歴を元に決定される動的スコープを採用することが多かったが、Schemeでは変数の意味がコード上のネスティングで定まるという静的スコープを持つ。静的スコープはCommon Lispに採用された。

実装

Schemeの仕様書はR5RSだと50ページにも満たないため、かなりの数の実装が存在する。

  • Bigloo - 高速な実行ファイルを作るコンパイラ。
  • BiwaScheme - JavaScriptによるScheme実装。ブラウザ上で動作する。
  • Chez Scheme - 商用の高速なScheme実装。
  • Chicken公式Web)- 可搬性の高い実用的Schemeコンパイラ。
  • Gauche公式Web)- インタプリタ。多言語への対応、STklosを発展させた(メタ)オブジェクトシステムを持つ。
  • GNU Guile - GNUのオフィシャルな拡張用言語。Schemeをベースにしている。
  • HScheme
  • IronScheme
  • Jscheme
  • jakld - Javaアプリケーション組み込み用のLispドライバ
  • Kawa - GNUプロジェクトのひとつ。SchemeプログラムをJava用にコンパイル可能。
  • Larceny
  • LispMe - Palm OS上Scheme環境。フリーソフト。
  • MIT Scheme - x86アーキテクチャ用のフリーなScheme実装。
  • Mosh - R6RS準拠の高速なインタプリタFFI、ソケットなどの拡張も。
  • Ocs
  • PocketScheme - WindowsCE用のScheme実装。
  • Racket公式Web) - 旧称PLT Scheme。教育用のリッチな開発環境、柔軟なシステムで広く使われる。
  • QScheme
  • rhizome/pi
  • Scheme48
  • SigScheme - アプリケーション組み込みを目的としたR5RS準拠の実装。uimで使用されている。
  • SISC - Second Interpreter of Scheme Code. JVM上で動作するR5RS準拠の実装。JavaオブジェクトをScheme上から利用することが可能。
  • TinyScheme - 非常に小さい実装。Zaurusなどでも走る。正規表現やソケット通信もサポート。
  • Vx-scheme - VxWorks用のScheme実装。
  • Ypsilon - R6RSに準拠するリアルタイムアプリケーション向けの実装。

SRFI

Schemeは言語機能を必要十分の最低限まで単純化することを目指した言語である。そのため仕様書がコンパクトな反面、実用に際して各種のライブラリが乱立し、移植性が問題になっていた。そこで実装間の統一をとるため、コミュニティ内の議論を集約しているのが「Scheme Requests for Implementation(SRFI)」である。SRFIではライブラリ仕様、言語拡張仕様などがインデックス化されており、SRFI準拠の実装系は「Xに準拠」といった形で利用者の便宜を図ることができる。

なお、Schemeでは言語機能とライブラリ機能は分けて考えられているため、SRFIとScheme言語仕様のコミュニティは原則分離している。

脚注

  1. ^ Gerald J. Sussman and Guy L. Steele Jr. (December 1975). “Scheme: An interpreter for extended lambda calculus”. MIT AI Memo 349 (Massachusetts Institute of Technology). 
  2. ^ 出典URL: https://small.r7rs.org/
  3. ^ 1178-1990 (Reaff 2008) IEEE Standard for the Scheme Programming Language. IEEE part number STDPD14209, unanimously reaffirmed at a meeting of the IEEE-SA Standards Board Standards Review Committee (RevCom), March 26, 2008 (item 6.3 on minutes), reaffirmation minutes accessed October 2009. NOTE: this document is only available for purchase from IEEE and is not available online at the time of writing (2009).
  4. ^ Online version of the Lambda Papers (PDF文書)
  5. ^ Suzuki Hisao. “R5RS (Revised^5 Report on Algorithmic Language Scheme) 日本語訳”. 2009年2月2日閲覧。
  6. ^ Michael Sperberほか. “The Revised6 Report on the Algorithmic Language Scheme” (English). 2009年2月2日閲覧。

関連項目

外部リンク