APL プログラミング言語のソースコード(2012 年版)。

2026/04/12 2:34

APL プログラミング言語のソースコード(2012 年版)。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

主要ポイントリストからの欠落要素と重要な詳細のいくつかの省略を踏まえ、明瞭性と簡潔性を維持しつつ主要なポイントを全て反映するように要約を改めることを推奨します:


改訂された要約:

コンピュータ歴史博物館は、ETH Zürich の Jürgen Winkelmann が提供した、APL\360 の1969–1972 年「XM6」バージョンのソースコードを公開しています。このリリースは非商用利用のみで利用可能です。約37,567 行の 360 アセンブリ言語から成り、90 ファイルに跨るこのリリースには、元々の変開発プロセスを構造化する特定のアンド ('ADD') コマンドが含まれています。本プロジェクトは、完全にアセンブリ言語で記述された歴史的なインタプリタを蘇らせます。これは全体のマインフレーム運用を管理し、電気機械式タイプライターで即時応答を実現できる対話型タイムシェアリング環境において50 人までの同時ユーザーをサポートする能力を持っています。

APL\360 は当初**「Iverson Notation」** (1957 年) と称され、Ken E. Iverson が著した 1962 年の書籍 A Programming Language に出版されました。その後 1966 年に"APL"と改名され、IBM System/360 マインフレーム向けに適応されたバージョンが APL\360 となりました。非慣用的記号(例:÷ は割り算)を特徴とし、標準的な演算子優先順位なしで右から左への評価を行うことで、変数の型宣言なしでの動的メモリ割当が可能となり、これは初期のマインフレーム計算の象徴的な特徴でした。

注目すべき早期アプリケーションには、Starmap (1973 年)、インタラクティブなビジネスゲームシミュレーションと、様々な財務および統計モデリングツールが含まれます。この蘇生を通じて、ファンは古典的プログラムへのアクセスを得られると同時に、Ken Iverson(同様に "J" という弁別体を開発)や Larry Breed、Roger Moore、Dick Lathwell、Adin Falkoff、Philip Abrams などの初期寄与者を称えることができます。この実行可能な環境を再構築することで、開発者は初期のマインフレーム工学を学び、これらの強力な計算資源を活用した人々の革新を祝うことができます。


この改訂された要約は、主要ポイントリストからの全ての主要なポイントを反映しつつ、簡潔で明瞭であるようにされています。

本文

ソフトウェアの宝石:コンピュータ史博物館「歴史的なソースコードシリーズ」

ハーバード大学のケネス・アイバーソン氏

計算機科学の最初の 50 年で、何千ものプログラミング言語が誕生しました。その多くは互いに類似しており、従来の進化的な発展路線をたどっていました。しかし、いくつかの革命的な言語は、より汎用的な言語たちとは異なる独自の方向性(スラント)を持っていました。LISP はリスト処理のために、SNOBOL は文字列操作のために、SIMSCRIPT はシミュレーションのために作られました。そして APL は数学、特に行列処理に重点を置いたために作られました。

後に APL と呼ばれるようになったものは、1957 年にハーバード大学教授のケネス・E・アイバーソンによって発明されましたが、それはコンピュータプログラミング言語ではなく、数学的な表記法としてでした。他の行列志向の記号システム(アインシュタインによる簡潔なテンソル表記など)が存在する一方で、それらは数学的分析向きであり、アルゴリズムの合成にはあまり向いていませんでした。ホワード・アイケンの弟子であるアイバーソンは、ハーバード大学の学生たちに「アイバーソン表記」と呼ばれるものを教え、アルゴリズムの説明に使わせていました。

アイバーソンは 1960 年に IBM に雇われ、アディン・ファルコフらと共にその記法に取り組むことになりました。現在有名となった彼の 1962 年の著作「A Programming Language」1 では、この記法は「手順……アルゴリズムまたはプログラムと呼ぶもの」の説明に用いられ、「相当な構文構造を示している」として言語であると言及されていますが、当時はまだ人間が読むための記法であり、コンピュータをプログラミングするための言語ではありませんでした。本書には、説明ツールとしての使用例(例えばコンピューターの命令セット定義のドキュメンテーションなど)や、一般アルゴリズム表現(ソートや検索など)のための使用例がたくさん掲載されています。そのような革新的なものに反発を示される可能性を予見して、彼は序言で「十分であるプログラミング言語の説明力と分析力は、それを習得するのに必要な相当な労力を十分に報います」と述べています。おそらく彼は、「この言語を習得するのは簡単ではない」と警告していたのでしょう。あるいは、彼の意見では他の記法言語は「十分」でないとのことを示唆していたのかもしれません。

