「初めてのRuby」の言語系図を勝手に添削

この手の系図には間違いがつきものなのですが、「プログラム言語の系譜で、LispSmalltalkの線を引いてるのはこの本だけ!」と言われてしまうとつい反応したくなるのが人情というものでして…汗。


Pascal → Simula !?

'70 → '67(SIMULA 67 の場合。SIMULA I なら '66) というのは時系列的にまずいと思います。ここはオーソドックスに、ALGOL 60 から線を延ばして、

ALGOL 60 → SIMULA

と、すべきかと。

Pascal → CLU ?

リスコフは、CLU について、Pascal は反面教師的な位置づけであるのに対し、SIMULA は自分たちが欲していたものに一番近い(が、足りない部分があったので CLU を作った)…と言っているので、Pascal からよりは SIMULA からひっぱったほうが素直ではないかと。

SIMULA → CLU

Smalltalk から(Flavors を介した) Common Lisp へ向かう矢印がない

のちに総称関数の呼び出しというものに一般化され、当初のメッセージングというコンセプト自体は結局、排除されてしまいますが、それでも LISP におけるオブジェクト指向拡張は、Flavors 以来、どちらかというと C++(型を意識する抽象データ型のOO)よりは Smalltalk(型を意識しないメッセージングのOO)からの強い影響下にあり続けたので、この矢印は引いておくべきだと思います。

Smalltalk →(Flavors →) Common Lisp
  • The Evolution of Lisp (PDF)
  • Flavors: Message Passing in the Lisp Machine (PDF)

▼ 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

Python から Ruby へ向かう矢印がない

文法面という表層ではありますが、コードを書いていてもっともよく使う def とかはモロなので。なにより、くしくも Python から Ruby に至る道筋にあたるスペースがちょうど空いていることですし汗。

PythonRuby