ソフトウェアジェムズ。 The Computer History Museum Historical Source Code Series
Ken Iverson at Harvard University
コンピュータ時代の最初の50年間に何千というプログラミング言語が発明された。 その多くは類似しており、多くは先達からの伝統的な進化の道をたどりました。
しかし、いくつかの革命的な言語は、より汎用的な同胞とは異なる傾斜を持ちました。 LISP はリスト処理のためのものでした。 SNOBOLは文字列操作のためのものだった。 SIMSCRIPTはシミュレーション用でした。 APLは配列処理に重点を置いた数学のためのものであった
最終的にAPLとなったものは、ハーバード大学のケネス・E・アイバーソン教授が1957年にコンピュータプログラミング言語としてではなく、数学表記法として最初に考案したものであった。 アインシュタインが発明した簡潔なテンソル表記法を含め、行列指向の記号体系は他にも存在したが、それらは数学的解析に向けられており、アルゴリズムの合成にはあまり向いていなかった。 ハワード・エイケンの学生であったアイバーソンは、アルゴリズムを説明するために「アイバーソン記法」として知られるようになったものをハーバードの学生に教えた。
アイバーソンは 1960 年に IBM に雇われ、アディン・ファルコフらと彼の記法を研究した。 今では有名な1962年の著書「プログラミング言語」1では、この記法は「アルゴリズムまたはプログラムと呼ばれる…手続き」を記述するためのものであり、「かなりの構文構造を示す」ので言語であると述べている。 しかし、その時点では、人が読むための記法に過ぎず、コンピュータをプログラミングするための言語ではなかった。 この本では、コンピュータの命令セットの定義を文書化するような記述的な道具としても、ソートや検索などの一般的なアルゴリズムを表現する手段としても、多くの使用例が紹介されている。 このように斬新なものに対する抵抗を予期して、序文で「適切なプログラミング言語の記述力および分析力は、その習得に必要な多大な努力に十分に報いるというのが、本書の中心的なテーゼである」と述べている。 おそらく彼は、言語をマスターすることは些細なことではないと警告していたのだろう。 おそらく彼はまた、彼の見解では、他の記法言語は「適切」ではないことを示唆していたのでしょう。
もちろん、チームはすぐに、この記法がコンピュータをプログラミングするための言語になることを知りました。 1966年からAPLと呼ばれるようになったその言語は、配列操作に重点を置き、型破りな記号を使用した。 IBMがSystem/360メインフレームコンピュータ用に「APL360」を発表したとき、APLは一般的になった。 当時の他のほとんどの言語とは異なり、APL360は完全な対話型プログラミング環境でもあった。 プログラマーはタイムシェアリングされたコンピュータに接続された電気機械式タイプライターの前に座り、APLステートメントをタイプしてすぐにレスポンスを得ることができた。
完全に360アセンブリ言語で書かれたこのバージョンのAPLは、マシン全体を制御することができた。
IBMの許可を得て、Computer History MuseumはSystem/360用APLの1969-1972 “XM6” バージョンのソースコードを非商用利用として公開することをうれしく思う。 90個の個別ファイルは’./ADD “コマンドで区切られています。 この資料にアクセスするには、ここに表示されているライセンスの条件に同意する必要があります。このライセンスは非商業的な使用のみを許可し、コピーをウェブ上の他の場所に掲載することにより第三者にライセンスする権利は与えられません。
APL360 ソースコードのダウンロード
ETH Zürich の Jürgen Winkelmann は、このソースコードを実行可能システムにする驚くべき仕事をしました。 詳しくは MVT for APL Version 2.00.
Creating the APL Programming Language
Iverson の著書 “A Programming Language” 1 では、コンピュータ用のプログラミング言語として直接使うのが困難な図形表記法を用いています。 彼はこれを行列代数の延長と考え、下付き文字、上付き文字、文字の太さやフォントによる区別など、一般的な数学のタイポグラフィーの慣例を用いている。 例えば、数字を並べ替えるプログラムである。
キーボードで入力するコンピュータ・プログラミング言語として使用するために表記法を線形化するために、APL実装者は確かに制御転送にラベル付き矢印の使用をあきらめざるを得なかった。 しかし、ハフマン符号を作成するこのプログラムに示されているように、 原始的な関数に特別な記号を使用することは、ある程度維持することができた特徴です。 例えば割り算の記号は「/」ではなく「÷」である。 このような特殊な記号に対応するため、APL360ではカスタムデザインのキーボードを使用し、特殊記号を大文字で表記した。
APL360 ではカスタムデザインのキーボード
それでもキーボードに収まらない特殊文字があり、一部は2文字オーバーストロークで打刻した。 例えば、「グレードアップ」という文字⍋は、仕分けに使う原始演算子で、∆(シフトH)→バックスペース→∣(シフトM)と入力することで作られたものである。 プログラムを印刷するために、Iverson と Falkoff は IBM の 1050 と 2741 端末用に特別なタイプボールを設計してもらったが、これは IBM Selectric タイプライターの機構を使っていた。 例えば、APL 言語マニュアル 2 にある、行列の数学的行列式を計算するプログラムを印刷したものを以下に示します:
A Taste of APL
APL は簡潔な高レベルプログラミング言語で、いくつかの点で1960年代に開発された他のほとんどのものと異なっている。 APLの式は右から左へ評価され、関数の優先順位の階層は存在しない。 例えば,
2×4+3
という式を入力すると,コンピュータは直ちに結果の値
を入力する。この値は,演算子優先の他の多くの言語のように11という値にはならない。 もちろん、括弧を使って部分式をグループ化し、評価順序を変更することもできる。 一般的なルールとして、どの関数の右引数もその右側にある式の値になります。
ベクトルと配列の自動作成。 高次元の構造体は、それを返す式を評価することで自動的に生成され、スカラーは自由に混在させることができる。 例えば,
A ← 2 + 1 2 3
は,ベクトル「1 2 3」を作り,それにスカラー2を加え,その値が
3 4 5
となるベクトルを入れる変数Aを生成する。
豊富なプリミティブ。 APLにはスカラー、ベクトル、配列、さらに高次元のオブジェクト、およびそれらの組み合わせを操作する豊富な組み込み関数(および関数に適用して別の関数を生成する「演算子」)のセットがあります。 例えば、上で作成したベクトル「A」の数値を合計する式は、単純に
+/A
ここで、/ は左側の関数を右側のオペランドのすべての要素に連続して適用する「縮小」演算子である。 Aの数の平均を計算する式も、プリミティブ関数ρを使用して、Aにいくつの要素があるかを決定する:
(+/A) ÷ ρA
以下は1970年の「APL360ユーザーズマニュアル」3から、組み込みAPL関数と演算子のパワーと精巧さを感じさせるいくつかの表である。 (画像をクリックすると拡大します)
APLはプログラミングについて違った考え方を奨励し、一時的に高次元データ構造を中間値として使用し、その後強力なプリミティブを使って還元することを推奨している。 有名な例として、R.
(~T∊T∘) までのすべての素数を計算する以下の短いが完全なプログラムがある。×T)/T←1↓⍳R
この式がどのように評価されるかは次の通りです。
subexpression |
meaning |
||||||||||||||||||||||||||
⍳R |
1 2 3 4 5 6 |
||||||||||||||||||||||||||
T←1↓ |
ベクトルの最初の要素を落とし、残りを仮ベクトルTに代入する。 |
2 3 4 5 6 |
|||||||||||||||||||||||||
T∘.×T |
乗算外積:Tのそれぞれの要素に乗じる結果を保持するテーブルを作成する。 |
|
|||||||||||||||||||||||||
T∊ |
Tのどの要素が表中にあるかは「集合員」演算子で求めることができる。 |
0 0 1 0 1 |
|||||||||||||||||||||||||
~ |
結果を否定して、Tのどの要素がテーブルの中にないかを識別する。 これらは表中に倍数を持たない整数である。 |
1 1 0 1 0 |
|||||||||||||||||||||||||
( )/T |
識別したTの要素を選択する。 これらはすべてRより小さい素数です。 |
2 3 5 |
このプログラムにはループがないことに注意してください。 APL式の威力は、条件分岐やループが従来のプログラミング言語よりもはるかに少ない頻度で必要になることを意味する。
APL演算子は、通常ループを必要とするあらゆる種類の計算に対して、簡単な方法で使用することが可能である。 たとえば、ベクトル X の要素のうち 100 より大きいものの数を計算する式は
+/X>100
これは、X>100 が X のどの要素が 100 より大きいかを示す 0 と 1 のビットベクトルを返し、+/はそのベクトルのすべてのビットを足し合わせるのでうまくいくのである。 後の構造化プログラミングの発展から見ると、APLの唯一の制御伝達のプリミティブである「GO TO LINE x」文→は、特に弱い。 以下は、2つの引数の最大公約数を計算する関数の例である。 最後の文は、先頭に分岐してループを作成しています。 2行目で0行目に条件付きで制御を移すと、関数は終了し、最後にGに代入された値を返す。
1960年代のAPL言語についてもっと知りたい方は、「APL言語」参考書2、Paul Berryの1969年「APL360入門」4を見て欲しい。
もちろんこの言語は長年進化し、最近のバージョンにはIF-THEN-ELSEの様な制御構造も含まれている。
APLの実装方法
APL記法の最初のコンピュータ実装は、 1965年にIBM 7090メインフレームコンピュータ用にFORTRANで書かれたバッチ指向の言語インタプリタであり、 ニューヨーク州ヨークタウンハイツのIBM研究所のLarry Breedとスタンフォード大学の大学院生であった Philip Abramsによって書かれたものである。 これは TSM タイムシェアリング システムの下で実行され、標準 7090 オペレーティング システムの名前である「IBSYS」と韻を踏んで「IVSYS」と気まぐれに呼ばれました。 2012 年の電子メールで Breed は、
IVSYS はログイン、ログアウト、即時実行、関数定義を提供し、アクティブとストアの両方のワークスペースを提供した、と述べています。 これらの実装は初歩的なもので、ほとんどの場合、ログイン/ログアウト/ファイルの保存に TSM プロジェクトが提供するあらゆるものを使用しました。 7093が廃止され、Rogerと私はSystem/360上のスタンドアロン・システムの計画を立て始めるまで、わずか数週間しか使えませんでした。 その数週間の間に、Kenと彼のグループは、実行可能なAPLがどのようなものかを初めて目にすることになったのです。
言語のサブセットの別の実装は、1967年にIBM 1130ミニコンピュータ用に行われました。
IBM以外で広く使われるようになった最初のAPLの実装は、IBM System/360のためのものでした。 APL360」と呼ばれ、1966年11月にIBM社内で最初に使用開始された。 (バックスラッシュがAPLの「拡張」演算子であったことから、「APL360″」という表記には隠れた意味もあった)。 APLは360″を拡張する”)
その直前の時期について、ブリードは次のように述べている
この時期、1966年初頭はアイバーソン記法からAPLへの過渡期であったといえるだろう。 (実際、Adinは66年春に “APL “を思いついた。) 言語と環境の改良と拡張は何年にもわたって続けられた。 商用版を作るために追加されたコードはほとんどなく、事務的な作業だけでした。
1968年8月までにAPL360はIBMの “Contributed Program Library” 5の非サポート(“Type III”)プログラムとしてIBMの顧客に提供されていた。 主な実装者はLarry Breed, Dick Lathwell, Roger Mooreで、他にAdin FalkoffとLuther Woodrumが貢献していた。 Dick Lathwell、Ken Iverson、Roger Moore、Adin Falkoff、Phil Abrams、Larry Breed。 1983年頃の写真。
APL変数は動的な性質を持っているので、APL360は機械語を生成するコンパイラとしてではなく、インタープリタとして実装された。 プログラムは、ユーザーがタイプしたものに直接対応する「コードストリング」と呼ばれる内部形式で保存された。 インタープリタはプログラムの実行中にコードストリングを調べ、式の評価に応じて動的に変数を割り当てたり再構成したりした
APL360の最初のバージョンはマシン全体を制御していた。 つまり、オペレーティングシステム、ファイルシステム、タイムシェアリングモニタ、コマンドインタプリタ、プログラミング言語が一体となったものであった。 メインメモリが限られているため、ユーザーのワークスペースは必要に応じてドラムやディスクにスワップアウトされた。 Larry Breed は、実装 6 の明確で簡潔な説明の中で、言語の要件に合わせてオペレーティング システムを調整する能力のおかげであると述べています
APL360 は会話型言語で、50人もの同時ユーザーに対して高速応答と効率のよい実行を提供しました。 各ユーザーは、プログラム、変数、および中断されたプログラムの実行状態を保持する「アクティブ・ワークスペース」を持っていた。 LOAD」「SAVE」「COPY」といったシステムコマンドが、ユーザーのワークスペースを保存したライブラリーを管理した。 他のシステムコマンドは言語機能を制御し、例えば”)ORIGIN “でプログラマはベクトルや配列の番号が0から始まるか1から始まるかを制御することができた。
APL はパンチカードによるバッチプログラミングで苦しんでいたプログラマの世代の多くにとって対話的タイムシェアリングを初めて紹介するものだった。 その典型的な例は、新しい IBM System/360 コンピュータの命令セット・アーキテクチャの正式な定義で、1965年に Adin Falkoff, Ken Iverson, Ed Sussenguth が IBM Systems Journal に発表した記事である7。
しかし、論文で提供されるテキストはそれ以上である。 それは形式的な記述の行ごとの説明であり、つまりAPLの記述力の実証と説明でもある。
記法はIversonの本にあった制御転送のためのグラフィカルなスタイルを使用した。 例えばここに、メモリアクセス操作の記述がある。 (クリックすると拡大します。)
APLを繁栄させたのは、出版用の記法から対話型のコンピュータ・プログラミング言語へと移行したことです。 APL360の実装が可能になると、IBMなどは以下のような多様なアプリケーションを制作して利用を活性化させた:
- Starmap: 星や惑星の位置を計算し、プロットするためのAPL関数のセット。 8 9 1973年にIBMのPaul Berryと当時Bryn Mawr大学の天文学の学生であったJohn Thorstensen(現在はDartmouth大学の物理学と天文学の教授)によって書かれたものである。 これは、特定の日付と時刻に対するケプラー方程式の古典的な解と、座標の一連の回転を使用して、惑星と星が空の鉢のどこに現れるかを示すものです
- IBGS: Interactive Business Game Simulation(インタラクティブ・ビジネス・ゲーム・シミュレーション)の略。 「APLのゼロと積分:「ニュートンやミュラーのような古典的な方法と、ジェンキンスやトラウブのような最近開発された方法の両方を用いて、実関数の実ゼロ、実係数と複素係数を持つ多項式の実ゼロと複素ゼロ、複素関数の複素ゼロを見つけることができます。”
- Graphpak – Interactive Graphics Package for APL360: “…capability which range from the graphics interface support at the lowest level to several application areas at higher levels… A plotting component… linear or logarithmic… curve-fitting.. A descriptive geometry component allows definition, scaling, magnification, translation, rotation, and projected display of three-dimensional objects. “… プロット・コンポーネントを使うと、3次元オブジェクトの拡大・縮小・移動・回転・投影表示ができます。”
- APLのグラフとヒストグラム:「タイプライター端末で曲線やバーチャートを作成する」
- APL Coordinate Geometry System(APL座標幾何学システム)。 “測量士、土木技師、都市計画者が使用する…端末で対話的に座標幾何学の問題を解く”
- APL/PDTS – Programming Development Tracking System…プログラミング開発追跡システム。 「プログラミング開発プロジェクトにおいて、管理者やプランナーが計画に対するパフォーマンスを監視するのを支援するシステム。 MINIPERT:”A Critical Path Method (CPM) system for Project Management”
- APL Econometric Planning Language: “実務の経済学者、ビジネス予測家、教師が、インタラクティブなモデル構築とモデル解決のための使いやすいツールを提供。”
- APL財務計画システム。 「財務アナリストやプランナーがレポートをデザインし、計算文を指定し、データを入力・変更し、印刷されたレポートを即座に得ることができます。”
- APL Text Editor and Composer: 「このプログラムは、端末で対話的にテキストを処理するように設計されています。テキストの入力、修正、構成、印刷、保存のための機能が含まれており、秘書、科学者、エンジニア、管理者、その他論文、手紙、レポート、仕様書を作成する人が使用します」
これらのアプリケーションの多くは対話性を重視し、当時より一般的だったバッチジョブの処理と比較して生産性が大幅に向上した。 また、APLはアプリケーションの開発をより迅速に行うことを可能にした。 2012 年の電子メールで、Larry Breed は次のように述べています。
あらゆる分野で、APL プログラムを書くことができる速さは、モデリングやプロトタイピングに有用です。 1973年頃、コンチネンタル・キャン社は21の製造工場のための在庫システムを必要としていた。 FORTRANプログラマーのチームは、1年間作業を続けたが、成功の見込みはなかった。 STSCのセールスマンが、ある週末にAPL Plusで実用的なモデルを構築したのです。
APLが最も浸透した分野は、科学、保険数理、統計、金融のアプリケーションであった。 最初の25年間におけるAPLの進展の詳細については、 IBM System Journal 10の1991年特別号に12本の論文と1本のエッセイが掲載されている。 Iversonが言うように、
APL開発の最初の動機は執筆と教育のための道具を提供することであった。 APL は主に商業的なプログラミングに利用されてきたが、私はその最も重要な用途がまだ残されていると信じ続けている。 APLは熱狂的な信奉者を惹きつけています。 アラン・パリス(1966年にACMのチューリング賞の最初の受賞者)もその一人である:
一つの文章に目を通すと、他のプログラミング言語では数ページのテキストでしか見ることができない、複雑で巧妙で美しい操作と制御の相互作用を見ることができる。 スタイルの出現と意義を理解することができるようになる。 12
一つの文章に目を通すと、他のプログラミング言語では数ページのテキストでしか見ることができない、複雑で巧妙で美しい操作と制御の相互作用を見ることができる。 スタイルの出現と意義を理解することができるようになる。 12
多くの人がAPLの表現の自由さに解放感を覚える。
私は以前、独裁的に固いので「ファシスト的プログラミング言語」と表現していた。 …Pascalがファシストなら、APLはアナーキストです。 13
しかし、APLのプログラムはしばしば暗号的で解読が困難である。 ある人は、APLを「書き込み専用言語」だと冗談めかして言っている。 プログラミングのトリックを刺激するのである。 複雑なアルゴリズムを実装するためにAPLの「ワンライナー」を書くという挑戦は、抗しがたいものがあります。 例えば、John Conwayの “Game of Life “を実装した2つの異なるAPL one-linerがある。∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}
明らかに気の弱い人には向いていませんね。 オランダのコンピュータ科学者 Edsger Dijkstra は、
APL は完璧なまでに貫かれた過ちである、と言っています。 それは過去のプログラミング技術に対する未来の言語である:それは新しい世代のコーディングのクズを作り出す。 14
しかし、APLのファンは、暗号化されたAPLコーディングは、どんな言語でも悩まされる悪いプログラミングスタイルだと言うだろう。 APL はアルゴリズムを表現するための豊富なパレットを提供するので、 より難しい問題をより速く、より無関係な構文の乱雑さで解決することができる、と主張します。
A Short Biography of Ken Iverson
Kenneth Eugene Iverson は1920年12月17日にカナダ、アルバータ州のカムローズ付近の農場で生まれました。 9年生の終わりまで田舎のワンルームスクールで教育を受けましたが、当時は大恐慌の真っ只中で、家族の農場に仕事があったため、学校を中退しました。 このまま学校に通い続けても、学校の先生になるのが関の山で、それは絶対に嫌な職業だったと、後に語っている。 長い冬の間、彼は独学で微積分を勉強した。
1942年に徴兵され、その間に高校をほぼ卒業するのに十分な通信教育を受けた。 兵役の後、彼はオンタリオ州キングストンのクイーンズ大学で数学と物理学の両方で学士号を取得し、その後ハーバード大学で物理学の修士号を取得しました。 1954年、コンピューターのパイオニアであるハワード・エイケンのもとで博士号を取得し、「線形微分方程式の機械解法」と題する論文を発表した。 博士号取得後、アイヴァーソンはハーバード大学の教員となり、エイケンの新しい自動データ処理プログラムで教えることになった。 この間、1年間は教官として、5年間は助教授として在籍した。 1960年、ハーバード大学で教鞭をとっていたフレデリック・ブルックスの助言により、ニューヨーク州ヨークタウンハイツにある新しいIBM研究センターに入社した。 2人は、新しい表記法の継続的な開発で協力した。 1962年、ケンは今や古典となった「プログラミング言語」1を出版し、そのタイトルから、それまで非公式に「アイバーソン表記法」と呼ばれていた表記法にAPLという名前が付けられた
アイバーソンはIBMでの在職中、APLの開発に従事し続けた。 1980年に彼はIBMを去り、カナダに戻り、APLベースのタイムシェアリングサービスを確立していたI.P. Sharp Associatesで働いた。
1987年に彼は「有給から引退」し、よりモダンなAPLの方言の開発に全力を注いだ。 APLは商業的な目的にうまく使われていたが、 Iversonは教育に適した新しい簡単な実行可能な記法を開発し、 低コストで利用できるようにしたかった。 この言語の最初の実装は J と呼ばれ、APL90 Users’ Conference で発表された。
Iverson がこのような言語を作成する能力は、彼の「言語と言葉に対する純粋な楽しみ」から来ていると、彼の娘 Janet Cramer は回想している。 「人が小説を読むように、彼は辞書を読んでいたのです」と娘のジャネット・クレイマーは回想する。 Iverson は、英語も数学も、言語が明確かつ簡潔に伝達することが重要だと考えていた。 2004年10月16日の土曜日、彼は J のチュートリアルに取り組んでいる最中に脳卒中で倒れ、3日後の10月19日に83歳で亡くなりました。 以下はその一部です:
Ken はハーバード大学で終身在職権を得ることができませんでした。 彼は5年間助教授を務めましたが、教授会は彼を昇進させないことを決定しました。 何が問題だったのかと聞くと、「学長が私を呼んで、『問題は、君は小さな本一冊しか出版していないことだ』と言ったんだ」と言いました。 その小さな一冊の本が、後にチューリング賞を受賞したのです。 これは、ケンに対するコメントというよりも、昇進手続きに関する従来の考え方に対するコメントであり、学問的手続きとハーバード大学に対するコメントだと思います。
– Fred Brooks, A Celebration of Kenneth Iverson, 2004-11-30
初期の講演で、ケンは許容比較の利点を説明していた。 聴衆の一人が信じられないような質問をした。”確かに、A=BとB=Cのとき、AはCと等しくないかもしれないという意味ではないのですね?”と。 ケンはすかさず「大工なら誰でも知っていることだ!」と答え、次の質問へ。
– Paul Berry
Ken との社交の場で、私は “You know, Ken, you are my favorite language designer and Don Knuth is my favorite programmer.” と言ったのです。 するとKenは即座に “俺のプログラミングのどこが悪いんだ?”と言ったんです。
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
1973年か1974年にケンと私はロチェスターのコダックにおいて、PL/Iで仕事をしなければならない40~50人のプログラマのグループに対して講演を行いました。 質問タイムで、あるシニアスタッフが、”もし私があなた方の言っていることを理解するならば、私たちは新しい考え方を取り入れるべきだと提案しているのですね “と言ったのです。 するとKenは椅子から飛び上がって、”そうだ!まさにその通りだ!”と言ったんです。
– Joey Tuttle, A Celebration of Kenneth Iverson, 2004-11-30
Acknowledgements
IBM の Michael Karasick, Yvonne Perkins, Steve Selbst そして Ken Edwards に感謝します、私が APL ソースコードのリリース許可を取得するのに 10 年かかったオジサンに終わりをつけてくださったのです。 Curtis Jones、Larry Breed、Paul Berry、そして Roy Sykes には、この記事の初期の草稿にコメントをいただきました。
– Len Shustek
Bibliography
- K. E. Iverson, A Programming Language, John Wiley and Sons, Inc.1962.
- IBM, “APL360 ユーザーズマニュアル”, 1970年3月.
- IBM, Paul Berry, “APL360 Primer – Student Text,” 1969年.
- L. M. Breed and R. H. Lathwell, “APL360,” 1968.
- L. M. Breed and R. H. Lathwell, “The Implementation of APL360,” in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.
- A. D. Falkoff, K. E. Iverson and E. H. Sussenguth, “A Formal Description of SYSTEM/360” IBM Systems Journal, vol.3, no.1, “IBM システムの形式に関する記述,” IBM System Journal, vol. 3, no. 3, pp.198-261, 1964.
- P. C. Berry and J. R. Thorstensen, “Starmap,” 1978.
- P. C. Berry and J. R. Thorstensen, “Starmap,” IBM Systems Development Division, 1975.IBM System Journal, vol.30, no.1, 1975.
- IBMシステムジャーナル, vol.3, no.2, 1975.IBM Systems Development Division, 1975.IBM システム開発部, vol.3, no.2, 1975.IBM Systems Journal, vol.3, no.2 4, 1991.
- K. E. Iverson, “A Personal View of APL,” IBM Systems Journal, vol.30, no. 4, 1991.
- A. J. Perlis, “In Praise of APL: A Language for Lyrical Programming,” SIAM News, June 1977.
- B. McCormick, “A Programming Language,” 2000,2002.
- E. W. Dijkstra, “How Do We Tell Truths That Might Hurt?”, SIGPLAN Notices, vol. 17, no. 5, May 1982.
- A. D. Falkoff and K. E. Iverson, “The Design of APL,” IBM Journal of Research and Development, vol.17, no.1, 1982. 4, 1973.
- A. D. Falkoff and K. E. Iversion, “The Evolution of APL,” SIGPLAN Notices, vol.13, no.8, pp.45-57, August 1978.
- ACM, “Proceedings of the APL’69 Conference on APL,” SUNY Binghamton, NY, 1969.
- “The Origins of APL – 1974”; APLのオリジナル開発者に対する素晴らしいインタビュー。
IBM, “APL Language”, March 1975.IBM, “APL Language,” 1975.
L. Breed, “How We Got to APL1130”, 10 May 2004.
Historical Source Code Releases
- MacPaint and QuickDraw Source Code, July 18, 2010
- APL Programming Language Source Code, October 10, 2012
- Adobe Photoshop ソースコード, 2013年2月13日
- Apple II DOSソースコード、2013年11月12日
- Microsoft MS-DOS Earlyソースコード、2014年3月25日
- Microsoft Word for Windows Version 1.1.1a ソースコード、2014年3月25日
- Early Digital Research CP/M ソースコード、2014年10月1日
- Xerox Alto ソースコード、2014年10月21日
- Electronic Arts DeluxePaint Earlyソースコード、2015年7月22日