もちろん、そのチームはすぐに、この記法をコンピュータプログラミング言語として変換できることに気づきました。1966 年から APL と呼ばれるようになったその言語は、行列操作を強調し、従来のものにはなかった特殊な記号を使用しました。これまで発明された他のコンピュータープログラム言語とはまるで違っていました。

IBM が System/360 メインフレーム用として「APL\360」を導入した際に、APL は流行りました。当時の他の多くの言語とは異なり、APL\360 は完全な対話型プログラミング環境でもありました。電気機械式のタイプライターに接続された共有化コンピューターで作業するプログラマーは、APL の文を打ち込み、すぐに結果を得ることができました。プログラムは定義され、デバッグされ、実行され、保存されるものでした。しかも、同時に数十人の他のユーザーが利用しているコンピューター上でです。

このバージョンの APL は完全に 360 アセンブリ言語で書かれており、マシンの全体を制御しました。それは高レベル言語と共に、完全な共有化オペレーティングシステムを実装していました。

IBM の許可を得て、コンピュータ史博物館は、1969-1972 年頃の System/360 用の APL 「XM6」バージョンのソースコードを非営利目的での利用のために公開する pleasure を感じております。

テキストファイルにはコード、マクロ、グローバル定義を含む合計 37,567 行が含まれています。90 の個別のファイルは

./ ADD
コマンドによって区切られています。この資料へのアクセスは、ここに記載されているライセンス条項に同意することによってのみ許可されます。これは非営利利用のみを許可し、ウェブ上の他の場所に複製を掲示することで第三者にリサインズを与える権利は含んでいません。

[APL\360 ソースコードのダウンロード]

ユージェン・ウィークルマン(スイス連邦工科大学チューリヒ校)は、このソースコードを実行可能なシステムに変換する驚異的な仕事をしました。さらに詳しい情報については、「MVT for APL Version 2.00」をご覧ください。

APL プログラミング言語の創成

アイバーソン氏の書籍「A Programming Language」1 は、コンピューター向けのプログラミング言語として直接使用するのは困難だった図式的表記法を使用しています。彼はこれを行列代数の拡張と考え、下付き文字、上付き文字、そして文字の太さやフォントに基づく区別など、一般的な数学的なタイポグラフィの慣習を使用しました。例えば、ここで数字をソートするプログラムの一例を示します:

[注:元のテキストにある図式表記(←, → など)は省略]

この記法をキーボードで入力されるコンピュータープログラミング言語として線形化するためには、APL の実装者たちは、制御転送のためにラベル付き矢印の使用をあきらめる必要がありました。しかし、彼らが完全に放棄したわけではありませんでした。それは、初等関数として特殊な記号を使用することです。例えば、以下の Huffman コードを生成するプログラムがそれを示しています:

[注:元のテキストにある特殊記号のプログラムは省略]

APL は、他のプログラミング言語よりも標準的な数学に近づく記号を使用します。例えば、除算の記号は「÷」であり、"/"ではありません。このような非常な記号をサポートするため、APL\360 は大文字欄に特殊な記号を含む独自の設計されたキーボードを使用しました。

APL\360 は独自の設計されたキーボードを使用していました。

それでもなお、キーボードに収まるよりも多くの特別な文字がありましたが、一部のものは 2 つの文字を重ねて入力することで表現されました。例えば、「昇順ソート」の文字 ⍋ は、ソートに使用される初等演算子ですが、∆(シフト H)を入力し、バックスペースを押してから ∣(シフト M)と入力することで作成されました。大文字と小文字の両方にスペースはありませんでしたので、APL は大文字のみの対応となりました。

プログラムを印刷するためには、アイバーソン氏とファルコフ氏は IBM に特別 Typeface ボール(球体印字頭)の設計を依頼し、1050 および 2741 ターミナルで使われていた IBM Selectric タイプライター機構を使用しました。

現在、プログラムは入力でき、同時に印刷することもできました。以下に、行列の数学的決定値(детерминант)を計算する APL 言語マニュアル2 に掲載されたプログラムの印刷版の一例を示します:

[注:元のテキストにある行列の印刷例は省略]

APL の試食(体験談)

