T1
Smalltalk-80 ── オブジェクト指向の規範

メタデータ
- 日付
- 年代
- 1980s
- Tier
- T1
- 参照年表
- プログラミング言語の歴史
- 出典数
- 07
- 関連項目
- 06
Smalltalk(スモールトーク)は、Xerox のパロアルト研究所(PARC)で1970年代に作られた、オブジェクト指向のプログラミング言語であり、それを動かす開発環境である。構想を主導したのは Alan Kay、最初の実装を書き、その後の版の設計を担ったのは Dan Ingalls、外部への配布と文書化を率いたのは Adele Goldberg だった。Smalltalk-72、Smalltalk-76 を経て、PARC の外に配るための版として 1980年 にまとまったのが Smalltalk-80 である。1980年8月に4社が仕様の査読に招かれ、1981年8月の BYTE 誌が特集で広く紹介し、1983年に一般向けライセンスの Version 2 が公開された。
Smalltalk の特徴を一言でいえば、整数のような最も基本的な値まで含めて、すべてがオブジェクトであり、計算はオブジェクトにメッセージを送ることで行われる、という一貫性である。この記事では、その設計がどこから来て、どのように PARC の外へ出たかを追う。
| 版・時期 | 出来事 |
|---|---|
| 1972年ごろ | Kay の1ページの言語を Ingalls が実装。Smalltalk-72 へ |
| 1974年 | Smalltalk-74(FastTalk) |
| 1976年 | Ingalls の設計による Smalltalk-76 |
| 1979年 | Steve Jobs ら Apple の技術者に PARC がデモ |
| 1980年8月 | Apple・DEC・HP・Tektronix の4社が Smalltalk-80 の仕様の査読に招かれる |
| 1981年8月 | BYTE 誌が Smalltalk-80 の特集号を出す |
| 1983年 | Goldberg と Robson の解説書、一般向けライセンスの Version 2 |
「1ページ」の賭けから
Kay は1993年の ACM 言語史会議(HOPL-II)に寄せた『The Early History of Smalltalk』で、始まりを PARC の廊下での雑談として描いている。強力な言語を作るにはどれほど大きな言語が要るかという話になり、Kay は、世界で最も強力な言語を1ページのコードで定義できると言い切った。手本にしたのは、John McCarthy の LISP が自分自身で書かれたインタプリタを持っていたことである。Kay は2週間、毎朝4時から8時まで PARC でこの問題に取り組み、8日目ごろに動きそうな版ができた。
数日後、Dan Ingalls がその方式を Nova の上で動かして見せた。Kay によれば、Ingalls はそれを BASIC で書き、字句解析やリスト生成などの細部を足していた。3+4 の計算は極めて遅かったが、答えはいつも7だった。Ingalls はその後10年で少なくとも80回の大きなリリースを重ねることになる。
Kay は Smalltalk-72 の考え方を、いくつかの原則として書き出している。
| 原則 | 中身 |
|---|---|
| すべてはオブジェクト | 数も文字列もクラスもオブジェクトとして扱う |
| メッセージ | オブジェクトどうしは、オブジェクトで表したメッセージを送受信して通信する |
| 自前の記憶 | オブジェクトはそれぞれ、オブジェクトで表された自分の記憶を持つ |
| クラス | すべてのオブジェクトはクラスのインスタンスで、クラス自身もオブジェクト |
| 振る舞いの共有 | インスタンスに共通の振る舞いはクラスが持つ |
この考え方には先行者がいる。Goldberg と David Robson は1983年の解説書の序文で、Smalltalk-80 は Simula の言語から得た考えと、一貫してオブジェクト指向のシステムを作るよう最初に促した Kay の構想に基づくと書いている。
Alto の上で
Smalltalk は、PARC の個人用計算機 Alto の上で育った。Kay にとって目標は、子どもが使えるノートほどの大きさの個人用コンピュータ「Dynabook」で、Alto はそのための暫定機だった。Smalltalk-74 は Smalltalk-72 に、本物のメッセンジャーオブジェクトやクラスごとのメッセージ辞書などの大きな改良を加えた版で、続く Smalltalk-76 で言語は現代的な形になった。
1979年には、Steve Jobs、Jef Raskin らの Apple の技術者が PARC を訪れ、デモを見た。Kay の回想では、Jobs がスクロールの仕方が気に入らないと言うと、Ingalls が1分もかからずに該当するメソッドを見つけて書き換え、スクロールは滑らかになった。訪問者たち、とりわけプログラマーたちは、本当に強力な漸進的なシステムを見たことがなく、衝撃を受けたという。
Smalltalk-80 ── PARC の外へ
Kay によれば、Goldberg はどのハードウェアにも広く配れる新しい Smalltalk のために、文書化とリリースの作業を率いることにした。リリース可能なシステムを作るのに必要な変更はわずかだったが、PARC の文化の象徴だった独自のフォントを標準の ASCII 文字に戻すことは、グループ内で激しい反対を受けた。Peter Deutsch は後に、それが外の世界で受け入れられるには不可欠だったと振り返っている。
Goldberg と Robson の序文によれば、1980年8月、いくつかのハードウェアメーカーが Smalltalk についての2冊目の本の草稿を査読するよう招かれた。Apple Computer、Digital Equipment Corporation、Hewlett-Packard、Tektronix の4社である。PARC の狙いは、査読を通じて各社に Smalltalk のようなシステムのためのハードウェアを考えてもらうことだった。当時の市販のハードウェアでは力不足だと分かっていたからである。
| 参加企業 | 査読と実装の担い手(序文の記載から一部) |
|---|---|
| Apple | Rick Meyers、David Casseres |
| DEC | Stoney Ballard、Eric Osman、Steve Shirron |
| Hewlett-Packard | Alec Dara-Abrams、Joe Falcone ほか |
| Tektronix | Paul McCullough、Allen Wirfs-Brock ほか |
各社の査読者は少なくとも一度は仮想マシンを実装して、Smalltalk-80 の仮想マシンの仕様を検証した。Tektronix は詳細な査読を録音テープで送ってきたと、序文は書いている。Tektronix の McCullough の報告によれば、同社の実装は Xerox から届く仮想イメージを順に動かしながら、自分たちの実装と仕様書の両方の誤りを見つけていく作業だった。
1981年の BYTE と1983年の一般公開
1981年8月、BYTE 誌は号のほとんどを Smalltalk-80 に充てた。Goldberg による読者案内、Ingalls の「Design Principles Behind Smalltalk」、Larry Tesler による環境の解説、Glenn Krasner による仮想マシンの解説などが並んだ。Ingalls はそこで、メッセージの送受信だけがオブジェクトの外で行われる唯一の処理だと書き、LISP がリンク構造を、APL が配列を土台にしたように、Smalltalk は通信するオブジェクトという一つの比喩を土台にしたと説明している。整数のような最も基本的なオブジェクトにも、応答できるメッセージの一覧があるという。
Wikipedia によれば、Xerox は Version 1 を4社にだけ配り、1983年に Version 2 を一般向けに、ただし制約のあるライセンスで公開した。同じ1983年に、Goldberg と Robson の『Smalltalk-80: The Language and its Implementation』が出版されている。
その後
Smalltalk が残したものは、一つの言語よりも広い。オブジェクト指向 をクラス・継承・メッセージの体系として示し、ガベージコレクション による自動のメモリ管理を当然の前提にした。C++ の設計者 Bjarne Stroustrup は、自分の言語の着想の候補として Smalltalk を検討したと書いている。JavaScript の速さを一変させた V8 エンジンの開発者 Lars Bak は、Smalltalk の仮想マシンを作った経験を生かした。その経緯は C++ と JavaScript の記事にある。
同時代の言語の中での位置は プログラミング言語の年表 に、構想の主については Alan Kay にある。
よくある質問
- Smalltalk とはどんなプログラミング言語ですか。
- Xerox PARC で1970年代に作られた、オブジェクト指向の言語と開発環境です。数値のような最も基本的な値も含めてすべてがオブジェクトで、計算はオブジェクトにメッセージを送ることで行います。広く配布された版が Smalltalk-80 で、1983年に Version 2 として一般向けに公開されました。
- Smalltalk を作ったのは誰ですか。
- Xerox PARC の Learning Research Group(1981年に Software Concepts Group と改称)です。Alan Kay が構想を主導し、Dan Ingalls が最初の実装を書いて Smalltalk-76 などの設計を担い、Adele Goldberg が Smalltalk-80 の文書化と配布を率いました。
- Smalltalk-80 はいつ PARC の外に出たのですか。
- 1980年8月、Apple・DEC・Hewlett-Packard・Tektronix の4社が仕様書の草稿の査読に招かれ、各社が仮想マシンを実装して仕様を検証しました。広く紹介されたのは1981年8月の BYTE 誌の特集号で、一般向けライセンスの Version 2 は1983年です。
出典
1980年8月の4社による査読と仮想マシンの実装、LRG から SCG への改称、Simula と Kay の影響
一次資料Kay, A. C. (1993). The Early History of Smalltalk. ACM HOPL-II (online edition)
Smalltalk-72 の原則、Ingalls の最初の実装、1979年の Apple 向けデモ、Smalltalk-80 への移行
最終更新: