プログラミング言語Schemeの歴史は、20 世紀後半にLispファミリーの言語の初期メンバーが開発されたことから始まります。Scheme の設計と開発期間中、言語設計者のGuy L. SteeleとGerald Jay Sussman は、Lambda Papers (1975–1980)として知られるマサチューセッツ工科大学(MIT) AI メモの影響力のあるシリーズを発表しました。これにより、言語の人気が高まり、1990 年以降の標準化の時代が始まりました。Scheme の歴史の多くは、開発者自身によって文書化されています。[ 1 ]
Scheme の開発は、互いに大きく異なる 2 つの先行言語から大きな影響を受けました。Lispは一般的な意味論と構文を提供し、ALGOL は語彙スコープとブロック構造を提供しました。Scheme は Lisp の方言ですが、Lisp は進化を遂げています。Scheme の起源となった Lisp の方言は、当時主流であったものの、現代の Lisp とはかなり異なっています。Scheme は、Common Lisp、Scheme、ISLisp、EuLisp、XLisp、AutoLisp を含む大規模な Lisp ファミリーに属しています。
Lispは、ジョン・マッカーシーがマサチューセッツ工科大学(MIT)に在籍していた1958年に発明されました。マッカーシーは、1960年にCommunications of the ACM誌に「Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I」 [ 2 ]というタイトルの論文でその設計を発表しました(Part IIは未発表)。彼は、いくつかの単純な演算子と関数の記法を用いることで、チューリング完全なアルゴリズム言語を構築できることを示しました。
Lispの構文を特徴づけるs式の使用は、当初、マッカーシーが「 m式」と呼んだものを用いる言語が開発されるまでの暫定的な措置として意図されていた。例えば、m式はcar[cons[A,B]]s式と同等である(car (cons A B))。しかし、s式は人気を博し、m式を実装しようとする多くの試みは普及しなかった。
Lisp の最初の実装は、Steve RussellがIBM 704上で行ったもので、彼は McCarthy の論文を読んで、彼が説明した eval 関数を機械語でコーディングしました。Lispでリストの先頭要素と末尾要素を表すために使われる、おなじみの (しかし初心者には分かりにくい) CAR と CDR という名前は、 IBM 704アセンブリ言語の 2 つのコマンド、Contents of Address Register と Contents of Decrement Register から派生したもので、それぞれ36 ビットのIBM 704 命令ワードのセグメントに対応する 15 ビットレジスタの内容を返します。
Lispで書かれた最初の完全なLispコンパイラは、1962年にMITのティム・ハートとマイク・レヴィンによって実装されました。[ 3 ]このコンパイラは、コンパイルされた関数と解釈された関数が自由に混在できるLispのインクリメンタルコンパイルモデルを導入しました。
Schemeの開発において最も重要なLispの2つのバリアントは、どちらもMITで開発されました。McCarthyらが開発したLISP 1.5 [ 4 ]と、 MITのProject MAC向けに開発されたLISP 1.5の直系の子孫であるMaclisp [ 5 ]です。MaclispはPDP-10とMulticsシステム上で動作しました。
Lispは誕生以来、特にPDP-10において、人工知能(AI)研究コミュニティと密接な関係を築いてきた。PDP -6とPDP-10の36ビットワードサイズは、 1ワード内に2つのLisp 18ビットポインタを持つことの有用性に影響を受けている。[ 6 ]
ALGOL 58 は、当初は「International Algorithmic Language」の略でIAL と呼ばれる予定でしたが、1958 年にチューリッヒ工科大学で開催された会議で、ヨーロッパとアメリカのコンピュータ科学者の委員会によって共同で開発されました。ALGOL 60 は、パリで開催された ALGOL 60 会議で開発された後の改訂版で、現在では一般的にALGOLと呼ばれています。この言語は商業的に成功せず、限界もありましたが、アルゴリズムの公開の標準となり、将来の言語開発に大きな影響を与えました。トニー・ホーアは次のように述べています。「これは時代をはるかに先取りした言語であり、前身の言語だけでなく、後継の言語のほぼすべてをも凌駕するものでした。」[ 7 ]
ALGOLはブロック構造と字句スコープを導入しました。また、名前による呼び出しのデフォルトパラメータ渡しメカニズムが扱いにくいことでも悪名高かった。このメカニズムは、プロシージャや関数の実行中に仮パラメータの代わりに作業パラメータを表す式をテキストで置換する必要があるように定義されていたため、実行中に参照されるたびに再評価される必要がありました。ALGOLの実装者は、作業パラメータのコンテキストをキャプチャし、プロシージャや関数の実行中に評価できるようにする「サンク」と呼ばれるメカニズムを開発しました。
1971年、サスマン、ドリュー・マクダーモット、ユージン・チャーニアックは、カール・ヒューイットの野心的なプランナー・プロジェクトの部分的かつやや不十分な実装であるマイクロ・プランナーと呼ばれるシステムを開発した。サスマンとヒューイットは、他の者たちと共に、ヒューイットのプロジェクトの構成要素となった拡張LispであるMuddle(後にMDLと改名)の開発に取り組んだ。1972年、ドリュー・マクダーモットとサスマンは、Lispベースの言語Conniverを開発した。これは、彼らが非生産的だと考えていたプランナーの自動バックトラッキングの使用法を改訂したものであった。ヒューイットは、Conniverの「複雑な制御構造」がプランナーの問題に対する解決策となるのかどうか疑問に思っていた。パット・ヘイズは次のように述べている。「彼ら(サスマンとマクダーモット)の解決策は、ユーザーにプランナーの実装プリミティブへのアクセスを与えるというものだが、これは後退的な一歩である(コニバーのセマンティクスとは何なのか?)」[ 8 ]
1972 年 11 月、ヒューイットと彼の学生たちはPlanner の問題に対する解決策として、アクター モデルの計算を考案した。 [ 9 ] アクターの部分的な実装が Planner-73 (後に PLASMA と呼ばれる) として開発された。当時 MIT の大学院生だったスティールはこれらの開発を追っており、彼とサスマンはモデルをよりよく理解するために、 Maclisp上で開発した独自の「小さな Lisp」でアクター モデルのバージョンを実装することにした。この基盤を使用して、彼らはアクターを作成してメッセージを送信するメカニズムの開発を開始した。[ 10 ]
PLASMA のレキシカル スコープの使用はラムダ計算に似ていた。Sussman と Steele は、ラムダ計算でアクターをモデル化しようと試みた。彼らはモデル化システムを Schemer と名付けたが、最終的にはDEC PDP-10のITSファイルシステムの 6 文字制限に合わせるために Scheme に変更した。彼らはすぐに、アクターは本質的に戻り値のないクロージャであり、代わりに継続を呼び出すものであると結論付け、したがって、クロージャとアクターは、彼らの調査の目的においては本質的に同一の概念であると決定した。彼らは冗長なコードと思われるものを削除し、その時点で、非常に小さくて有能な Lisp の方言を書いたことを発見した。Hewitt は Scheme [ 11 ] [ 12 ]の「毛むくじゃらの制御構造」を批判し続け、Scheme 実装で使用されているプリミティブ (例えば、、、および) は後退であると考えていた。START!PROCESSSTOP!PROCESSEVALUATE!UNINTERRUPTIBLY
25年後の1998年、サスマンとスティールは、Schemeのミニマリズムは意識的な設計目標ではなく、設計プロセスの意図せざる結果であったと振り返った。「私たちは実際には複雑なものを作ろうとしていましたが、偶然にも、すべての目標を満たしつつ、意図していたよりもはるかにシンプルなものを設計していたことに気づきました...私たちは、小さくてシンプルな形式体系であるラムダ計算が、強力で表現力豊かなプログラミング言語の中核として機能する可能性があることに気づきました。」[ 10 ]
一方、ヒューイットはラムダ計算を計算の基礎として批判し続け、「実際のところ、λ計算はある種の逐次および並列制御構造を表現できるが、一般にアクターモデルで表現される並行性は表現できない。一方、アクターモデルはλ計算のすべて、そしてそれ以上を表現できる」と述べている。彼はまた、継続関数への依存や例外の欠如など、ラムダ計算から派生したSchemeの側面についても批判している。[ 13 ]
1975年から1980年にかけて、サスマンとスティールはラムダ計算、継続、末尾再帰の最適化などの高度なプログラミング概念の使用に関するアイデアの開発に取り組み、それらを一連のAIメモとして発表しました。これらはまとめてラムダ論文と呼ばれています。[ 14 ]
Schemeは、Lispの言語の中で初めてレキシカルスコープを採用した言語です。また、Reynoldsの定義言語[ 15 ]以降、第一級継続をサポートした最初のプログラミング言語の一つでもあります。Schemeは、姉妹言語であるCommon Lispの開発に大きく貢献し、Guy Steeleもその開発に携わりました。[ 16 ]
Scheme 言語は、公式の電気電子学会(IEEE) 標準[ 17 ]と、アルゴリズム言語 Scheme に関する改訂版nレポート(R n RS)と呼ばれる事実上の標準で標準化されています。最も広く実装されている標準はR5RS (1998) [ 18 ]で、新しい標準であるR6RS [ 19 ]が 2007 年に承認されました[ 20 ] 。RnRS標準の他に、Scheme 実装によって追加される可能性のある追加ライブラリを含むScheme 実装要求文書もあります。
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)プロジェクトは 1963 年初頭に
24 ビット
マシンとして開始されました。設計目標であった LISP 用に 36 ビットに拡張されました。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)