要約

  • Adele Goldberg と David Robson の1983年の著書は、Smalltalk-80 の Virtual Image とホスト固有の Virtual Machine の境界を、オブジェクトメモリ、バイトコード、実行コンテキスト、メッセージ探索、プリミティブとして具体化した。
  • Goldberg は仕様を実機で検証させた。Apple、DEC、Hewlett-Packard、Tektronix は移植を行い、Xerox PARC と不一致を共有し、参照実行トレースで動作を比較した。
  • そこで確認されたのは定義された境界の可搬性である。処理速度、停止時間、文字幅、ウィンドウ規則、入出力、ファイル、対話品質の同一性ではない。

読めるだけでなく、起動できる仕様

Smalltalk-80 は、構文だけを移せば済む言語ではなかった。クラス、コンパイラ、ブラウザ、デバッガ、グラフィックス、ユーザーインターフェースが、永続的なイメージの中でオブジェクトとして共存する開発環境だった。別の計算機へ移すとは、ソースを受理させることではなく、その世界を動かすことだった。

Smalltalk-80: The Language and Its Implementation で Goldberg と Robson が明確にしたのは二層構造である。Virtual Image はシステムのオブジェクトと上位ツールを持つ。その下で、各ホスト向け Virtual Machine がインタプリタ、オブジェクトメモリ、算術・記憶・画面・ポインティング装置・ファイルへつながるプリミティブを提供する。ソースメソッドは8ビットのバイトコードにコンパイルされ、スタック型インタプリタが実行し、コンテキストが進行中の計算を表現した。

移植の条件は限定されているからこそ強かった。ハードウェアごとに小さな下層を正しく作り、共通イメージを読み込む。Blue Book はソフトウェアを文章に置き換えたのではない。外部の実装者が PARC 内部の暗黙知なしに下層を再構築できる程度まで、観察可能な振る舞いを明示した。

そして Goldberg は、「十分に明確か」という判断を原著者の内輪に残さなかった。

外部の移植チームが仕様を測った

Computer History Museum の2010年のオーラルヒストリーで、Goldberg は Xerox から全面的な出版許可を得た経緯を語っている。Bert Sutherland の支援を受け、Tektronix、Hewlett-Packard、DEC、Apple を参加させた。条件は、社内ソフトウェアチームがハードウェアチームと共同で作業することだった。問いは言語への好みではなく、ハードウェアが性能に何をもたらすかだった。

Smalltalk-80: Bits of History, Words of Advice の公開記録によれば、招待は6社、実装段階へ進んだのは4社である。各社は仕様の不具合と設計上の助言を共有した。Xerox は更新されたイメージに加え、オブジェクトポインタ、オブジェクト空間、コンテキスト、コンパイル済みメソッド、クラスの説明を渡し、文書と実行が食い違えば直接相談に応じた。

それぞれの移植が、仕様書を試験する装置になった。Alto や Dorado では見えなかった前提も、DEC、HP、Tektronix、Apple のエンジニアが再現できなければ、未記述のホスト依存として表面化する。異なるハードウェアは雑音ではなく、契約を改善する観測点だった。

参加企業は完成文書の承認者でもなかった。プリミティブは変更され、イメージは拡大した。最初の実装者会議では、参照カウント、ガベージコレクション、メソッドキャッシュが議論された。Goldberg の記録では、旧稿の大半は捨てられ、書き直された。残す価値があったのは、複数の実装でデバッグされた正式な VM 仕様だった。

トレースが合意の範囲を示した

画面が似ているだけでは判定できない。Xerox は粒度の違う実行トレースを配布した。細かいトレースにはメモリ参照、割り当て、バイトコード、メッセージ送信、復帰、プリミティブ呼び出しが記録された。より長いトレースは項目を絞った。新しい VM は自らの実行を期待される列と比較できた。

Blue Book の記述も層ごとに具体的だった。オブジェクトメモリはポインタ、ワード、バイトのアクセスを分けた。インタプリタはクラスとメソッドを探索し、コンテキストを作り、スタックを維持し、探索失敗時には doesNotUnderstand: を送る。バイトコードはプッシュ、格納、送信、復帰、分岐に分類され、プリミティブは算術、コレクション、記憶管理、制御、入出力、システム処理を担った。

グラフィックスは境界をよく示す。BitBlt、テキスト、画面構成の多くはイメージ側のオブジェクトだったが、カーソル、キーボード、ビットマップ画面、ファイルは物理機器と接続しなければならない。プリミティブがその継ぎ目を受け持つ。同じイメージの要求を、別の画面制御、メモリ配置、機械語で実現できた。

