
Rubyは要するにメッセージのないSmalltalkと言ったところで、結局はLispに行き着くのか。 RT @goodmad 「いまRubyがブームだが、Rubyは要するにカッコのないLisp」(竹内郁雄)
2010-09-28 03:14:21
メッセージ性のない(つまり主張・思想的背景の薄い)Smalltalkと空目。それなら納得ですが原則としてRubyがSmalltalkよりLISPに似ているとの主張には強い違和感を覚えます。どちらかをよく知らないか、利益誘導か。>Rubyは要するにメッセージのないSmalltalk
2010-09-28 10:43:32
少なくとも私はSmalltalkよりLispの方をよく知ってますけどね。Smalltalk経験ほぼゼロだし。RT @sumim: 原則としてRubyがSmalltalkよりLISPに似ているとの主張には強い違和感を覚えます。どちらかをよく知らないか、利益誘導か。
2010-09-28 10:54:04
皆が絶賛するSmalltalkシステムですが、僅かしかない私のSmalltalk体験では全然感銘を受けなかったという。なんでなのかな。狭義の「言語」にこだわりすぎてたからかもしれない。
2010-09-28 10:55:55
@yukihiro_matz そういう意味では(専門家に面と向かってこういうのも気が引けますが―)「どちらかをよく知らない」に当てはまると思います。LISPのほうが知名度があるのでMatzLispと称したほうがウケが良い…という側面もあったかとは思いますけれど^^;>経験ほぼゼロ
2010-09-28 12:02:32
ごく初期のバージョンで石塚さんの助言がなかったらRubyや組み込みクラスがどんな構成になっていたかという「たられば」にはとても興味があります。
2010-09-28 12:06:27
@sumim あんまり石塚さんからRubyのデザインについて示唆をもらったことはないです、特に初期は。coerceシステムとかは一緒に作りましたけど。
2010-09-28 12:39:30
@yukihiro_matz たしかにそれはIDEとかGUIとかへのユーザーの要求に対するあしらわれ方によく現われていると思います。もしやブロックの構文もそうだったのですか? あれがSmalltalkからの影響ではなく再発明だとすると認識を改めないと。>全然感銘を受けなかった
2010-09-28 12:14:24
@sumim 「バーを使う」というのは昔読んだSmalltalkの本の影響だと思います。そこは否定しません。もっとも最初からそうだったわけではなく、いろいろと試行錯誤した結果、結局Smalltalkと同じになったという印象ですが(あんまり記号が残ってなかった)。
2010-09-28 12:41:33
@yukihiro_matz いえ、そこではなく { } でブロックを作って引数として渡すところですね。[ ] と { } の違いはありますが、これも結果的に Smalltalk 似になっただけなのですか?
2010-09-28 12:46:43
@sumim 偶然です。っていうか、一種の無名関数であるブロックオブジェクトを渡すSmalltalkと、(あとでオブジェクト化できるとはいえ)メソッド呼出にコード片を付加できるRubyとでは、かなり違いませんか?
2010-09-28 12:49:23
@yukihiro_matz そうすると、そもそもブロック呼び出しには高階関数の発想はなかったとおっしゃりたいわけですか? そうでなくともSmalltalkの [:x| ] の影響を受けずに (lambda (x) ) から {|x| } を発想できたことになるわけですね。凄い!
2010-09-28 13:24:15
@sumim まあ「どちらかをよく知らない」のは事実なんですが、Lispは知っててもSmalltalkは表層的な知識しかない私がデザインした言語が、よりSmalltalkに似ているというのは、なんだかおかしなものですね。平行進化?
2010-09-28 12:51:58
収斂って奴ですね “@yukihiro_matz @sumim まあ「どちらかをよく知らない」のは事実なんですが、Lispは知っててもSmalltalkは表層的な知識しかない私がデザインした言語が、よりSmalltalkに似ているというのは、なんだかおかしなものですね。平行進化?
2010-09-28 13:26:33
@sumim 高階関数の知識は(Lispは知ってますから)当然ありました。ただ、Rubyのブロックの発想の元はCLUのイテレータで、高階関数的な意味合いを与えたのは私のデザインです。Smalltalkの影響はあったとは思うんですが、私の意識としては限定的です。
2010-09-28 14:28:25
@sumim 昔のRubyでは、ブロック呼出は「イテレータ」と呼ばれていて、イテレーションが主用途とされていました。イテレータはSatherの影響を受けてると言われていました
2010-09-28 13:39:20
@takahashim Satherのイテレータは、なんというか、内部イテレータと外部イテレータの中間のような妙なイテレータなんですよね。Rubyのとはだいぶ違います。どっちかっていうとCLUのイテレータかな。
2010-09-28 15:14:35
@yukihiro_matz なるほど。イテレーターと高階関数、そして既存言語の { } を組み合わせてブロックと呼ぶようになったら、呼称や(LISPの高階関数の記述からすれば)簡潔な記法がSmalltalkと偶然似てしまった…ととらえておくのが正しそうですね>Rubyのブロック
2010-09-28 14:36:23
@sumim なんか初期の頃のRubyのブロックって、高階関数ってイメージじゃなく、イテレータに渡すコード片というところから始まったようなイメージがあります。for(...){ ... }とかwhile(...){...}みたいな。
2010-09-28 13:34:41
いずれにせよ、まつもとさんがSmalltalkからの影響が大きいとは認めたくない(そもそも、ご本人としてはその事実がないので認めるも何もない)ことはよく分かりました。Smalltalk似に見える特徴は原則、再発明で、結果的に偶然そう見えるだけなのですね。個人的には驚きの事実でした
2010-09-28 12:58:44
@yukihiro_matz なるほどそれは面白い理屈ですね。>Smalltalkを表面的にしか知らない者がSmalltalkによく似たものを作れるはずがない
2010-09-28 12:59:43
いや、そこまでは言ってません。知識が全くなかったわけではなく、直接・間接にSmalltalkの影響があるのは事実ですし。RT @sumim: なるほどそれは面白い理屈ですね。>Smalltalkを表面的にしか知らない者がSmalltalkによく似たものを作れるはずがない
2010-09-28 14:21:47
@takahashim @tmaeda @nalsh とすると、イテレーターの考え方と通常の言語の書式の{ }と(ちょっとだけSmalltalkから|を借りて―)を組み合わせて生じたのがRubyのブロックで、Smalltalkのブロックと名前もシンプルさも使い方も似たのは偶然?
2010-09-28 13:46:40
@sumim あぁ、もちろん、最初はイテレータと呼ばれていたのが、途中からブロックという呼び方に変わって行ったのでどこかで誰かからツッコミor提案があったのだろうとは思います。ので、完全に偶然というわけではないと思います。
2010-09-28 14:01:21