Scheme

出典: Wikipedio


Template:Otheruses2 Template:出典の明記 Template:Infobox プログラミング言語

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

schemeはMITのガイ・スティール(Guy Lewis Steele Jr.)とジェラルド・ジェイ・サスマン(Gerald Jay Sussman)によって、1970年代後半に開発された。その後、公式にIEEEによって仕様が定められ<ref name="ieee1178">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).</ref>、その仕様はRevisedn Report on the Algorithmic Language Scheme (RnRS)と呼ばれている。現在広く実装されているものは改訂第五版に当たるR5RS(1998年)であり、2007年にはR6RSが策定された。

目次

歴史

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

前史

Template:Main

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

ラムダ論文

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

schemeが発表された一連の論文は、ラムダ論文と呼ばれている<ref name="readscheme_lambda">Online version of the Lambda Papers (PDF format)</ref>。

論文一覧

  • 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

仕様の決定

Template:節stub

言語仕様

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

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

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

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

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

実装

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

  • Bigloo - 高速な実行ファイルを作るコンパイラ。
  • BiwaScheme - JavaScriptによるScheme実装。ブラウザ上で動作出来るように作られてある。
  • Chez Scheme - 商用の高速なScheme実装。
  • Chicken Scheme
  • Gauche - スクリプトインタプリタ向け。最初から多言語への対応を考慮している処理系。
  • Guile - GNUのオフィシャルな拡張用言語。Schemeをベースにしている。
  • HScheme
  • IronScheme
  • Jscheme
  • Kawa - GNUプロジェクトのひとつ。SchemeプログラムをJava用にコンパイル可能。
  • Larceny
  • LispMe - Palm OS上Scheme環境。フリーソフト。
  • MIT Scheme - x86アーキテクチャ用のフリーなScheme実装。
  • Mosh - R6RS準拠の高速なインタプリタFFI、ソケットなどの拡張も。
  • Ocs
  • PLT Scheme - 高機能なIDEを備えたScheme環境。多くの教育現場で利用されている。
  • PocketScheme - WindowsCE用の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言語仕様のコミュニティは原則分離している。

脚注

Template:Reflist

関連項目

外部リンク

Template:Wikibooks

bg:Scheme bn:স্কিম (প্রোগ্রামিং ভাষা) ca:Scheme cs:Scheme da:Scheme de:Scheme en:Scheme (programming language) eo:Scheme es:Scheme et:Scheme fa:اسکیم fi:Scheme fr:Scheme he:Scheme hr:Scheme hu:Scheme it:Scheme ko:스킴 (프로그래밍 언어) lt:Scheme nl:Scheme no:Scheme pl:Scheme pt:Scheme ro:Scheme (limbaj de programare) ru:Scheme simple:Scheme (programming language) sk:Scheme (programovací jazyk) sl:Scheme (programski jezik) sv:Scheme ta:இசுகீம் tr:Scheme uk:Scheme vi:Scheme zh:Scheme

個人用ツール