[#5880] "Linux Journal Vol.6" carries an article on Ruby — Shin-ichiro HARA <sinara@...>

原です。

16 messages 1998/01/19
[#5881] Re: "Linux Journal Vol.6" carries an article on Ruby — matz@... (Yukihiro Matsumoto) 1998/01/19

まつもと ゆきひろです

[#5905] win and unix, and so on — TAKAHASHI Masayoshi <maki@...>

高橋と申します。はじめまして。しばらくROMしてました。

27 messages 1998/01/20
[#5906] Re: win and unix, and so on — matz@... (Yukihiro Matsumoto) 1998/01/20

まつもと ゆきひろです

[#5912] Re: win and unix, and so on — WATANABE Hirofumi <watanabe@...> 1998/01/20

わたなべです.

[#5922] Re: win and unix, and so on — Shin-ichiro HARA <sinara@...> 1998/01/20

原です。

[#5951] How to use TkMenu ? — Kikutani Makoto <kikutani@...>

きくたにです。

16 messages 1998/01/21
[#5952] Re: How to use TkMenu ? — matz@... (Yukihiro Matsumoto) 1998/01/21

まつもと ゆきひろです

[#6023] Comparison with Other Languages (Re: [python-ml-jp 54] Re: Reasons why I prefer to use Python) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

8 messages 1998/01/26

[#6055] Ruby連載 第3回 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

68 messages 1998/01/28
[#6057] Re: Ruby 連載 第 3 回 — Kikutani Makoto <kikutani@...> 1998/01/28

きくたにです。

[#6060] Re: Ruby 連載 第 3 回 — matz@... (Yukihiro Matsumoto) 1998/01/28

まつもと ゆきひろです

[#6073] Re: Ruby連載 第3回 — hisanori@... 1998/01/28

松尾です。こんばんは。

[#6089] Re: Ruby連載 第3回 — matz@... (Yukihiro Matsumoto) 1998/01/29

まつもと ゆきひろです

[#6119] man/date/time — Tadayoshi Funaba <tadf@...>

こんにちは、ちょっと訊きたいことがあります。

37 messages 1998/01/29
[#6128] lib/date.rb (Re: man/date/time) — matz@... (Yukihiro Matsumoto) 1998/01/30

まつもと ゆきひろです

[#6136] Re: man/date/time — keiju@... (石塚圭樹 ) 1998/01/30

けいじゅ@日本ラショナルソフトウェアです.

[#6155] Re: man/date/time — Tadayoshi Funaba <tadf@...> 1998/01/31

>すいません. ruby-devにだけポストしていました.

[ruby-list:6089] Re: Ruby連載 第3回

From: matz@... (Yukihiro Matsumoto)
Date: 1998-01-29 02:54:12 UTC
List: ruby-list #6089
まつもと ゆきひろです

In message "[ruby-list:6073] Re: Ruby連載 第3回"
    on 98/01/28, hisanori@sitc.toshiba.co.jp <hisanori@sitc.toshiba.co.jp> writes:

|松尾です。

|> もちろんRubyではこういうことはしようと思ってもできないわけですが、 イテレー
|> タを使うのに比べて面倒ですね。これは、 
|
|この辺を読んで、でも、それなら、と疑問を持ってしまいました。Rubyでは出
|来ない、のならなんで出来るようにしなかったんだろう、ということです。
|
|別にイテレータなんて(僕には)あまり馴染みの無い概念より、関数には関数
|(或いは関数ポインタ?、関数の参照?、ラムダ関数?、無名関数?、引数の取れ
|るブロック?)も引数として渡せますよ、という考え方及び実装の方が理解しや
|すいと思うのですが如何でしょう。

まず,Rubyに関数ポインタがないのはSmalltalk的とでもいうよう
な古典的オブジェクト指向モデルを採用しているからです.この辺
は関数ポインタをベースにしているオブジェクト指向モデルの
Pythonとは大きく違うところです.どっちが良いかと言うのは主観
ですが.

そういうモデルなので,単純には「関数ポインタを渡せば良いや」
で済まなかったのが,第1の理由です.なんらかの方法で関数ポイ
ンタに当たるものを生成できないといけないわけです.

で,Smalltalkでは「ブロックオブジェクトを引数にする」という
方法を選び,Rubyでは「イテレータブロックを暗黙の引数にする」
という方法を選んだわけです.

では,なぜブロックを直接の引数にする方法を選ばず,イテレータ
ブロックを選んだかというと

  * forが実装しやすい

    とっつきやすさのためfor文が欲しかったのですが,ブロック
    を渡すというセマンティックスではちょっと意味的に??な部
    分が出て来ます.

  * この仕様を設計した時点では「制御構造を実装する手段」とし
    てイテレータを考えていて,その目的のためにはブロックを引
    数にとるような

        foo(arg, lambda{ ... })

    よりも,イテレータブロックを暗黙の引数として渡す

        foo(arg) { ... }

    の方が表現したいものを直接表現している気がした.

#   この「表現したいものを直接表現する」という点はRubyの言語
#   仕様でわりと重視されています.いろんなしがらみでうまくいっ
#   てない部分もあるみたいですけど.

  * 昔Actorという言語があってそれなりに影響を受けたのですが,
    その言語ではブロックを明示的な引数として渡すという仕様だっ
    たのですが,ブロック生成の括弧 { } と引数の括弧 ( ) が混
    在して結構美しくない印象があった.SmalltalkやLispならと
    もかく,「通常」言語風の外見を持つ言語と明示的なブロック
    引数は似合わない気がした(完全に個人的な意見ですが).

    たとえば,Array#sortの場合

	ary.sort{|a,b| a<=>b}

    の方が
	
	ary.sort(lambda{|a,b| a<=>b})

    よりもストレートで良いと思いました.

その後,lambda{}(あるいはProc.new{})を使ってクロージャを生成
できるようになったので,やりたければ引数としてクロージャを渡
せるし,それ以上いろいろする気がなかったというのも正直なとこ
ろです.
                                まつもと ゆきひろ /:|)

In This Thread