APL は、1960 年代に開発された他の多くの言語とはいくつかの点で異なる簡潔な高レベルプログラミング言語です:

  • 評価順序: APL の式は右から左に評価され、関数の優先順位には階層はありません。例えば、
    2×4+3
    という式を入力すると、コンピューターはすぐに結果
    14
    を入力します(表示します)。多くの他の言語で存在する演算子優先順位では
    11
    になるわけではありません。もちろん、括弧を使って部分式をグループ化して評価順序を変更することができます。一般的なルールは、関数の右引数がその直右の式の値であることです。
  • ベクトルと行列の自動生成: 高次元構造が返される式を評価することによって自動的に作成されます。スカラーも自由に混合できます。例えば、
    A ← 2 + 1 2 3
    はベクトル
    1 2 3
    を作り、スカラー 2 をそれに加えて変数 A に値
    3 4 5
    の持つベクトルを保持するものを作成します。変数は決して宣言されず、自動的に作成され、割り当てられる式の大きさと形状を仮定します。
  • 豊富な初等関数: APL はスカラー、ベクトル、行列、さらには高次元のオブジェクトやそれらの組み合わせに対して作用する豊富な組み込み関数のセット(そして異なる関数を生成するために関数に適用される「演算子」)を持っています。例えば、上記で作成したベクトル"A"の要素の合計を計算する式は単純に
    +/A
    です。ここで
    /
    は「減少 (reduction)」演算子であり、左側の関数を右側の演算子のすべての要素に対して逐次的に適用させます。A の要素の平均値を計算するための式もまた、初等関数 ρ を使用して A に含まれる要素数がいくつあるかを決定します:
    (+/A) ÷ ρA

以下は、1970 年の「APL\360 ユーザーズマニュアル」3 からのもう少しの表で、組み込みの APL 関数と演算子の力と洗練された側面の一部を示しています。

[表:APL 関数の味わい]

APL は、プログラミングについて異なるように考えることと、臨時の高次元データ構造を中間値として使用し、その後強力な初等機能で削減することを促進します。有名な例は以下の短いしかし完全なプログラムで、R までのすべての素数を計算することです:

(~T∊T∘.×T)/T←1↓⍳R
サブ式意味R が 6 の場合の値
⍳R
1 から R までの数字のベクトルを生成する。1 2 3 4 5 6
T←1↓
ベクトルの最初の要素を除外し、残りを臨時ベクトル T に割り当てる。2 3 4 5 6
T∘.×T
外積を作成する:T の各要素を T の各要素に乗算した結果を持つテーブル。(以下の表参照)

(簡潔のため T∘.×T の行列値は省略、原文参照)

         4   6   8   10  12
         6   9  12   15  18
         8  12  16   20  24
        10  15  20   25  30
        12  18  24   30  36

T∊
「セットメンバシップ」演算子を使用して、T のどの要素がテーブルにあるかを見出す。 | 0 0 1 0 1 | |
~
| 結果を否定して、T のどの要素がテーブルにないかを特定する。これらはテーブルに倍数を持たない整数である。 | 1 1 0 1 0 | |
( )/T
| 私たちが特定した T の要素を選択する。これらはすべて R よりも小さい素数である。 | 2 3 5 |

プログラムにはループがありませんことに注意してください。APL 式の力は、条件分岐とループが必要になる頻度が、より伝統的なプログラミング言語よりもはるかに少ないことを意味しています。

演算子は、通常はループを必要とするさまざまな計算のために簡単な方法で使用できます。例えば、ベクトル X の要素で 100 より大きいものの数を計算する式は

+/X>100
です。これは、
X>100
が X のどの要素が 100 より大きいを示す 0 と 1 からなるビットベクトルを返すため、そして
+/
はそのベクトルのすべてのビットを加算するため機能します。

しかし、条件実行とループは、もちろん、時々必要です。構造化プログラミングの後の発展の光の下で、APL の制御転送のための唯一の初等機能、「GO TO LINE x」ステートメント → は特に弱いです。以下の例は、2 つの引数の最大公約数を計算する関数です。最後のステートメントは、先頭に戻ってブランチすることでループを作成します。第 2 行では、条件付き制御転送によって 0 行に移動することにより、関数が終了して最後に G に割り当てられた値を返すことが原因でします。

1960 年代の APL 言語についてさらに学ぶには、「APL Language」リファレンスマニュアル2 とポール・バリー氏の 1969 年の「APL\360 Primer」4 をご覧ください。言語は年々進化し、最近のバージョンには IF-THEN-ELSE などの制御構造が含まれています。

APL の実装

APL 表記法の最初のコンピューター実装は、1965 年にニューヨーク州ヨークタウンハイツの IBM リサーチセンターで働くラリー・ブレッドとスタンフォード大学の大学院生であったフィリップ・アブラムスによって、IBM 7090 メインフレーム用として FORTRAN で書かれたバッチ処理志向の言語インタプリターでした。

最初の対話型バージョンは、すぐにヨークタウンハイツの IBM 7093(仮想メモリを持つ実験的な 7090)のために書かれました。これは TSM シェアシステムの下で動作し、ウィットワイズに「IVSYS」と呼ばれていました。これは標準の 7090 オペレーティングシステムの名称である「IBSYS」と韻を踏み合わせています。2012 年のメールでブレッドは次のように述べています。

