
2026/10/07 0:19
Smalltalk の初期史(1993)
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
Alan C. Kay はオリジナルの Smalltalk を著した人物であり、1960 年代の概念から 1983 年までのオブジェクト指向プログラミング (OOP) の進化を追跡しています。彼のビジョンは、Sketchpad や Simula といった初期の影響を受けることで形成され、約 1973 年に Xerox PARC で ALTO(「Interim Dynabook」)の作成に集結しました。この機械は「すべてはオブジェクトであり、メッセージによって通信する」という考え方を先駆的に提案しました。短期間の反復を経て、献身的なチームによって 7 ヶ月以内に Smalltalk-76 を開発した後、Xerox はやがて革新的な Smalltalk-80 システムを 1983 年にリリースしました。しかし Xerox はこれらの高度な技術を効果的に市場に展開することに失敗し、その決断は Kay が後に「勝利の機縁から敗北を奪う」と呼んだものです。それでもイノベーションは革命的な変化をきっかけとしました。Steve Jobs などといった主要人物は PARC を訪れる際に感銘を受け、Apple の Lisa プロジェクトに直接影響を与えました。Smalltalk-80 は広範に配布された最初の OOP システムであり、ソフトウェア設計を根本的に変革し、発祥の企業が商業的なウィンドウを見逃したとしても、ビジナリーな研究が entire イndustry を変えることができると証明しました。
本文
Alan Kay:Smalltalk とパーソナルコンピューティングの歴史
免責事項と著作権情報
- 利用条件:本資料の一部または全部を無償で複製・配布することを許可します(商用利益を得る目的ではない場合)。
- ACM(計算機学協会)の著作権表示、出版物の題名および発行年を表示すること。
- 「この複製は計算機学協会の許可により行われています」と明記すること。
- その他:上記以外の複製や再出版には、料金の支払いまたは特定の許可が必要です。
- 出典元:
- Alan C. Kay (Apple Computer)
- 発表会:HOPL-II/4/93/MA, USA
- © 1993 ACM
要約
- 歴史的な文脈の再評価
- 多くのアイデアは以前のものから生まれます。1960 年代(特に ARPA コミュニティ)には、インタラクティブな共有主記憶計算機やグラフィック画面を通じて、「人間とコンピュータの共生」に関する多数の概念が誕生しました。
- 重要点:重なり合うウィンドウインターフェースやオブジェクト指向設計は、単なる「旧来のものの改善版」としてではなく、1960 年代の成果を「ほぼ新しいもの」と再評価する視点から生まれました。
- コンピューティング能力の指数関数的成長に伴い、「メインフレーム計算」や「機能呼出し」を超えた新たな可能性を探求しました。
- ダイナブックとユーザーインターフェースの革命
- ハンディヘルド型の「ダイナブック」では、共有メインフレームのように多数のユーザーを処理する必要がないため、学習環境としてモンテッソーリやブルナーの考え方を採用できます。
- 大規模な複雑性の削減から、データ構造や制御構造を廃棄し、生物的な方式(メッセージのみで相互作用する普遍的セル)を採用する必要性が生まれました。
- Smalltalk の位置づけ
- 初期の Smalltalk は、ハードウェア、言語、UI デザインにおける前例によって支えられつつも、新しいコンピューティングパラダイムを実現しました。
- 単なる技術的進歩ではなく、精神的なクンニアン(Kuhnian)のパラダイムシフトを目指した「質的な転換」の結果です。
はじめに
- 執筆の舞台
- 1992 年、機内で執筆。膝の上には「Interim Dynabook(暫定型ダイナブック)」と呼ばれる重量 5 ポンドのノートコンピュータを置いています。
- 年末までの価格目標は 700 ドル未満。
- ハードウェアとソフトウェア
- 平坦で鮮明な高解像度ビットマップ画面、重なり合うウィンドウ、アイコン、ポインティングデバイス、十分なストレージ・計算能力を備えています。
- 特に優れたソフトウェアはオブジェクト指向です。
- Smalltalk はこのシステムで動作しており、現在の子供たちとの教育活動で使用されています。
- Smalltalk の意義
- ARPA および Xerox PARC におけるより大きな探究の一部として発展しました。
- 功績の帰属は困難ですが、「優先権を主張する無駄な試みなく、発見の興奮を共有する」ことが重要と考えます。
- Smalltalk の哲学
- **「コンピュータ」**という概念自体に対する再帰性を持っています。
- オブジェクト指向設計(OOP)は、動的システムとユーザー関係のモデルリング効率を質的に改善することに成功しました。
- 単なる技術革新ではなく、人間の可能性を増幅するための新たな設計パラダイムです。
- 貢献者への謝辞
- Smalltalk の大半の開発において、Dan Ingalls が中心的な人物でありました。
- デザインや実装の面で多くの人々(Ivan Sutherland, Marvin Minsky, Seymour Papert など)から影響を受けました。
I. 1960-66:初期の OOP と形成期的なアイデア
220 ファイルシステム
- 構造
- 空軍訓練コマンド施設でファイル移動のためのスタイルとして登場しました。
- デザイナーはファイルを 3 つの部分に分けることで問題を解決(巧妙に解決)しようとしました。
- 第 3 部分:実際のデータレコード全体(任意のサイズと形式)。
- 第 2 部分:レコードとフィールドを取得し、コピー・更新を行う B220 プロシージャ。
- 第 1 部分:プロシージャのエントリーポイントへの相対ポインタの配列(初期ポインタは標準順序で定義)。
- 特徴
- このアイデアは後に多くのシステムで使用されましたが、COBOL の強制使用によって消滅しました。
B5000 と HLL コマパイリング
- 特徴
- セグメンテッドストレージシステム、HLL(高級言語)コマンドパイラインとバイトコード実行の効率性、自動メカニズムなどを備えました。
- プログラム参照表へのアクセスが 220 ファイルシステムのモジュールに対する手続き的インターフェースを提供しました。
SketchPad と Simula
- SketchPad(1963)
- Dave Evans のオフィスで見つけた資料で、人間とマシンのグラフィカルコミュニケーションシステムとして非常に革新的でした。
- 主要なアイデア:
- マスター描画 vs インスタンス描画:ものが「マスター描画」によって記述され、「インスタンス描画」が生成されます。
- 制約(Constraints):制御とダイナミクスはグラフィカルな形式の制約によって供給され、相互に関連する部分を形成します。
- 逆索引:手続きへのポインタを埋め込み、逆索引を使用してジャンプするプロセスを実装しました。
- 初期機能:クリッピングとズームウィンドウを最初に持っていました(スケッチされたバーチャルシートは約 1/3 マイル平方)。
- Simula
- Case-Western Reserve の Algol をベースにノルウェー語から翻訳されたような独特な文書でした。
- SketchPad のアイデアと非常に類似した構造を持つ割り当てを行いました。
- **活動(Activity)とプロセス(Process)**という概念を導入し、オブジェクトを独立したエンティティとして制御する手続き言語となりました。
- シミュレーションや動的システムをモデルリングするための柔軟性を提供しました。
II. 1967-69:OOP ベースのパーソナルコンピューティングへの第一歩
FLEX マシンと JOSS/EULER
- FLEX マシンの誕生
- Ed Cheadle とのコラボレーションにより開始されました。
- Wes Clark の LINC に次ぐ「小さなマシーン」として、高度な言語(BASIC など)でプログラミングすることを目的としました。
- 既存の JOSS は動的シミュレートには不向きでしたが、エンドユーザーへの配慮は最高級でした。
- 言語の進化
- Wirth の EULER は Algol の一般化であり、型を廃棄し、手続きを最初のクラスオブジェクトとしました。
- Smalltalk-72 の意味論には Simula の影響が強く残っています。
Doug Engelbart と NLS (On-Line System)
- ビジョン
- Doug Engelbart は「パーソナルコンピューティングの父」であり、インタラクティブな乗り物を通じて人間の知能を増幅する概念空間へのナビゲーションを提唱しました。
- グラフィックス、複数のパネル、効率的なナビゲーション、共同作業などの機能を実装しました。
- パラダイムシフト
- Gordon Moore の法則と組み合わさり、部屋サイズのインタラクティブ計算機が机上に置くことが可能になりました。
- 数百万台のパーソナルマシンとユーザーが必要であり、アプリケーション開発はエンドユーザーによるカスタマイズが求められます。
- インターフェース設計の課題
- TreeMeta コンパイラのような「相互作用の文法」では、ユーザーがシステム状態から脱出することが強制されました(階層的メニューの問題)。
- 代わりに、「よりフラットな」インターフェースが必要で、すべての状態への遷移を容易にする設計が求められました。
割当とオブジェクト参照
- B5000 の一般化
- オブジェクト参照は B5000 デスクライプタの一般化として扱われました。
- FLEX デスクライプターには、オブジェクトの「マスター」とインスタンスへの 2 つのポインタが含まれていました。
- 割当メカニズム
- B5000 の l 値/r 値方式は複雑なオブジェクトには不向きでした。
- 新しいアプローチとして、
のような操作をオペレーターではなく、振る舞いを選択できるインデックスと見なし、ストア前に関連オペランドを検討する仕組みを導入しました。a[55] := 0
III. 1970-72:Xerox PARC と Smalltalk-71/72 の黎明期
環境の変化
- Smalltalk-71
- Xerox PARC で開発が始まりました。
- 重なり合うウィンドウとグラフィックス
- フォント編集、描画、アニメーション、音楽などの機能が追加されました。
- バイトコードによる効率的な実装が実現されつつあります。
- アイコニックプログラミング
- 視覚的なシンボルを使用してプログラムを記述・操作する概念が深化しました。
Smalltalk-72 の誕生
- 二つの賭け
- Smalltalk:言語と開発環境としての本格的な開始。
- Interim Dynabook:教育用モバイルコンピューターの原型的な構想。
- Smalltalk-72 の原則
- オブジェクトのすべてはメッセージを送受信するだけです。
- 内部状態への直接アクセスを禁止し、カプセル化を実現しました。
- UI デザイン
- マウスとウィンドウ管理システムの確立が加速しました。
IV. 1972-76:Smalltalk(-72) の成熟期
Smalltalk-72 の詳細な開発
- 進化の過程
- ST-74 へと進み、ooze ストージージ管理などの機能が追加されました。
- Smalltalk と児童教育の関わりが深まり、ThingLab(物理シミュレーション)などが開発されました。
- 「ディスクパックを焼こう」
- データ永続化とパッケージングに関する重要な試みがなされました。
Notetaker とアプリケーション
- Notetaker
- 文書作成システムの早期の実装です。
- Apple Demo (1976)
- Smalltalk の概念を Apple に示す機会となり、後の Macintosh や Lisa の設計に影響を与えました。
V. 1976-80:最初の現代的な Smalltalk(-76)
継承と Class Hierarchy
- 継承(Inheritance)
- オブジェクト指向の核心となる「クラス継承」の実装が確立されました。
- これにより、コードの再利用性と階層構造が大幅に改善されました。
- Smalltalk-76
- 現在の Smalltalk の基盤となったバージョンです。
- 言語仕様と実行環境がほぼ完成しました。
Xerox PARC 以外の展開
- トラブルと教訓
- Xerox との協力関係における課題(特許問題や組織的な壁など)もありましたが、これらの経験は Smalltalk の独立した開発を促しました。
- 「歴史」は客観的事実だけでなく、俳優が舞台から去った後の「弱々しい手振り」として捉えるべきだという視点も持たれています。
VI. 1980-83:Smalltalk のリリースバージョン(-80)
製品化の準備
- Transforms (変換)
- コード変換や最適化に関する研究が進みました。
- Coda
- 新しいプロジェクトや言語機能の探索が行われました。
- リリース戦略
- Smalltalk 80 が正式に市場投入され、商用製品の成功への道が拓かれました。
引用文献と付録
引用文献
- SketchPad, JOSS, LISP, SIMULA などの 1960 年代の偉大なプログラミング概念への言及。
- Dan Ingalls, Adele Goldberg, Xerox PARC LRG (Learning Research Group) への感謝。
付録一覧
- 付録 I: KiddiKomp メモ
- 付録 II: Smalltalk-72 インタープリタ設計
- 付録 III: お礼(貢献者への謝辞)
- 付録 IV: イベント駆動ループ例
- 付録 V: Smalltalk-76 内部構造
コードブロックと技術的定義例
Smalltalk のメッセージ送信モデル
object message: 'doSomething' performWithArguments: #('arg1', 'arg2') "オブジェクトは振る舞いの値を持つマッピングとして機能する"
B5000 的な割当 vs 新しいアプローチ
- 従来の問題:
(l 値/r 値の混同)a[55] := 0 - Smalltalk の解決策: オブジェクト自体がすべての振る舞いを私有所有し、メッセージによるアクセスのみを許容。
結びに
- Smalltalk は単なるプログラミング言語ではなく、人間の可能性を増幅する新しいコンピューティングパラダイムでした。
- 1960 年代から 80 年代までの蓄積と試行錯誤が、現在のパーソナルコンピューティングの基盤を形成しました。