RubyはメッセージのないSmalltalkか、に関するまとめ

Smalltalk-Squeakの日本における先駆者の@abee2さんの発言に端を発した@sumimさんの発言を受けて@yukihiro_matz さんが直接回答。この会話をまとめました(2010/09/28)。 イテレータの話題に移っています。そのあたりを追加しました。発端の発言も追加しました。(2010/09/29)
42
アベ先生 (CV: 阿部和広) @abee2

Rubyは要するにメッセージのないSmalltalkと言ったところで、結局はLispに行き着くのか。 RT @goodmad 「いまRubyがブームだが、Rubyは要するにカッコのないLisp」(竹内郁雄)

2010-09-28 03:14:21
sumim @sumim

メッセージ性のない(つまり主張・思想的背景の薄い)Smalltalkと空目。それなら納得ですが原則としてRubyがSmalltalkよりLISPに似ているとの主張には強い違和感を覚えます。どちらかをよく知らないか、利益誘導か。>Rubyは要するにメッセージのないSmalltalk

2010-09-28 10:43:32
Yukihiro Matz @yukihiro_matz

少なくとも私はSmalltalkよりLispの方をよく知ってますけどね。Smalltalk経験ほぼゼロだし。RT @sumim: 原則としてRubyがSmalltalkよりLISPに似ているとの主張には強い違和感を覚えます。どちらかをよく知らないか、利益誘導か。

2010-09-28 10:54:04
Yukihiro Matz @yukihiro_matz

皆が絶賛するSmalltalkシステムですが、僅かしかない私のSmalltalk体験では全然感銘を受けなかったという。なんでなのかな。狭義の「言語」にこだわりすぎてたからかもしれない。

2010-09-28 10:55:55
sumim @sumim

@yukihiro_matz そういう意味では(専門家に面と向かってこういうのも気が引けますが―)「どちらかをよく知らない」に当てはまると思います。LISPのほうが知名度があるのでMatzLispと称したほうがウケが良い…という側面もあったかとは思いますけれど^^;>経験ほぼゼロ

2010-09-28 12:02:32
sumim @sumim

ごく初期のバージョンで石塚さんの助言がなかったらRubyや組み込みクラスがどんな構成になっていたかという「たられば」にはとても興味があります。

2010-09-28 12:06:27
Yukihiro Matz @yukihiro_matz

@sumim あんまり石塚さんからRubyのデザインについて示唆をもらったことはないです、特に初期は。coerceシステムとかは一緒に作りましたけど。

2010-09-28 12:39:30
sumim @sumim

@yukihiro_matz たしかにそれはIDEとかGUIとかへのユーザーの要求に対するあしらわれ方によく現われていると思います。もしやブロックの構文もそうだったのですか? あれがSmalltalkからの影響ではなく再発明だとすると認識を改めないと。>全然感銘を受けなかった

2010-09-28 12:14:24
Yukihiro Matz @yukihiro_matz

@sumim 「バーを使う」というのは昔読んだSmalltalkの本の影響だと思います。そこは否定しません。もっとも最初からそうだったわけではなく、いろいろと試行錯誤した結果、結局Smalltalkと同じになったという印象ですが(あんまり記号が残ってなかった)。

2010-09-28 12:41:33
sumim @sumim

@yukihiro_matz いえ、そこではなく { } でブロックを作って引数として渡すところですね。[ ] と { } の違いはありますが、これも結果的に Smalltalk 似になっただけなのですか?

2010-09-28 12:46:43
Yukihiro Matz @yukihiro_matz

@sumim 偶然です。っていうか、一種の無名関数であるブロックオブジェクトを渡すSmalltalkと、(あとでオブジェクト化できるとはいえ)メソッド呼出にコード片を付加できるRubyとでは、かなり違いませんか?

2010-09-28 12:49:23
sumim @sumim

@yukihiro_matz そうすると、そもそもブロック呼び出しには高階関数の発想はなかったとおっしゃりたいわけですか? そうでなくともSmalltalkの [:x| ] の影響を受けずに (lambda (x) ) から {|x| } を発想できたことになるわけですね。凄い!