IVSYS はログイン、ログアウト、即時実行、関数定義を提供しました。それはアクティブなワーキングスペースと保存されたワーキングスペースの両方を行いました。これらの実装は基本的でした;主に私たちは TSM プロジェクトがログイン/ログアウト/ファイル保存のために私たちに提供してくれたものを使いました。7093 を使用できる週はわずか数週間であり、それが退役した後にロジャーと私はシステム/360 上のスタンドアロンシステムの計画を開始しました。それらの週の間、ケネスとそのグループは実行可能な APL がどのように見えるかを初めて目にしました。

言語の一部の実装は 1967 年に IBM 1130 ミニコンピユーターのために完了しました。

IBM をoutside で広く使用された最初の APL の実装は IBM システム/360 用でした。「APL\360」と呼ばれ、1966 年 11 月に IBM 内で最初にサービスに入りました(表記「APL\360″は、バックスラッシュが APL の「展開」演算子であるため、隠れた意味も持っていました:「APL は 360 を拡大する」)

ブレッドはその直前の時期について次のように述べています。

この期間、1966 年初頭はアイバーソン表記から APL への移行時期でした。(実際、アディン [ファルコフ] は '66 年の春に「APL」という名前を考案しました。)言語と環境の洗練と拡張は多くの年にわたって継続しました。商用バージョンを作成するために追加されたコードはほぼありませんでした;書類作業だけです。

1968 年 8 月までに、APL\360 は IBM の顧客に対してサポートなし(「タイプ III」)プログラムとして IBM の「寄稿プログラムライブラリ」5 で利用可能になりました。主要な実装者はラリー・ブレッド、ディック・ラウェル、ロジャー・ムーアであり、他の貢献者にはアディン・ファルコフとルサー・ウッドラムが含まれていました。

[写真キャプション:初期の APL 開発者、左から右:ディック・ラウェル、ケネス・アイバーソン、ロジャー・ムーア、アディン・ファルコフ、フィル・アブラムス、ラリー・ブレッド。この写真は約 1983 年に撮影されました。]

APL 変数の動的性質のために、APL\360 はマシンコードを生成するコンパイラーではなく、インタプリターとして実装されました。プログラムは「codestring」と呼ばれる内部形式で保存されており、ユーザーがタイプしたものに対応しました。インタプリターはプログラムが実行される際に codestring を調べ、式が評価されるにつれて動的に変数を割り当てて再構成しました。

最初の APL\360 バージョンのいくつかはマシンの全体を制御しました。したがって、それはオペレーティングシステム、ファイルシステム、共有化モニター、コマンドインタプリター、プログラミング言語を組み合わせたものでした。限られたメインメモリのせいで、ユーザーのワーキングスペースは必要に応じてドラムやディスクにスワップアウトされました。パフォーマンスは驚くべきものであり、ラリー・ブレッドが彼の明確で簡潔な実装の説明6 にて、オペレーティングシステムを言語の要件に合わせて調整する能力に帰因します。

APL\360 は対話型言語であり、最大 50 人の同時ユーザーに対して高速応答と効率的な実行を提供しました。各ユーザーはプログラム、変数、そして一時停止されたプログラムの実行状態を持つ「アクティブワーキングスペース」を持っていました。「)LOAD」、「)SAVE」、「)COPY」といったシステムコマンドは保存されたワーキングスペースのライブラリを維持しました。他のシステムコマンドは言語機能を制御しました;例えば、「)ORIGIN」を使用して、プログラマーはベクトルや行列が 0 または 1 から始まるかどうかを制御できました。

APL は、パンチカードによるバッチ処理を経験してきたプログラマーの世代にとっては、対話型共有化への最初の紹介でした。

APL の応用

コンピュータープログラミング言語になる以前さえ、アイバーソン表記はアルゴリズムのドキュメンテーションのための人間用の言語として役に立ちました。古典的な例は、新しい IBM システム/360 コンピューターの命令セットアーキテクチャの形式的定義で、アディン・ファルコフ、ケネス・アイバーソン、エド・サッセンガサが 1965 年に IBM Systems Journal に発表した記事7です。

この記述は形式的であり、口語的ではありません。それは共同変数を介して相互作用するプログラムセットを使用して達成され、補助テーブルと共に使用されました…形式的な記述は完全で自立していますが、初期の研究を助けるためにテキストが提供されています。

しかし、論文に提供されているテキストはそれ以上のものです。それは形式的な記述の行ごとの説明であり、それはまた APL の描写力を実演と説明でもあります。

使用された表記は、制御転送のためにアイバーソンの本にあったグラフィカルスタイルでした。以下に、メモリアクセス操作の説明の一例を示します:

