続き

そもそもは、オブジェクト指向といったときに、それが何をさすかということに関する意識の違いがあるわけですよね。コンピュータそのものが、同じように強力だけど小さなコンピュータから再帰的に構築されている、という「元気で変化に強く記述力も高い」のオブジェクトというものを念頭に置くのと、Cのstructみたいなものだけど、privateとかpublicとか言えて、メソッドという引数を一個余計に取る関数と組み合わされている、という「弱いモデル」を念頭に置くのとの違いがある、という。"object-oriented programming"という言葉が始めて使われたときには、前者を指していて、そのシステムも作られて、書かれたものもいくつか存在したわけです。

これは「プログラミング vs. 設計」という対立軸とは違います。オブジェクトというものがどういうものであるかという視点の違いで、原理的には2x2の表の4つのマスにそれぞれあてはまるものがあってもおかしくはないのかもしれません。ただ、現状は「強い方のモデルに基づいたオブジェクト指向設計」というマスを埋められるものはないのかもしれない、ということが言いたかったわけです。

 「プログラミング言語の視点だけで」というように、あたかも設計と言語が切れているような言い方をしたつもりはありませんよ。あと、「これがオブジェクト指向だ」と言う言い方よりは、「最初はこれがオブジェクト指向だった」と言っているわけです。今はいろいろな意味で使われていることはもちろん知っています。waterfallも、ある一人の人が言い出して使われ始めたわけですよね?それがどのくらいオブジェクト指向と違うのかは良くわかりませんが...

 話は変わりますが、Alan Kayソフトウェア工学の会議に招待されたときに"Is 'Software Engineering' Oxymoron"とか何とか言う題の招待講演をした結果、お呼びがかからなくなった。Turing賞受賞講演は受賞者が自分の行きたい会議を選んでそこで講演するので、ICSEにまた言って同じようなことを主張しようか、と言っていたものの結局は日程の都合からOOPSLAに落ち着きました。

とみざわさん

> ★ Alan Kayのメールおもしろかったです。ありがとうございます。

僕も始めて読みました。ありがとうございます、鷲見さん。

> ★ Parcは(Alan Kayも)やはり偉大だ。

 PARCは偉大でした。

> ★ 私の言いたかったのは、結局AKがどう定義しようが、オブジェクト指向と
> いう言葉はかなり幅広い意味の言葉になってしまっているのと、AKの厳密定義
> のほうがむしろ少数派だろう、ということ。

 そりゃそうです。少数派なので屈折するんですよ。

> ★ ぼくも設計屋ではないしどちらかというと趣味ではないですが、コメント
> の範囲では、くめさんの意見のほうに遥かに近い。玉石混交のチームでプログ
> ラムをいじる時にはみんなが同じ理解に至ることが決定的に重要になります。
> 極論すれば、その視点から見たときには、スキーマ変更なんて怖い機能を皆で
> 使うケースは極めてレアです。

 なしでもいろんなものは作れますが、言語処理系とかデータベースとかを作る、というときには、動的機能を持った言語の言語要素にいろんなものをマップすればだいぶん簡単に作れますよね。

> ★ 設計だってオブジェクト指向ならlate-bindingは大切…ですよね?くめさ
> ん。よしきのいうlate-bindingってもっと特殊なものなのか?

このlate-bindingは、「動的ディスパッチ」というだけよりはもうちょっと言おうとしています。

> ★ ところで、クラスもいらないならselfはだめなの?

これは僕ですか?僕は「いらない」と書いた覚えはありませんが...このselfはSelfですか?

電話会議

粛々とまた8時間づつ離れた3大陸(2大陸+1島)の会議。話のリードはもちろんCarlyねたである。
僕も彼女とは一度あって握手した、とかいうことを書いても良いのだろう。いずれ共和党からどこかのなにかに立候補するという観測もありです。2008年は、Hilary+Oprah vs. Jeb+Carlyとかね。

とみざわさん(その2)

