世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

2006年10月10日

「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」について

fromdusktildawnさんの分裂勘違い君劇場「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」を読んだ。

こうして議論が膨らんで、何が何でもRubyとか、何が何でもCLOSとか、そういう誤読を防止する仕組みができあがっていくことは喜ばしい。それ以上に、これを機会にRubyに関心を持つ人がでてきたり、JavaScriptを再発見したりする人がでてくるようなことがあったならば、喜ばしい。「騒げ騒げ、もっと騒げ」

のだけれども、取り合えず言うべきことは言っておこう。

getter/settterネタ

これは実はちょっと心外。「実務上、メタプログラミングは便利だよ」と言いたくてその一例たるattr_accessorの説明の直後に

ですから,このようなメソッドを自分で作ることもできます

...

少しでも似たようなコードの反復があるならばメタプログラミングによって実装や保守の手間を軽減できます\

getter/setterのようにあまり変化する余地のないものであればまだよいですが,仕様に応じて変更の必要が出てきた場合,その変更をコードに漏れなく反映するのは大変です

と書いた私としてはgetter/setterという例がやはり良くなかったなーと。getter/setterに注目して、そこだけに注目する議論は、私の説明不足が原因とは言え嬉しくないなーと。

長すぎて削られてしまったRuby/AJPのクラス群自動生成の例を、やっぱり何が何でも紙面に出してもらうべきだったかなぁと。

getter/setterはC#ではわざわざブロパティ定義構文を作って楽にしてるわけだし、そもそもIDEがあればJavaでも全然問題ないというのはおっしゃる通り。なんだけれども、分裂勘違い君劇場「Rubyの生産性の高さはどこまで本当か?」において

Rubyのシンプルなプロパティ定義として、以下のようなサンプルがあり、setterとgetterをわざわざ記述しなければならないJavaの冗長さと比較していますが

という風にメタプログラミングの文脈から切り離してわざわざこれをクローズアップするのは「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」で自身が指摘している引用トリックそのものだろうと。

まあ、3点断りを付けると、

  • これは分裂勘違い君劇場の次のネタかもしれなくて、そうだとしたら申し訳ない。突っ込みどころを残してあとで自分で突っ込んで読者の視点を多様化/深化させるのはあの人の芸風だから。
  • あちこちで同様のgetter/setterにフォーカスした読み方をしている人がいることから、そもそも「なぜ仕事で使うとうれしいのか」における私の説明が至らなかったのは確実だろう。
  • getter/setterをメタプログラミングの文脈から切り離すのがアンフェアだとしても、fromdusktildawnさんの「『メタプログラミングが強力だからRubyが生産性が高い』というのはどこまで本当か?」という指摘のほうは否定されたわけではない。

「Rubyの生産性の高さはどこまで本当か?」は、私が期待していた突っ込みそのもので、しかもそれを分裂勘違い君劇場がやってくれたというのは嬉しい限りなんだけれども、getter/setterネタだけじゃなく「その他、細々とした部分」の節だけはどうにも不満がいっぱいで。

実際には、Javaでは、以下のようにカウンタを使わない、シンプルなループ記述ができます。

という記述も、だから私は脚注にそう書いてるじゃん。とか。これも引用のトリックだぁな。

Matzは特殊条件を外しているか

Matzにっきの記事の引用部だけ見れば「Rubyの作者松本氏がありもしない錯誤をでっちあげて批判している件」が指摘するように、「誤読を招く」「本来よりもあまりに強い主張をしているようによませる」アンフェアな引用だなぁ。引用トリックだなぁ。

でも、じゃあ、まつもとさんの言ってることは無効なのかというとわからない。

それは結局「Rubyの生産性の高さはどこまで本当か?」でfromdusktildawnさんが指摘する、(メタプログラミングによるエレガントな解決は)

  • 「圧倒的多数のプログラマが日々格闘している、圧倒的多数のアプリケーションでは、生産性も気持ちよさも、実際には、それほどかわらんですよ」
  • 「研究室レベルのプログラミングは別ですよ」