[注:元のテキストにある図式記述は省略]

APL が出版用の記法から対話型コンピュータープログラミング言語へと移行したのは、それが繁栄させた理由です。APL\360 の実装が利用可能になった際、IBM や他の人々は多様なアプリケーションを作成して使用を刺激しました:

  • Starmap: 星と惑星の位置を計算およびプロットするための APL 関数のセット89。それは IBM のポール・バリー氏と、現在はダートマス大学の物理学・天文学教授であるブリーンモア大学での天文学学生のジョン・トーステンセンによって 1973 年に書かれました。特定の日期と時刻のためのケプラーの方程式の古典的な解および座標の系列の回転を使用して、天球のボウルに惑星や星がどのように見えるかを示します。
  • IBGS (対話型ビジネスゲームシミュレーション): 「生産、マーケティング、財務の機能分野における意思決定と計画を伴う一般的なコンピューター管理シミュレーション。」
  • APL におけるゼロと積分: 「ニュートン氏やミュラー氏の古典的手法やジェンキンス・トラウブ氏のような最近開発された手法の両方を使用して、実関数の実零点、実または複素係数を持つ多項式の実または複素零点、および複素関数の複素零点を見つけます。」
  • Graphpak – APL\360 用の対話型グラフィックスパッケージ: 「…キャパビリティは最低レベルでのグラフィックインターフェースサポートからいくつかのアプリケーション領域への高レベルまで範囲があります…プロットコンポーネント…線形または対数…適合曲線…記述幾何学コンポーネントは、三次元オブジェクトの定義、スケール変更、拡大、移動、回転、および投影表示を許可します。」
  • APL におけるグラフとヒストグラム: 「タイプライターターミナルで曲線と棒チャートを作成します。」
  • APL 座標幾何学システム: 「終端で対話的に座標幾何学の問題を解決します…測量者、土木エンジニア、都市計画者のために使用されます。」
  • APL/PDTS – プログラミング開発追跡システム: 「…プログラミング開発プロジェクトに対して計画に対するパフォーマンスを監視するマネージャーとプランナーを支援するために。」
  • MINIPERT: 「プロジェクト管理のためのクリティカルパス法 (CPM) システム」
  • APL 経済数理計画言語: 「実践的な経済学者、ビジネス予測者、または教師には、対話型モデル構築およびモデル解像のために使いやすいツールが提供されます。」
  • APL 財務計画システム: 「財務アナリストとプランナーにレポートの設計、計算ステートメントの指定、データの入力と変更、そして即時ターンアラウンドを持つ印刷されたレポートの入手を許可します。」
  • APL テキストエディタとコンポーザー: 「このプログラムは終端で対話的にテキストを処理するために設計されています…関数にはテキストの入力、改訂、作成、印刷、保存が含まれています…秘書、科学者、エンジニア、管理者、または論文、手紙、レポートまたは仕様書を作成する他の誰かに使用されます。」

これらの多くのアプリケーションは対話性を強調しており、当時より典型的なバッチジョブ処理と比較して大きな生産性向上をもたらしました。さらに、APL はアプリケーションを開発することをはるかに速く可能にしました。2012 年のメールでラリー・ブレッドは次のように注記しました。

すべての分野において、APL プログラムが書かれる速度はモデリングおよびプロトタイピングのために価値があります。…一例:約 1973 年、Continental Can はその 21 の製造プラント用の在庫システムを必要としました。FORTRAN プログラマーのチームは一年間働きましたが、成功の兆候は見られませんでした。STSC のセールススマンが週末に APL Plus で使用可能な動作可能なモデルを構築しました。

APL が最も浸透した分野は、科学、アクチュアリー、統計、および財務アプリケーションでした。APL の最初の 25 年間の経過についての詳細については、主題に関する 12 つの論文と 1 つのエッセイを持つ IBM Systems Journal の特別 1991 号10 をご覧ください。

APL の賛辞と批判

APL は元々プログラミング言語として設計されていませんでした。アイバーソン氏は次のように言いました。

APL を開発する初期の動機は、執筆と教授のためのツールを提供することでした。APL は主に商業的なプログラミングで利用されてきましたが、私はまだそれが最も重要な用途が残されていると信じています:幅広い科目の教授のための単純で正確な実行可能な表記法として。

多くの短くて珍しい記号があるので、APL コンピュータープログラムはそれを鼓舞した数学的表記法と同様に、多くの人にとって魅力的だと感じる簡潔さと優雅さを備えています。APL は熱狂的な信奉者を惹きつけます。ACM のチューリング賞の最初の受賞者であるアラン・ペルリス (1966 年) もその一人でした:

