XL (プログラミング言語)
XL1は多くのプログラミング言語から影響を受けている。
Adaは、例外処理、タスク処理などを含めた広範囲の部分に影響を与えた。
BASICの行番号や構造化プログラミングの考えは、プログラミング言語がいかに簡潔にできるかの指標を示した。
C言語はランタイムや機械語などの分野の基準であり、XLを動かすのに仮想マシンを用意する必要をなくした。
C++とStandard Template Libraryは、(Abaにはない)ジェネリック型の暗黙の具体化などのジェネリック型に関するサポートの素晴らしさを示した。
Fortranは数値計算の分野ではCやC++をしのぐパフォーマンスを持っており、最適化に有効な言語構造とは何かを示した。
Javaはライブラリのポータブルサポートの重要性を示した。Javaのコンテナは、ジェネリックプログラミングを使わない場合の限界も示した。Javaのコード体系からも影響を受けた。
Lispの拡張性は今日に至るまで重要視されている。Lispは最初にオブジェクト指向の考えを標準化した。ただしLispの歴史はさらに古い。
Prologは異なるプログラミングモデルの利用が、時として便利で生産的であることを示した。XLのプラグインはPrologスタイルで書くこともできる。
Visual Basicは構造木表現がビジュアル化された表現とは切り離して考えられることを示した。VBの編集を逐語的にする人は少ない。XLも直接的に構文木を扱うことで、同様の能力を持つ可能性をもっている。
XL1の型システムは静的型付けだが、ジェネリックプログラミングの方式がAbaやC++などの言語とは異なる。配列やポインタなどは、C++ではプリミティブ型であるが、XLではライブラリで定義される。以下に一次元配列の定義を例示する。
有効なジェネリック型(validated generic type)とは、その型がどのように使われるかを自身で表せる型であり、このような型にはジェネリック引数が必要ない。例として、不等号を含むときに型をorderedと宣言するものを示す。
これによって、ordered自身がジェネリックとなるから、潜在的にジェネリックとなる関数を定義することが可能となる。
さらに、arrayのようなパラメータを持つジェネリック型にも適用できる。任意の配列(array)の和を計算する関数を以下に示す。