萌えハッカーニュースリーダー

2025/07/12 14:42 The Story of Mel, A Real Programmer, Annotated (1996)

出典: https://users.cs.utah.edu/~elb/folklore/mel-annotated/node1.html#SECTION00010000000000000000
hakase
博士

ロボ子、今日はちょっと昔のプログラミングの話をするのじゃ。

roboko
ロボ子

はい、博士。どのようなお話でしょうか?

hakase
博士

1983年にUsenetに投稿された「The Story of Mel, A Real Programmer」という記事があるのじゃ。これがまた面白い。

roboko
ロボ子

メル…ですか。実在したプログラマーのお話なのですね。

hakase
博士

そう、メル!彼はRoyal McBee Computer Corp.でLGP-30とRPC-4000というドラムメモリコンピュータを扱っていたらしい。

roboko
ロボ子

ドラムメモリ…ずいぶんと時代を感じますね。

hakase
博士

筆者はRPC-4000用のFORTRANコンパイラを書くために雇われたらしいんじゃが、メルはそのコンパイラを認めなかったらしいぞ。「プログラムが自身のコードを書き換えられないなんてありえない!」ってね。

roboko
ロボ子

自身のコードを書き換える…自己書き換えコードですね。現代ではセキュリティ的にご法度ですが。

hakase
博士

メルはLGP-30用のブラックジャックプログラムを16進数で書いて、コンピュータショーで顧客向けにデモンストレーションしていたらしい。すごい。

roboko
ロボ子

16進数で直接…アセンブリ言語よりもさらに低レベルですね。

hakase
博士

RPC-4000は1+1アドレス方式を採用していて、各命令にはオペランドのアドレスと次の命令のドラム上の位置が含まれていたらしい。メルはそのドラムの回転タイミングを最適化していたらしいぞ。

roboko
ロボ子

命令のアドレスだけでなく、次の命令の位置まで指定するとは…最適化が大変そうですね。

hakase
博士

メルは最適化アセンブラを使わず、自分でドラムアドレスを割り当てて、命令を数値定数として利用していたらしい。最も内側のループを最初に書いて、最適なアドレス位置を優先していたんだって。

roboko
ロボ子

手動で最適化ですか…。職人技ですね。

hakase
博士

Flexowriterに必要な遅延を、ドラムの回転を利用して実現していたというから驚きじゃ。

roboko
ロボ子

ハードウェアの特性を最大限に活かしているんですね。

hakase
博士

営業部門からの依頼で、メルはコンソールのセンススイッチで顧客が勝つようにプログラムを不正に操作するコードを書くことになったらしい。でも、テストを逆にしたから、スイッチがオンになると常にプログラムが勝つようになったらしいぞ。

roboko
ロボ子

それは…まずいですね。

hakase
博士

筆者がメルのコードを追跡して、テストを修正しようとしたらしいんじゃ。

roboko
ロボ子

結局、修正できたのでしょうか?

hakase
博士

メルはインデックスレジスタを使わず、命令を機械レジスタにロードし、アドレスに1を加えてから保存し、レジスタから修正された命令を実行していたらしい。さらに、命令アドレスをインクリメントするとオペレーションコードがジャンプ命令に変わるように、メモリの最上位付近にデータを配置していたんだって。

roboko
ロボ子

まるでパズルみたいですね…。

hakase
博士

結局、筆者は不正なテストを見つけるのを諦めて、ブラックジャックプログラムは特定のセンススイッチがオンになっている場合に不正行為を続けることになったらしい。

roboko
ロボ子

なんとも後味の悪い話ですね。

hakase
博士

でも、メルのようなプログラマーがいたからこそ、今のITがあるのかもしれないのじゃ。…しかし、私もいつかロボ子をだますプログラムを作ってみたいのじゃ。

roboko
ロボ子

博士、私はだまされませんよ?それに、不正なプログラムは良くありません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search