一目で一つの文を横断することは、他のプログラミング言語では数ページのテキストのみで観察可能なように、操作と制御の複雑な、巧妙な、そして美しい相互作用を暴露することができます。人はスタイルの出現と重要性を始めに理解することになります11

多くの人々は APL の表現の自由を解放的だと見つけます。

私はかつて [Pascal を] 独裁的に厳格であるため、「ファシストプログラミング言語」として記述していました。…もし Pascal がファシストなら、APL は無政府主義者です12

しかし、APL プログラムはしばしば難解でデコードが困難です。いくつかの人々はそれが「一方向のみの言語」と冗談を言って、プログラムの作者でも後にそれを理解する苦労をする可能性があります。それはプログラミングのトリックを鼓舞します。完全な複雑なアルゴリズムを実装するための APL の「ワンライナー」を書くという挑戦は耐えられません。以下には、ジョン・コニーウェイの「ゲームオブライフ」の実装バージョンを示す 2 つの異なる APL ワンライナーの例があります:

life←{↑1 ω∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂ω}

明らかに、心臓に優しいものではありません。オランダのコンピューター科学者であるエドガー・ダイクストラは次のように述べています。

APL は、完璧に行き着いた誤りです。それは過去のプログラミング技術のための未来の言語です:それは新しい世代のコーディング bum を作成します13

しかし、APL のファンは難解な APL コーディングが悪いプログラミングスタイルであり、どんな言語にも病気になる可能性があると言うでしょう。APL はアルゴリズムを表現するためのより豊かなパレットを提供する、という議論があるので、より難しい問題をより速くそして関連していない構文の混雑なしに解決することができます。

あなたの意見に関係なく、APL とそれらから鼓舞された言語(APL2 や J など)は依然として多様なプログラミング言語宇宙の一部として活動しています。

ケネス・アイバーソン氏への短い伝記

ケネス・ユーゲニウス・アイバーソンは 1920 年 12 月 17 日にカナダ、アルバータ州、カムロス付近の農場で生まれました。彼は 9 年生まで農村の一室の学校で教育を受け、その後大恐慌の最中で家族農園の仕事をするため退学しました。後に彼は、学校教育を続ける唯一の理由は教師になることであると述べましたし、それは決定して欲しくない専門職でした。長い冬の間は独自に微積分を勉強しました。

彼らは 1942 年に召集され、彼の服役の間に十分な通信課程を取って高校をほぼ完了しました。軍事サービスの後、彼はキングストンオントリオのクイーンズ大学から数学と物理学の両方の BA を獲得し、次にハーバード大学から物理学の MA を取得しました。1954 年、彼はコンピューターのパイオニアであるホワード・アイケンの下で PhD を修了し、「線形微分方程式の機械的解決:動的経済モデルへの応用」と題された博士論文でした。

博士号を修了した後、アイバーソンはハーバード大学の教員に加入してアイケンの新しい自動データ処理プログラムで教えていました。彼はインストラクターとして 1 年、そしてアシスタント教授として 5 年間そこにいました。彼はアルゴリズムを表すための従来の数学的表記法の不十分さに対してますます挫折したので、独自のものを発明し始めました。

1960 年にアイバーソンはフリードリック・ブルックスの助言でニューヨークヨークタウンハイツの新しい IBM リサーチセンターに参加しました。ブルックス氏は彼のハーバード大学の教えの同僚であり、現在は IBM で働いていました。二人は新しい表記法の継続的な発展に協力しました。1962 年ケネスは今古典的な本「A Programming Language」1 を出版し、そのタイトルがその時点で「アイバーソンの表記」と呼ばれてきた表記法に名前 APL を与えました。

アイバーソンは IBM に在任中ずっと APL の発展に取り組んでいました。1980 年に彼は IBM を離れカナダに戻って I.P. Sharp Associates で働くことにしました。それは APL ベースの共有化サービスを設定していました。

1987 年彼は「有償雇用から引退し」、APL のより現代的な方言の開発に彼の全注意力を向けることになりました。APL は商業目的のために成功して使用されていましたが、アイバーソンは教授のためのより適切な新しい単純な実行可能な表記法を開発することを望んでいました、それは低価格で利用可能になるものでした。この言語の実装の第一版、J と呼ばれました、APL90 Users'カンファレンスで発表されました。

言語と単語を楽しむ彼の純粋な楽しみから、このような言語を作成するアイバーソン氏の能力は娘のジェネット・クレイマーが思い出します。「彼は辞書を小説のように読むように読んだ」と言います。アイバーソン氏は英語も数学も明瞭かつ簡潔に伝えることが重要だと考えていました。

