最近、Slate というプロトタイプベースの言語を発見(もとい再発見。梅澤さんが Smalltalkers' salon ML で早い時期に紹介されているのを目にしているはずなので…。<こんなのばっかや)して、いろいろ遊んでいました。Slate へのコメントは差し控えるとして、とりあえず実感できたことは、SELF に付いてきたデモ中のチュートリアルの bank account(改) をとりあえず組んでみると、その言語の設計者が、純粋 OOP 向けに最低限必要とされるオブジェクトの仕様をどのくらい分かっているか…とういことがなんとなく伺えるってことです。こんな短いコードですけど、言語の仕様の不徹底さや不安定さも露呈してしまいますね。画期的な新 OOP 言語を設計中の諸兄におかれましては、ぜひ、この bank account(改) を無理なく簡潔かつ明瞭に表現できることを確認されることをお薦めしたいものです。

http://squab.no-ip.com:8080/wiki/849

で、この Slate は一時期夢想していた、より Smalltalk らしさを押し進めた新言語の仕様のひとつのブロッククロージャをメソッドとシームレスに扱うという(これ自体は別に珍しいことではなく、JavaScriptPython なんかは無名関数をそのままメソッドとして登録できますからね。まあ、他にもメッセージ送信メタファまわりでいろいろとあるわけです)を一部具現化してくれていたので、やはり当初から想定された問題点が実感できてよかったです。「Smalltalk でやられていないことは、そうすることになにかしら無理があるからだ…と疑ってみるのが吉」という法則はここでも例外ではなかったようです。新 OOP 言語を設計される諸兄におかれましては、また、気に入った新言語を後押ししようとされているユーザーの皆様におかれましては、是非いちど、色眼鏡なしで Smalltalk をじっくり学んで(ry。

まあ、でも、冗談抜きに、せっかくこれだけ Smalltalk システムが身近になったわけですから、いったん現在主流の OS から離れて実際に Smalltalk の世界にしばらく住んでみて、そこにある様々なオブジェクト(クラスに非ず!)の挙動や GUI とオブジェクトの繋がりを、実体験として肌で感じ、できれば小脳モデルにまで昇華させておくことは、設計者なら“新”機能の再発明を防げたり、ユーザーならひいきにしたい新言語や新環境のよさを再発見できたりしてよいのではないかなと思います。オブジェクト指向GUI がどこから来たのかを知っておいて損はないと。

こう言ってもなかなか伝わりにくいとは思いますが、Smalltalk を普段から使い慣れている人に、そうでない人が、オブジェクト指向言語として定評があるからといって Ruby の、あるいは、GUI ベース OS として一時代を築いたからといって Mac のすごさをいくら説いてみたところで、実は、むなしいことがほとんどだったりします。にも関わらず、単に紹介者が Smalltalk に明るくなかったり、あるいは確信犯的な場合も含めて、相手が Smalltalk を知らなければ何でもあり、という状況が散見されるのは残念です。聞き手としては、そうしたある種のペテンを“それは違う…”と気付くことができるような知識や経験は備えておきたいものですね(もちろん、Smalltalk 自身にも同様なことは言えて、そのすごさを語ろうとする者は、LISP や Sketchpad のすごさについての言及もあってしかるべき…なわけです<自省を込めて)。

総じて、皆が普段から心がけて歴史的経緯やルーツに興味を持ったり、知っておいたり、機会があれば言及することは大切、ってことが言いたいわけです。もちろん、過去ばかり気にして前に踏み出せない…というのも困りものなので、牽引力の源になる適度な“無知さ”も必要ですが、人間、どうやったってそういった部分は残るので心配する必要はないような気も一部(^_^;)。

で、歴史的経緯で思い出したのですが、週末に LISP の論文をつらつらと横目で見ていたら SETF の導入の裏にアラン・ケイの影が伸びているらしい記述を見つけました。こんなところまで…。あと、てっきり Smalltalk のんのは LISP からの影響だと思っていた LISP のキーワード引数は、もしかしたら逆で Smalltalk からの影響があったのかもしれません。細かいところはちょっとわからないですが、LISP でキーワード引数が導入されるのはすくなくとも MIT の LISP machine LISP 以降なので Smalltalk よりずっと以前からあったもの…というわけでもなさそうです。