これは、話半分という感じだなぁ。簡単に作れる代りに簡単なものしか作れな
い/動かないということはないですか? 単にその機能をつくるためだけに便利
なだけでは? あれば…が簡単につくれる機能というのは、それだけでは専用
機能と区別が付かなくて、いろんなものに使えるとか、さらに、害がない、と
いうような側面も考えないと言語/システム設計上まずいのでは?

# 横道ですが、(一般的な)言語の処理系つくるならMLが一番向いていると思い
# ます。

簡単なものしか作れない、ということはないでしょう。これってとみざわさんと2000年ごろにやった話を繰り返しているような気はしますが、SqueakだけでもeToysとかSqueakそのものとかのような言語処理系がありますし、そうでなくてもSmalltalkで書かれた証券取引システムみたいなものは実際に今も運用されているものがたくさんあるようです。

MLで普通のコンパイラを書くときれいに書ける、ということには同意しますよ。ただ、既存のインスタンスを変える必要がある、というようなものも世の中結構必要です。あるいは、ユーザーさんがちょっとしたスクリプトを書けるようにするときに、その処理系をどう書くのか、というような。抽象化されたスタックとかスタックポインターとかインストラクションポインターとかが言語から扱えるというのは別に限られたことしか実装できない特殊機能というわけではなく、他の言語をそこに落とし込むとき、というような場合にはかなり一般的に使えると思います。

 Greenspunの

"Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran
program contains an ad hoc informally-specified bug-ridden slow implementation of
half of Common Lisp."

というのは、多くの場合(Lispかどうかはともかく)、あてはまるかなあと感じています。

昨日のコメント欄

さすが梅澤さん。ありがとうございます。公私共に充実。

僕はOMTくらいしかやったことはありませんでした。XP系の話題を出すと混乱に拍車を掛けるかなあと思っていたので迷っていたのですが、迷ったままにしておいてよかった^^;

late-binding

late-bindingという概念そのものは別にプログラミング言語に限ったことでもなければ、ましてや前にも書いたように「メソッドディスパッチ」のことだけを指しているわけでもありません。どちらかといえば、「最初からすべてが判るわけではないので、可能なことはなるべく後のほう(普通は実行時を意味する)に決定する」という思想のことです(返事が遅れてすみません、とみざわさん)。
Alanの使うスライドにきれいに説明したものがありますが、どうすればみられるのでしょうね。

 設計に関連することでも、イテレーションを繰り返す(変な日本語かもしれませんが)手法だと、詳細を後で詰める、ということは大いにあるので、それもまたlate-bindingと言って良いと思います。

毛玉

アップロードしました。2.2というものをいったん作ったものの、やっぱりもうひと修正する必要を感じたので、最新版は2.3になっています。.sar形式にしてちょっと賢いことをしようとするので、インストールも多分便利になっていると思います。お試しください。

http://www.is.titech.ac.jp/~ohshima/squeak/kedama2/

とみざわさん(その3)

(この記憶が正しいとすると、)結局、言語を問わず「クラス」のようなものを
欲しくなるもので、このようにみんなが欲しくなってしまうものこそが、非常
に重要だと思うのですが、私が言いたいのは、そのようなものが、
「Smalltalk マイナス 他のオブジェクト指向言語」の部分にはあまり残って
いないのでは、ということなのです。いや、こんなのがあるぞ、というのがあ
れば是非教えてください。

これはなんだか不公平な数式のようにも見えますが(他のオブジェクト指向言語、というのが他のオブジェクト指向言語全部という意味なのかどうか)、いずれにせよその差の部分にはいろいろと山のような概念や機能が入りうると思いますよ。例えば、call/ccをユーザーが自分で書けるとか。

...というひとつをそっと挙げましたけど、きっとひとつひとつの機能みたいなものを挙げても「いや、それはこの言語でもできる」とか「それができて何がうれしいの?」とかいう反応を呼んでいるような気もしなくはないですね。もうちょっとオブジェクト感の違いみたいなものがあるわけなのですが、「使って1000行くらいのプログラムでも書いてみてください。そうすれば判ります」と言うのを避けてそれを伝えるのは難しいでしょうねえ。