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

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

@sumim はい、そういう認識でいます。もし無名関数という所から始まったのなら、block := [:a :b | a + b]. みたいなことができて良いんですが、Rubyのブロックはこういうことできないですよね(ここがもどかしいんですが)

2010-09-28 13:55:36
圡本 強 @117Florian

@sumim うわ、そうだったんですか!>まつもとゆきひろとRubyの再発明、再発見 著書「コードの世界」なんかではSmalltalkを評して「やり過ぎ」と言っていたのでてっきり影響があるもんだとばかり。

2010-09-28 13:49:14
sumim @sumim

事実は小説よりも奇なりと言いますが、かなり驚いています。

2010-09-28 13:49:25
sumim @sumim

まあでも(繰り返しになりますが)、常々、まつもとさんがRubyの特徴を紹介する際に「なんでここでSmalltalkの同種特徴について言及がないのかな-(あるいはLISP、もしくは他の言語を引き合いに出すかなー)」と不思議に思っていたことの謎は解けました。ありがとうございます。

2010-09-28 13:55:06
sumim @sumim

ただ(負け惜しみの捨て台詞みたいで見苦しいですが―)、S式もマクロも、そして今回明らかになった高階関数も無しで、これはMatzLispだ!というセンスはやっぱりちょっといただけません。

2010-09-28 14:06:40
Tomoki MAEDA @tmaeda

@sumim それには同意しますw 私もRubyがLispに似ていると感じた事はほとんどないです。

2010-09-28 14:09:13
Yukihiro Matz @yukihiro_matz

@sumim まあ、MatzLispうんぬんはあくまでもジョークですから。かつ、私オリジナルというわけでもありませんし。拡散している時点で同罪でしょうが。

2010-09-28 14:19:53
Yukihiro Matz @yukihiro_matz

Smalltalkに対してわずかな知識しかなく、その背後の思想・哲学について実感することがなかった人が、Lispや表層的なSmalltalkの知識から、Smalltalk哲学を再現するような言語を作れるのだとすると、その哲学とはなにか、というのは私自身にも分からないところです。

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

@yukihiro_matz 「表層は理解していた」というところがミソで、なぜSmalltalkの思想や哲学を理解できなかったジョブズらが、ほんの表層のGUIを拝借するだけでMacのような良さを言語化出来ないシステムを作り得たか(←つっこみどころ多数)にも通じるような気もします。

2010-09-28 15:22:41
sumim @sumim

単純に、「RubyはSmalltalkか?」ということであれば、それは断じて違うと思うね。それは「RubyはLISPか?」以上にそう思うダブルスタンダード。

2010-09-28 18:14:19
sumim @sumim

以前どなたかが書いておられましたが、Smalltalkというのは育てゲーなのですね。環境といかに対話し、それをどう(自分好みに)育てるか。アプリ開発もそれに準じます。で、言語としてのSmalltalkやそれを用いたコーディング(この意識も希薄ですが)はそれをする手段に過ぎない―と

2010-09-29 10:09:10
Yuki Yugui Sonoda @yugui

http://togetter.com/li/54495 Smalltalkに関して私が経験から感じたのは、あれは本当に「言語じゃない環境だ」ということで、しかし、だとするとプログラマが"言語"を操るという前提が古びて、時代がSmalltalkに追いついてきてるのかも

2010-09-28 22:35:47
ブスコパン @e_angels

@e_angels このあたりからイテレータの話題です

2010-09-29 11:38:01
sumim @sumim

@yukihiro_matz この機会にぜひ質問させていただきたいのですが、ブロックがイテレーターの発想からとしてeachというメソッド名はどこから来たのですか? てっきりSmalltalkの慣習においてブロックに同名変数を使うところにヒントを得たと思っていたのですが…。>限定的

2010-09-28 15:00:53
Yukihiro Matz @yukihiro_matz

@sumim あれ? どこからだっけ? Rubyの前に卒論で書いた言語もすでにeachメソッドを使ってたしな。shのforeachと、Smalltalkのeachからなのかな。でも、Smalltlakのeachはメソッドじゃないよね(メソッドはdo:)

2010-09-28 15:08:04
sumim @sumim

@yukihiro_matz この流れからですと、cshのforeachが濃厚ですね。ありがとうございます。>Rubyのeachの元ネタ

2010-09-28 15:25:18
Shugo Maeda @shugomaeda

昔のRubyのイテレータの文法はdo [1,2,3].each using x; print(x, "\n") endとかだから、あまりSmalltalkっぽくない

2010-09-28 18:54:10
Shugo Maeda @shugomaeda

forの文法は変わってないから(厳密にはend forと書けなくなったけど)、互換性を気にする人はforを使うべき

2010-09-28 18:56:19
sumim @sumim

@shugomaeda 確かに。これがいつ、どういう経緯でSmalltalkっぽく変化したのでしょうか?(いや、今となってはSmalltallk似というのは「偶然」とのことですが―) ご存じですか?>昔のRubyのイテレータの文法は―、あまりSmalltalkっぽくない

2010-09-29 10:18:10
Shugo Maeda @shugomaeda

@sumim @yukirhiro_matzさんに聞かないとちょっとわかりません。イテレータの戻り値を取れるようにしたかったのかなと推測していますが

2010-09-29 10:30:30
Yukihiro Matz @yukihiro_matz

この時点ではループ抽象化しか考えていなかったので。考察が進むにつれ今の文法に変化しました。RT @shugomaeda: @sumim @yukirhiro_matzさんに聞かないとちょっとわかりません。イテレータの戻り値を取れるようにしたかったのかなと推測していますが

2010-09-29 10:46:20
sumim @sumim

@yukihiro_matz @shugomaeda ありがとうございます。初期のeachの使われ方が分かって面白い例でもありますね。

2010-09-29 10:50:26
みょうが 🇺🇦 @mrkn

. @yukihiro_matz@sumim の生会話にリアル参加したい人は札幌Ruby会議03に参加するといいよ http://regional.rubykaigi.org/sapporo03

2010-09-28 15:37:21