From: matz@... (Yukihiro Matsumoto) Date: 2000-07-10T14:36:42+09:00 Subject: [ruby-list:23774] Re: TCPServer & Thread まつもと ゆきひろです In message "[ruby-list:23770] Re: TCPServer & Thread" on 00/07/10, Hideto ISHIBASHI writes: |Ruby と Smalltalk を比較して、「Ruby では制御構造まで |オブジェクトにはなっていない」といわれます。 ま、わざとですけどね。 |というのは、'while' は「すべてはオブジェクト」 |の例外ですよね。 あんまり、例外じゃないですね。以下のものは全部オブジェクト (あるいはメッセージセンド)じゃないです。 * if/unless * while/until * break/next/redo/retry * begin/rescue/ensure * クラス、モジュール、メソッド定義 * 代入(これはSmalltalkもか) * リテラル ちゅーわけで、Rubyではメッセージセンドだけで構成されているも のは構文要素としてはむしろ小数派です(適用範囲は広いですが)。 逆にSmalltalkでも代入や定義やリテラルはメッセージセンドじゃ ないわけですし、制御構造にいたってはメッセージセンドのふりを しているだけで、実装としては全然メッセージセンドしてませんか ら、あんまり偉そうに言われたくなかったりします。 |'loop do end' は Smalltalk の |'a > b ifTrue: [...]' と同じ仕組みですよね。 |ブロックつきのメッセージ渡しですから。 [ a > b ] whileTrue: [...] でしょうね。 a > b whileTrue: [...] じゃダメなんです。ね、嫌でしょう? |「制御構造もオブジェクト(メッセージ渡し)」 |だと、欠点はパフォーマンスでしょうか。 欠点はパフォーマンスよりもむしろ醜いことでしょう。 # 偏見入ってます。 まつもと ゆきひろ /:|}