2010-09-28 13:24:15
Yukihiro Matz @yukihiro_matz

@sumim まあ「どちらかをよく知らない」のは事実なんですが、Lispは知っててもSmalltalkは表層的な知識しかない私がデザインした言語が、よりSmalltalkに似ているというのは、なんだかおかしなものですね。平行進化?

2010-09-28 12:51:58
伊藤 秀和(巨大不明生物) @psychokinetica

収斂って奴ですね@yukihiro_matz @sumim まあ「どちらかをよく知らない」のは事実なんですが、Lispは知っててもSmalltalkは表層的な知識しかない私がデザインした言語が、よりSmalltalkに似ているというのは、なんだかおかしなものですね。平行進化?

2010-09-28 13:26:33
Yukihiro Matz @yukihiro_matz

@sumim 高階関数の知識は(Lispは知ってますから)当然ありました。ただ、Rubyのブロックの発想の元はCLUのイテレータで、高階関数的な意味合いを与えたのは私のデザインです。Smalltalkの影響はあったとは思うんですが、私の意識としては限定的です。

2010-09-28 14:28:25
成瀬 @nalsh

@sumim まつもとさんの CLU についての話お読みになりました? http://bit.ly/d5YwQ7

2010-09-28 13:00:24
Masayoshi Takahashi @takahashim

@sumim 昔のRubyでは、ブロック呼出は「イテレータ」と呼ばれていて、イテレーションが主用途とされていました。イテレータはSatherの影響を受けてると言われていました

2010-09-28 13:39:20
Yukihiro Matz @yukihiro_matz

@takahashim Satherのイテレータは、なんというか、内部イテレータと外部イテレータの中間のような妙なイテレータなんですよね。Rubyのとはだいぶ違います。どっちかっていうとCLUのイテレータかな。

2010-09-28 15:14:35
sumim @sumim

@yukihiro_matz なるほど。イテレーターと高階関数、そして既存言語の { } を組み合わせてブロックと呼ぶようになったら、呼称や(LISPの高階関数の記述からすれば)簡潔な記法がSmalltalkと偶然似てしまった…ととらえておくのが正しそうですね>Rubyのブロック

2010-09-28 14:36:23
Tomoki MAEDA @tmaeda

@sumim なんか初期の頃のRubyのブロックって、高階関数ってイメージじゃなく、テレータに渡すコード片というところから始まったようなイメージがあります。for(...){ ... }とかwhile(...){...}みたいな。

2010-09-28 13:34:41
sumim @sumim

いずれにせよ、まつもとさんがSmalltalkからの影響が大きいとは認めたくない(そもそも、ご本人としてはその事実がないので認めるも何もない)ことはよく分かりました。Smalltalk似に見える特徴は原則、再発明で、結果的に偶然そう見えるだけなのですね。個人的には驚きの事実でした

2010-09-28 12:58:44
sumim @sumim

@yukihiro_matz なるほどそれは面白い理屈ですね。>Smalltalkを表面的にしか知らない者がSmalltalkによく似たものを作れるはずがない

2010-09-28 12:59:43
Yukihiro Matz @yukihiro_matz

いや、そこまでは言ってません。知識が全くなかったわけではなく、直接・間接にSmalltalkの影響があるのは事実ですし。RT @sumim: なるほどそれは面白い理屈ですね。>Smalltalkを表面的にしか知らない者がSmalltalkによく似たものを作れるはずがない

2010-09-28 14:21:47
sumim @sumim

@takahashim @tmaeda @nalsh とすると、イテレーターの考え方と通常の言語の書式の{ }と(ちょっとだけSmalltalkから|を借りて―)を組み合わせて生じたのがRubyのブロックで、Smalltalkのブロックと名前もシンプルさも使い方も似たのは偶然?

2010-09-28 13:46:40
Tomoki MAEDA @tmaeda

@sumim あぁ、もちろん、最初はイテレータと呼ばれていたのが、途中からブロックという呼び方に変わって行ったのでどこかで誰かからツッコミor提案があったのだろうとは思います。ので、完全に偶然というわけではないと思います。

2010-09-28 14:01:21