『Essentials of Programming Languages ( EOPL )』は、Daniel P. Friedman、 Mitchell Wand、 Christopher T. Haynesによるプログラミング言語に関する教科書です。
EOPLは、プログラミング言語の原理を操作的な観点から概観する。本書は、ラムダ計算に似た単純な関数型コア言語のためのSchemeによるインタプリタから始まり、体系的に構成要素を追加していく。変数代入やスレッドのような制御など、追加される構成要素ごとに、プログラミング言語の表現力の向上と、直接インタプリタを構築するための新たな構成要素の必要性を本書は示す。また、ストア渡しスタイルや継続渡しスタイルといった体系的な変換によって、インタプリタが構築される言語から特定の構成要素を排除できることも本書は示している。
本書の第2部では、インタプリタをレジスタマシンに体系的に変換する方法を解説します。変換によって、高階クロージャ、継続オブジェクト、再帰関数呼び出しなどを排除する方法が示されます。最終的に、読者は末尾再帰関数呼び出しと代入文、条件分岐のみを使用する「インタプリタ」を手に入れることができます。このコードをCプログラムやアセンブリプログラムに変換するのは容易です。さらに、本書では特定の「意味」を事前に計算する方法と、これらの事前計算の表現を生成する方法も示しています。これはコンパイルの本質であるため、本書はコンパイルの原理と言語変換の原理に関するコース(関連するものの、異なるトピック)への準備にもなります。主要な概念を説明するテキストの他に、本書には一連の演習問題も含まれており、読者は代替設計やその他の問題を探求することができます。[ 1 ]
SICPと同様に、EOPLは1980年代に主流だった教科書のアプローチから大きく逸脱している。当時、プログラミング言語の原理に関する書籍では、4~6種類(あるいはそれ以上)のプログラミング言語を紹介し、それぞれのプログラミングの慣用表現や実装について概説していた。最も成功した書籍は、通常、ALGOL 60(およびいわゆるAlgolファミリーのプログラミング言語)、SNOBOL、Lisp、Prologを扱っていた。今日でも、プログラミング言語に関する教科書の多くは、こうした概説書に過ぎないが、その範囲は狭まっている。
EOPLは、インディアナ大学がプログラミング言語研究の分野でトップクラスの地位を占めていた1983年に始まりました。フリードマンの博士課程の学生の一人であったユージン・コールベッカーが、彼の「311の講義」を書き起こし、まとめました。ミッチ・ワンドやクリストファー・ヘインズをはじめとする他の教員も貢献し始め、コールベッカーが「メタ宇宙へのヒッチハイク・ガイド」と呼んだものを、現在のような体系的でインタプリタと変換に基づいた概説書へと発展させました。25年以上の出版期間を経て、本書はほぼ古典となり、現在は第3版で、型やモジュールなどのトピックが追加されています。第1部には、 Schemeを用いてプログラム設計の原理を教える、もう一つの型破りな教科書であるHtDPのプログラミングに関するアイデアが取り入れられています。著者らは、マシュー・フラットとともに、EOPLを用いた教育のためのDrRacketプラグインと言語レベルを最近提供しました。
EOPLは、少なくとも他に2つの関連テキストを生み出しました。Queinnecの[ 2 ] Lisp in Small Pieces [ 3 ]とKrishnamurthiのProgramming Languages: Application and Interpretationです。