息子のエリックを含めた協力者と共に、アイバーソン氏は J の発展を継続し、多産的に出版を継続しました。2004 年 10 月 16 日の土曜日、彼は J テーチュアルに取り組んでいる間に脳卒中に苦しみ、3 日後の 10 月 19 日に 83 歳の年齢で亡くなりました。

ケネス・アイバーソン氏についての多くの話があります。いくつかは以下の通りです:

  • 任期制: ケネスはハーバードで任期を取得しませんでした。彼はアシスタント教授として 5 年間働き、そして学術部は彼を昇格のために立てることを決めました。私は彼に何が間違っていたか尋ねたとき、彼は「よく、デカンが私を呼び出して『問題は、あなたが出版したのはその小さな本だけである』と言った」と答えました。その小さな本は後に彼にチューリング賞を与えました。私はそれがケネスについてのコメントではなく、昇格手続きの conventional mindset へのコメントだと思います;それは学術手続きとハーバードへのコメントです。— フリードリック・ブルックス、「ケネス・アイバーソンへの祝賀」、2004-11-30
  • 寛容さ: 早期の講演でケネスは寛容な比較の利点を説明していました。聴衆の一人が不信して尋ねた、「確かに、あなたが A=B と B=C において、A が C に等しくないかもしれないという意味ではないでしょう?」と。手を動かすことなく、ケネスは「いかなる大工も知っています!」と返答し、次の質問に続きました。— ポール・バリー
  • プログラミング: ケネスとの社会的会話をしているとき、私は「ねえ、ケネス、あなたは私の好きな言語設計者で、ドノル・クヌッツは私の好きなプログラマーです」と言いました。そしてケネスがすぐに、「私のプログラミングに何が悪いのですか?」と答えました。— ジョイ・タットン、「ケネス・アイバーソンへの祝賀」、2004-11-30
  • 新しい思考の仕方: 1973 または 1974 年にケネスと私はロチェスターのコダックで 40 から 50 のプログラマーグループに話しました。彼らは PL/I で働くことを要求されていました。質問期間、シニアスタッフメンバーが「私たちがあなたが言っていることを理解すれば、新しい考えの仕方を実装することを提案している」と言いました。そしてケネスは椅子から飛び上がり、「はい!まさにそれが私が言っていることです!」と答えました。— ジョイ・タットン、「ケネス・アイバーソンへの祝賀」、2004-11-30

謝辞

APL ソースコードをリリースするために許可を得るために私の 10 年間の遠征を終了してくれた IBM のマイケル・カラシック、イブーン・パーキンズ、スティーブ・セルスト、そしてケン・エドワードズに感謝します。この文章の初期ドラフトのコメントのためにカートリス・ジョーンズ、ラリー・ブレッド、ポール・バリー、そしてロイ・サイクスに感謝します。— レン・シュステク

参考文献

歴史的なソースコードリリース

  • MacPaint と QuickDraw ソースコード、2010 年 7 月 18 日
  • APL プログラミング言語ソースコード、2012 年 10 月 10 日
  • Adobe Photoshop ソースコード、2013 年 2 月 13 日
  • Apple II DOS ソースコード、2013 年 11 月 12 日
  • Microsoft MS-DOS Early ソースコード、2014 年 3 月 25 日
  • Microsoft Word for Windows Version 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 日

Footnotes

  1. K. E. Iverson, A Programming Language, John Wiley and Sons, Inc., 1962. 2 3

  2. IBM, "APL Language," March 1975. 2

  3. IBM, "APL\360 User's Manual," March 1970.

  4. IBM, Paul Berry, "APL\360 Primer – Student Text," 1969.

  5. L. M. Breed and R. H. Lathwell, "APL\360," 1968.

  6. L. M. Breed and R. H. Lathwell, "The Implementation of APL\360," in ACM Symposium on Experimental Systems for Interactive Applied Mathematics, 1967.

  7. A. D. Falkoff, K. E. Iverson and E. H. Sussenguth, "A Formal Description of SYSTEM/360," IBM Systems Journal, vol. 3, no. 3, pp. 198-261, 1964.

  8. P. C. Berry and J. R. Thorstensen, "Starmap," 1978.

  9. P. C. Berry and J. R. Thorstensen, "Starmap," IBM Systems Development Division, 1975.

  10. IBM Systems Journal, vol. 30, no. 4, 1991.

  11. A. J. Perlis, "In Praise of APL: A Language for Lyrical Programming," SIAM News, June 1977.

  12. B. McCormick, "A Programming Language," 2000,2002.

  13. E. W. Dijkstra, "How Do We Tell Truths That Might Hurt?", SIGPLAN Notices, vol. 17, no. 5, May 1982.

同じ日のほかのニュース

一覧に戻る →

2026/04/12 1:47

小規模モデルも、Mythos が特定した脆弱性を見出すことができた。

