ECLプログラミング言語およびシステムは、1970年代にハーバード大学で開発された、拡張可能な高水準プログラミング言語および開発環境でした。「 ECL 」という名称は、「Extensible Computer Language」(拡張可能なコンピュータ言語)または「EClectic Language」(折衷的な言語)の略です。一部の出版物では、システム全体を「ECL」と呼び、言語を「EL/1 (拡張可能な言語)」と呼ぶ場合もありました。
ECLは対話型システムであり、プログラムはシステム内で表現され、互換性のあるコンパイラとインタプリタを備えていました。ALGOLに似た構文と拡張可能なデータ型システムを持ち、データ型は第一級オブジェクトとして扱われました。データオブジェクトは参照ではなく値であり、呼び出し規約では各引数に対して値渡しと参照渡しを選択できました。
ECLは主にハーバード大学において、プログラミング言語設計、プログラミング手法(特に変換的洗練によるプログラミング)、およびプログラミング環境の研究と教育に用いられたが、一部の政府機関でも使用されていたと言われている。最初に実装されたのはPDP-10であり、その後、 BLISS -11で記述され、 PDP-10上でクロスコンパイルされた(インタプリタのみの)PDP-11版が開発された。
ユークリッドの互除法に従って2つの整数の最大公約数を計算するECL手順は、次のように定義できる。
gcd <-EXPR ( m : INT BYVAL , n : INT BYVAL ; INT )始めるDECL r : INT ;繰り返すr <- rem ( m , n );r = 0 => n ;m <- n ;n <- r ;終わり;終わりこれは、プロシージャ定数を変数に代入するものですgcd。
EXPR(m:INT BYVAL, n: INT BYVAL; INT)
これは、プロシージャが 型の と という名前の 2 つのパラメータを受け取り、型の の結果を返すことを示します。INT(ECLでは、データ型はモードと呼ばれます。)各パラメータ宣言のbind-class は、そのパラメータが値渡しされることを示します。ECL プログラムの計算コンポーネントはフォームと呼ばれます。フォームの中には、他のプログラミング言語の式に似ているものもあれば、ステートメントに似ているものもあります。フォームの実行は常に値を返します。...構造はループフォームです。構造の実行mnINTBYVALREPEATEND
r = 0 => n
フォームr = 0が と評価されるとTRUE、ループの実行は の値で終了しますn。ブロック ( BEGIN... END) フォームの最後のステートメントの値が、ブロックフォームの値になります。プロシージャ宣言のフォームの値が、プロシージャ呼び出しの結果になります。
バインドクラスに加えて、ECL には、、、、および のBYVALバインドクラスがあります。 バインドクラスは、パラメータが参照渡しされることを示します。 バインドクラスは、可能な場合はパラメータが参照渡しされ、そうでない場合 (たとえば、実パラメータが純粋な値である場合、または型変換を適用する必要がある変数である場合) は値渡しされます。 バインドクラスは、実パラメータの抽象構文木が仮パラメータに渡されることを指定します。これにより、プログラマは特定のプロシージャパラメータに対して独自の評価セマンティクスを持つ独自の表記法を考案する非常に柔軟な対応が可能になります。 バインドクラスはに似ていますが、 Cの可変長引数と同様の機能を提供します。バインドクラスはプロシージャの最後の仮パラメータにのみ出現でき、その仮パラメータは、残りの実パラメータごとに 1 つの抽象構文木表現のリストにバインドされます。 ECL には、抽象構文木を評価する組み込み関数があります。あるいは、プログラマが抽象構文木のノードを探索し、独自のロジックに従って処理できる関数もあります。SHAREDLIKEUNEVALLISTEDSHAREDLIKEUNEVALLISTEDUNEVALLISTEDEVAL
PISEL =拡張可能な言語に関する国際シンポジウムの議事録、フランス、グルノーブル、1971年、 ACM SIGPLAN Notices 6 :12、1971年12月に掲載。