「メルの物語」は、コンピュータプログラミングの伝説の典型と言えるでしょう。主人公のメルビン・ケイ[ 1 ]は、その繊細なテクニックで同僚たちを魅了する、 模範的な「本物のプログラマー」でした。
エド・ナザーの『メル物語』は、ロイヤル・マクビー・コンピュータ社でかつて同僚だった「メル」の並外れたプログラミング能力を詳細に描いています。[ 2 ] [ 3 ]ナザーの物語は元々散文で書かれていましたが、ある人物によって「自由詩」形式に改変され、広く知られるようになりました。[ 4 ] [ 5 ]
メル・ケイについては、1959年のロイヤル・マクビーLGP-30コンピュータ用のACT-1コンパイラの「プログラミングの大部分」を担当したとされている以外、ほとんど知られていない。[ 6 ] [ 7 ]ナザーの物語では、ケイはハードウェアの癖を利用するコードを作成するためにアセンブラの最適化を避ける傾向があったと描写されている。例えば、コードに遅延ループを書き込まないようにLGP-30のドラムメモリの回転を利用するなどである。
ナザーが書いたこの話は、ケイがLGP-30のブラックジャックプログラムを、より新しいロイヤルマクビーシステムであるRPC-4000に書き換える作業に関わるものでした。会社の営業担当役員は、フロントパネルのスイッチを切り替えることでプログラムが負け(ユーザーは勝つ)ようにプログラムを修正するよう依頼しました。ケイは渋々その依頼を受け入れましたが、嬉しいことにテストを間違え、スイッチを切り替えるとプログラムが毎回勝ち(ユーザーは負け)になるという結果になりました。
ケイの退職後、ネイザーはバグ修正を依頼されました。コードを調べているうちに、無限ループのように見えるものが含まれているにもかかわらず、制御がループ内に留まっていないことに気づき、ネイザーは困惑しました。最終的に彼は、ケイが配列の要素を処理するために自己書き換えコードを使用しており、整数オーバーフローを利用するような方法でループをコーディングしていたことに気付きました。アドレスxを参照する命令のアドレスフィールドに1を追加すると、通常、アドレスはx + 1に変更されます。しかし、xが既に最大アドレスである場合、アドレスは0にラップアラウンドするだけでなく、オペコードが読み取られるビットに1が繰り込まれます。この場合、オペコードが「ジャンプ先」に変更され、命令全体が「アドレス0にジャンプ」になりました。この動作にネイザーは大変感銘を受け、敬意を表して作業を放棄し、バグを見つけられなかったと報告しました。
ナザーは20年以上も経ってから、この話を記憶から語りました。命令語内の「インデックス」フラグビットの位置など、いくつかの技術的な詳細は誤りであることが分かっています。ケイがそれを使用したことで、ナザーはコーディングトリックが使われているという重要な手がかりを得たと考えられます。しかしながら、ケイが実際のRPC-4000に実装した可能性のあるハックはいくつかあり、それらはナザーの説明とほぼ一致しています。[ 8 ]
IASマシン設計の初期のコンピュータにはインデックスレジスタがなかったため、配列操作には自己書き換えコードの使用が必要でした。LGP-30命令は y 2000 「メモリ位置2000のワードのアドレス部分の内容を、アキュムレータ内のワードのアドレス部分の内容に置き換える」ことで、自己書き換えコードの記述を容易にしました。[ 9 ]
このエッセイは、 1983年5月21日にユーズネットニュースグループ「net.followup」でutastro!nather(当時のエド・ナザーのUUCPメールアドレス)によって最初に公開されました。 [ 2 ] [ 3 ]
Royal McBeeコンピュータはLibrascope社によって開発・製造され、ブラックジャックプログラムのドキュメントはLibrascope社のメル・ケイ氏によって執筆されました。Librascope社のニュースレター「The Librazette」 1956年8月号には、LGP-30のトレーニングに関する記事が掲載されており、Librascope社のアプリケーションエンジニアの一部がRoyal McBee社の給与体系に異動したことが記されています。そのエンジニアの中にはメル・ケイ氏も含まれています。[ 1 ]
その号の表紙には、LGP-30の初心者プログラマーの最初のクラスとメル・ケイを含むインストラクターたちの写真が掲載されています。[ 10 ]