成功とは、VM が Virtual Image を「読み取り、受け入れ」、期待動作を再現することだった。成功済みの実装が第4版イメージを VM 変更なしで読み込めたことは、境界の安定を示す。しかし、機械全体の同一性を示すものではない。

互換性と体験の同一性は別である

Goldberg の公開プロセス論は、イメージの採用と、各社ハードウェア上の実性能という主観を含む尺度を分けている。共通イメージなら同じクラスがあり、同じメソッドがコンパイルされ、似たブラウザが開く。それでも体験は境界の下と周囲に左右される。

メソッド探索のキャッシュ、参照カウントか追跡型かというメモリ回収、マイクロコードかアセンブリかホスト関数かというプリミティブ、スケジューリングと入力監視は、すべて遅延を変える。画面寸法、ビットマップ配置、フォント、カーソル、ファイルサービスは表示と操作を変える。正しい二つの VM が、オブジェクトの意味を保ちながら異なる停止や再描画速度を持つことは十分にあり得る。

文字セットにも代償が表れた。Goldberg は、全参加者がフォントを制御できなかったため、標準 ASCII を採用せざるを得なかったと振り返る。移植性は参加可能な機械を増やしたが、その表現面は共通に保証できる範囲まで狭くなった。

Blue Book 自身も、当時のハードウェアが望む対話性能をすべて満たさないと認めていた。契約はメッセージ送信やオブジェクト参照の意味を定められるが、遅いプロセッサを Dorado の感触に変えたり、画面を広げたり、回収停止を消したりはできない。

したがって互換性の証拠は、測った層にだけ適用すべきである。イメージ読み込みとバイトコードトレースの一致は、Image/VM 契約の証拠であって、タイミング、書体、ウィンドウ、周辺機器、利用体験全体の同一性の証拠ではない。

公開は一冊で完結しなかった

1981年8月の BYTE 特集は、Smalltalk-80 をまず広い読者へ紹介した。Goldberg と Robson の1983年の本は言語と VM 仕様を結びつけた。1984年の Smalltalk-80: The Interactive Programming Environment は、環境内での実際の作業を扱った。Glenn Krasner が編集した本は、実装者の経験を残した。

Goldberg の回想では、Dan Ingalls と彼女が争点をチームに持ち込み最終判断を行い、Robson が異論を聞く調停役を務めた。Ingalls は後年、参照インタプリタの大半を Robson が担当したと記している。文章、実行モデル、集団的意思決定を一致させる出版だった。

系譜も共同のものとして記す必要がある。Simula と Sketchpad は Alan Kay の構想に影響し、Kay はメッセージ中心のパーソナルコンピューティング像を示した。Dan Ingalls はインタプリタと VM を構築し続けた。Diana Merry はテキスト表示と画像を含む編集、Ted Kaehler はビットマップ描画と後のメモリ設計、Larry Tesler は Notetaker と開発環境に貢献した。David Robson は本と参照インタプリタを精密にした。PARC の広いチームと外部移植者が仕様を現実にした。

その中で Goldberg が果たした役割は、単なる編集ではない。公開許可を取り、研究室と外部実装コミュニティを結び、ハードウェアの観測を仕様へ戻し、意思決定と共著を担い、再現可能な公開物として完成させた。

仕組みを変えられたから契約は残った

後の実装はこの境界の効用を示した。ライセンスされたイメージの系統も、文書から新たに書かれた系統も生まれた。Apple で Ingalls は異なるマウスと画面に UI を適応させ、より速い CPU と大きな画面が体験を一変させることを経験した。

Squeak は、公開参照インタプリタと APDA イメージから始まり、オブジェクトテーブルを直接ポインタに替え、世代別 GC を導入し、制約した Smalltalk から C を生成した。Ted Kaehler と Ingalls がメモリを作り直し、John Maloney が変換器を、Scott Wallace がファイル系を整えた。機構は大きく変わっても、Smalltalk としての有用な連続性は保たれた。

良い移植契約が守るのは、有効な継ぎ目であって歴史上の全機構ではない。下層を変更する自由と、変更が上層を壊したときに検出する手段を同時に与える。Computer History Museum の Smalltalk Zoo が見せる多様性は、その成果である。Blue Book は、境界を越えるべき振る舞いと、ローカルに残せる選択を分けたからこそ、Smalltalk を旅立たせた。

出典