この手の系図には間違いがつきものなのですが、「プログラム言語の系譜で、Lisp→Smalltalkの線を引いてるのはこの本だけ!」と言われてしまうとつい反応したくなるのが人情というものでして…汗。
▼ Pascal → Simula !?
'70 → '67(SIMULA 67 の場合。SIMULA I なら '66) というのは時系列的にまずいと思います。ここはオーソドックスに、ALGOL 60 から線を延ばして、
ALGOL 60 → SIMULA
と、すべきかと。
- SIMULA: an ALGOL-based simulation language (ダウンロードは有料)
- Some features of the SIMULA 67 language (ダウンロードは有料)
- The development of the SIMULA languages (ダウンロードは有料)
▼ Pascal → CLU ?
リスコフは、CLU について、Pascal は反面教師的な位置づけであるのに対し、SIMULA は自分たちが欲していたものに一番近い(が、足りない部分があったので CLU を作った)…と言っているので、Pascal からよりは SIMULA からひっぱったほうが素直ではないかと。
SIMULA → CLU
▼ Smalltalk から(Flavors を介した) Common Lisp へ向かう矢印がない
のちに総称関数の呼び出しというものに一般化され、当初のメッセージングというコンセプト自体は結局、排除されてしまいますが、それでも LISP におけるオブジェクト指向拡張は、Flavors 以来、どちらかというと C++(型を意識する抽象データ型のOO)よりは Smalltalk(型を意識しないメッセージングのOO)からの強い影響下にあり続けたので、この矢印は引いておくべきだと思います。
Smalltalk →(Flavors →) Common Lisp
▼ SELF から(あるいは Smalltalk から)、と、Scheme から JavaScript へ向かう矢印がない
C++ からの線はあくまで文法上という表層の影響にすぎないので、JavaScript という言語の本質的な部分に影響を与えた SELF や Scheme から線が延びていないのは強い違和感を覚えます。
もっとも、メジャーな Scheme はともかく SELF については、同書ではプロトタイブベース(インスタンスベース)についての扱いは薄いと先に断わり書きもあることですし、あえてマイナーな SELF を出さずとも、SELF がSmalltalk の強い影響下で成立した経緯を鑑み、上流の Smalltalk からひっぱるだけでもよいかとも。
Smalltalk(→ SELF) >→ JavaScript Scheme −−−−
I'm not proud, but I'm happy that I chose Scheme-ish first-class functions and Self-ish (albeit singular) prototypes as the main ingredients.
http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html