## Japanese Translation: 最新の研究における最も重要な示唆は、高度なサイバーセキュリティ防御がもはや巨大で独佔的な AI モデルにのみ依存しなくなったという点です。代わりに、現実世界のセキュリティアプリケーションにおいて、生のモデル知能よりも優れたシステムオーケストレーションおよび検証レイヤーの方がはるかに重要であることが判明しました。この結論は、Anthropic の Mythos をさまざまな「フロンティア」モデルと比較した AISLE コンソーシアムによる独立したテストによってさらに裏付けられました。驚くべきことに、約 36 億〜51 億個のアクティブパラメータを持つ小型のオープンウェイトモデルが、複雑なエクスプロイトチェーンを成功裡に回復し、特定のエクスプロイト不可能なコードの同定や基礎的なセキュリティ推論といった特定のタスクにおいてより大きなモデルを上回るパフォーマンスを示しました。例えば、51 億パラメータを持つモデルは、27 年前の OpenBSD のバグに関する完全なチェーンを完全に同定した一方、一部の大型モデルでは単純な論理トレースに失敗したり、修正済みコードで誤検出を生じたりしました。これらの発見は、業界が生のモデル能力を追求することから転じて、検証を扱えかつ信頼を維持できる安価なオープンモデルを広く展開する信頼できるシステムを構築する方向へ移行できるようであることを示しています。これにより、企業はエリート知能への独占的なアクセスを必要とせずとも、コスト効率の高いオープンモデルを普及させることが可能になります。

2026/04/12 5:58

アップルシリコンと仮想マシン:VM の台数制限(2)を超える方法(2023 年)

## Japanese Translation: 主要なポイントは、Apple Silicon Mac が macOS Ventura ソフトウェア契約条項に組み込まれた閉源的な XNU カーネルによって実施される正式な 2 VM の制限を回避できることです。これは、カスタム開発用カーネルをインストールすることで可能となり、特定のブート引数(`hypervisor=` および `hv_apple_isa_vm_quota`)を使用することにより、最大 255 つの同時仮想マシンを動作させることが可能です。成功するには、Mac をシャットダウンし、リカバリモードで起動し、システム完全性保護(SIP)を無効にし、`kmutil` を使用してカスタムカーネルコレクションを作成および設定する必要があります。検証は `sysctl kern.osbuildconfig` を使用し、NVRAM のブート引数をチェックすることで実施できます。 しかし、このカスタマイズには重大なトレードオフが伴います。ユーザーは簡素化された OS アップデートを失い、後で変更を取り戻すために `bputil` によるポリシーリセットの手動管理が必要となります。著者は M2 Pro MacBook Pro で macOS VM を 9 つ実行し、副作用として熱発生とファンの作動が確認したことでこの方法を成功裏にテストしました。大規模な開発環境では技術的に実装可能ではありますが、プロセスには高度な専門知識が必要です。特に recoveryOS テルミナルを通じてブートポリシーを扱う技能が必要で、コアセキュリティプロトコルを損なうことなくシステム安定性を維持する必要があります。

2026/04/12 5:08

保存エネルギーゼロにおいて 447 TB/cm² を達成し、フルオログラファイン上のアトミックスケールのメモリを実現しました。

## Japanese Translation: **改善された要約:** 2026年4月11日公開(バージョン v53)の本研究は、単層フッ化グラファイト(CF)を用いたトランジスタ後メモリ architectures を提案することで、「メモリーウォール」と NANDフラッシュ供給危機に対処する。本技術は、sp³混成炭素スカーフレットに対するフッ素原子のコバルント配向のバイステーブル性を二値の自由度として活用している。高レベル計算手法(DLPNO-CCSD(T))により、C-F反転障壁が約 4.8 eV と確認され、300 K における熱・トンネリングに基づくビット反転速度はそれぞれ~10⁻⁶⁵ s⁻¹および~10⁻⁷⁶ s⁻¹であり、ゼロ連続電力消費下での非揮発性データ保持を可能とする。このアプローチは、現在の技術を上回る 5 つの桁(走査プローブプロトタイプで 447 TB/cm²)に及ぶ面密度を実現し、ニアフィールドミッドインフレッツアレイを用いて体積ナノテープアーキテクチャへ拡張した場合には 0.4–9 ZB/cm³の容量に達し、集計されたスループットは 25 PB/s と予測される。これは AI を駆動したストレージ需要に対する革命的な解決策を提供する。 ※注記:改善された要約は、安定性速度および特定のアーキテクチャ階層に関する欠落していた定量的データを統合しつつ、原文に記述されていた高レベルの影響を維持している。

APL プログラミング言語のソースコード(2012 年版)。 | そっか~ニュース