というのが真かどうかに掛かるかなぁと。もしこれが偽だとすれば、まつもとさん言うfromdusktildawnさんが「(メタプログラミングを必要とする局面において)些細な文法の違いから来る記述力を無視しすぎ」と言う指摘は、「研究室レベルで」というコンテキストを外しても有効となる。

私の実感では偽なんだけど、客観的根拠を示せないからなんとも。

それから、たぶん、まつもとさんの発言はブロック構文にも掛かっている。何しろ私がブロック構文を最初に理解したときにまず思ったのが「何でlambdaじゃダメなの?」だし、fromdusktildawnさんの主張も分かる。匿名クラスでできるのは分かってる。delegateでできるのは分かってる。というか、lambdaかわいいよlambdaの一言に尽きる。

でも、使ってみて思ったのは、Rubyのブロック構文がメソッド呼び出しの括弧を省略可能というところと結び付いて「記述力」をもたらしてるということ。いつも似たような例で恐縮だけれどもRakeとか。Rakeを見るまで、私ゃRubyの記述力がそれほど優れていると思ってなかったし。それから、その種の記述力の差は大きいと思えばこそ、(どうも私が当初、良く吟味せずに舞い上がった程簡単な話ではない模様だけれども)矢野勉さんの発想は素晴らしいと思ったのだ。

トラックバック

http://yugui.jp/articles/526/ping

現在のところトラックバックはありません

コメント

分裂勘違い君 (2006年10月11日 15時41分31秒)
<p>&gt;&gt;<br />Rubyのブロック構文がメソッド呼び出しの括弧を省略可能というところと結び付いて「記述力」をもたらしてるということ。<br />&gt; <br />「実務上、メタプログラミングは便利だよ」と言いたくてその一例たるattr_accessorの説明の直後に<br />&gt;<br />よく使われるメタプログラミングの機能としては「attr_reader」や「attr_accessor」があります。Javaで開発しているとき,リスト1のようにデータにアクセスするためのgetterやsetterをいちいち書くのにうんざりしたことはないでしょうか。Rubyでは,オブジェクトのプロパティを取得/設定するメソッドを,リスト2上のように簡単に記述できます。<br /><略><br />ですから,このようなメソッドを自分で作ることもできます。<br />&gt;<br />だから私は脚注にそう書いてるじゃん。<br />&amp;lt;&amp;lt;<br />については、脚注を読んでなかったもので(笑)。失礼しました。<br />でも、これも、脚注まで全部読まずにレスをする人って、そこまでひどい手落ちなんですかね?<br />少なくとも、「明らかに脚注まで全部読んで分かっているくせに、脚注を読んでいないフリをした」という悪質なケースだったというには、無理があるような気がしますけど。</p> <p>というか、yuguiさん、冷静に見て、明らかに悪質な曲解引用をしているケースと、単なる誤読は、感覚的に区別がつきませんか?</p> <p>その区別がつかない、ということであれば、オイラには、これ以上言うことはないですね。<br /></p>
Yugui (2006年10月12日 00時00分11秒)
<p>&gt; 感覚的に区別がつきませんか?</p> <p>うんにゃ。やっぱりねー、というところです。</p> <p>「脚注まで全部読まずにレスをする」のが「ひどい手落ち」とも思いませんし、事情は承知しました。</p> <p>「やっぱりねー」と思うくらいなので拡張forのほうの件は言わなくてもいいことでしたね。言わなくてもいいことを言ってしまったのは、やっぱり、プロパティのほうの扱いが不満で感情的になっていたかも知れません。申し訳ありません。</p>
_ (2008年11月14日 16時47分57秒)
<p>&gt;「何でlambdaじゃダメなの?」<br />この答え知りたいです。</p>
blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system