2010-06-20
「相手が嫌い」っつー感情が言動の起点になってるんだから、議論の相手になるわけがない。
misc | | ![]()
なんか相手から新しいコメントがあったのでいったん保留。つーか、今回もまた言いたいだけ言って勝手に終了宣言してる。まーた書き逃げかよ。もういいけど。
追記:結局、突っかかってきたのは『カチンと来た』からだとさ。カチンと来たから内容もろくに読まず、相手の主張も汲み取らず、カチンと来た箇所に固執してたっつーのが真相。アホらしい。今回の件はワシの人間力を試すための試験だったんだろう。見事不合格だけどな!!
いろいろ言い訳してるようだけど、もともとの行動理由が「kwatchが嫌い」という感情が起点になっているんだから、議論になるわけがない。なんせ彼は何年も前からことあるごとにワシんとこに粘着し続けてきたからね。相当根は深いと思うよ。
2010-06-19
るびま0030号
ruby | | ![]()
Sapporo での自分の発表がサマリになって載ってたんだけど、なんというか、抜けはないのに多すぎるところもなく、まさに「過不足なし」という言葉がぴったりな、完璧なまとめだった。発表者から見て文句つけるところがない。これ書いた人はきっと優秀。お疲れさまでした。
ところでまた記事が少なくなってきましたね。
追記:言い訳になるけど、上の文は記事が少ないことを揶揄する意図ではなく、「記事が少なくなってきましたね。前みたいにまた書いちゃっていいですか?」という意図でした (「前みたい」というのは、一時期るびまの記事が極端に減少したことがあって、そのときに記事を連投させてもらったことを指しています)。ただ軽率な書き方だったので、不愉快に感じた方がいたら申し訳ありませんでした。
RSpec のすごいところ
(注: 以下の内容は、RSpec ユーザの間で広まっていることでもなく、もちろん RSpec 開発チームの公式な見解でもなく、あくまでワシの個人的な見解です。)
RSpec のすごいところは、コードに対してではなく仕様に対してテストを書くことを明確にしたことだと思う。何を今さらと言われそうだけど、今さらになってようやく気づいたニワトリ頭ですまんかった。
ワシも最初は、「assert_equal(expected, actual)」のかわりに「actual.should == expected」と書くかっこよさに目を奪われて、テストコードを自然言語に近い形で記述するのが RSpec のすごいところだと勘違いしてたし、それが「TDD (Test Driven Development)」から「BDD (Behaviour Driven Development)」へという新しい潮流だと勘違いしてた。
2010-06-18
Twitter の 3 パーセントは悪意でできてます
以前、Matz日記が更新されないのはまつもとさんがTwitterを始めたからと聞いて「matz twitter」でぐぐったときから「そうじゃないかなー」と思ってたけど、あるいはひがさんからありがたいお言葉を頂戴したときも「そうじゃないかなー」と思ったけど、やっぱりTwitterって本人のいないところで気軽に陰口をたたきやすよね。
Twitterは、ちょうど会社のタバコ部屋みたいなもの。あるいは女子社員が集まる給湯室。仲間内が集まって、情報交換という名のうわさ話や他人の陰口をする場所。
以前、えらい粘着してきた彼が、Twitterでもネチネチやってた。
通りすがり
@_ko1 くんはYARVの中の人ですし、@kmizu くんもそれを知っているハズです(面識もあると思います)。それを無名の人と書くのは乱暴かと...僕の読み違い?
通りすがり2
文中の「無名の相手」というのはkwatchさんご自身を指してらっしゃるのだと私は理解しましたが。
kmizushima
色々コメントはありますが、まずはなんでkなんとかさんとかぼかした書き方したのかについての釈明を。といっても、理由は単純で、以前kwatchさんと議論したときの経験から、今回の件で同様に反論しても、どうせまともな議論にはならんだろうと思っていたのです。で、不毛な議論はしたくなかったので、Twitterで愚痴を書くような形になりました。正直、今でもどうせまともな議論にはならないだろうという思い自体は変わっていませんが、名前をぼかして批判する辺りは、確かに陰口としか言いようが無かったですね。その点は、批判されても当然だと思います。Twitterで書くことそのものを陰口とは思いませんが(公開されている言説ですし。トラックバック機能などが無いのが痛いところですが)、今後はリンク先と名前を明示した上で批判するように心がけたいと思います。
ただ、本論に関しては色々悪意めいたものを感じるので、各論ごとにここで反論させていただきたいと思います。
> しかし『shootoutのベンチマークも一応アプリケーション』か・・・。その感覚は世間と乖離しているんじゃね?
shootoutのコードは、小さいものではありますが、よくある数値計算のプログラムが主な対象になっています(現在、実際にこのような数値計算が行われているかはともかくとして)。数値計算のプログラムなどアプリケーションとは認めないという立場でなら話は別ですが、私はそうういう立場を撮らないので、一応、アプリケーションと呼ぶことに問題は感じません。
> あと『スクリプト言語に有利な種類のアプリのベンチマーク』というのはまったくの勘違い。勝手に決めつけないでね。
傾向としてスクリプト言語は文字列操作が得意で、文字列操作が高速なものが多いですよね?テンプレートエンジンは、文字列処理が多いアプリケーション(ここの認識が間違っていたなら訂正します)なので、スクリプト言語に有利という言い方をしました。
> そちらが言語処理系の速度を必要以上に重視しているだけでしょ。だいたい、テンプレートエンジンが『特殊』と感じたり、『shootoutのベンチマークも一応アプリケーション』という感覚がどうなのよ?
テンプレートエンジンが特殊というのは言い過ぎだったかもしれない、というのは後で認めたのでおいときますが、shootoutについては先ほど反論したとおり。
で、
> "一致しないどころか、まるで関係ないと言っても差し支えないぐらいである。"
これが極端で無くて一体何なのでしょうか?いや、極端というか、この言説は単に間違いでしょう。分野によって、現実に言語処理系の速度とアプリケーションの速度に有意な速度差が見られる以上は。
> つーか、そんな感覚の持ち主に『偏りは無いですか?サンプル数として十分ですか?』と徹底的にディスられたワシの存在価値って。。。感覚が偏ってるのはまるっきりそっちじゃん!
この件に関して、テンプレートエンジンが特殊と断じたのは言い過ぎであり、感覚が偏っていたことは認めますが、それは以前の件でkwatchさんの感覚が偏っていないことを意味しませんね。論理的に明らかに破綻してます。あなた「も」感覚が偏ってるじゃん!という批判なら甘んじて受けますが。
> 無名の相手はボロカスにけなすくせに、有名人の意見には従うところがさすが。処世術を心得てらっしゃる。
単純に、文字列操作主体のアプリケーションがそれなりにあるので、かなり特殊ではないという意見がもっともだと思ったので、受け入れたまでですが。というかですね、matzさんとは別のテーマで思いっきり論戦したりしてますし、matzさんの意見だからほいほい従うほど権威主義じゃありませんよ。嫌いな相手だと、なんでも悪意でとらえてしまうんですね。と皮肉っておきましょうか。というか、はっきり言って中傷ですよ。
> つうか、ついさっきは自分で『shootoutのベンチマークもアプリケーション』と言っておきながら、今度は『言語処理系の速度がネックになるアプリの例を出してない』とか、矛盾してるだろ。嫌いな相手を批判したいというのが先にあって、そのために理由を考えているんだから、言うことに矛盾があっても気づかない。
えーと、文脈を読んでもらえませんか?ここで、実アプリと言ったのは、kwatchさんが言うところの実アプリという意味ですよ。
> そりゃ、嫌いな相手だからバイアスかかるのはしょうがないよ!ちなみにそういうのはバイアスじゃなくて「偏見」っていうんだよ!偏見なしに読めば、ごくごく当たり前のことしか書いてないことがわかるのに、嫌いな相手の言うことは素直に読めるわけないよね!
バイアスってのは偏見の類義語なんですが…。というのはおいといても、
> "一致しないどころか、まるで関係ないと言っても差し支えないぐらいである。"
が当たり前かと言われると…。「関係無い」言っちゃったのがポイントだってのを理解されてます?
> Matz大神がわざわざなだめてくださってる。すみません。こんなことでご迷惑をおかけするつもりではなかった。
はあ。ご迷惑というか、(matzさんと)議論してるだけであって、別にkwatchさんが気にかける類のものではないと思いますよ。
> 世間と感覚が乖離している人を相手に、Matz大神が粘り強く対応してくださってる。まさに神対応。今日からは島根に足を向けて寝れない。
これに関しては、まあ実際に感覚が乖離していたと思います。ほんとに自明な話だと思っていたので。で、複数の人に、そうじゃない(わかってない)人は多いよ、と言われたので、自分の感覚よりはそちらの方が正確だろうと思ったので、見解を改めました。
> 何なんだろうなあ、この人。JSPのコンパイル結果も知らない、動作が遅い原因の見当もついてないのに、批判だけはいっちょまえだのくらっかー。
JSPのコンパイル結果をよく知らないのは確かですが、別に今回の本論にはそれは関係しないはずですが。
> つーか、この人はアプリを作った経験があるの?こんだけ人を叩くんだから、さぞかし立派なアプリケーションを作った経験をお持ちなんでしょうなあ。これでSQLもろくに書けないような輩だったら、無責任にもほどがある。
はあ。まあ、実際に作った、アプリと言えるものと言うと、会社でバイトして作った製品がらみくらいしか無いですね。立派なアプリケーションかと言われるとあまり立派なアプリケーションじゃない気がしますねえ…(Onionとか研究で作ってるパーザジェネレータはお世辞にも立派とは言えないしなあ)。で、それと今回の本論に何の関係が?私の主張の骨子は、「言語処理系の速度とアプリの速度が関係無い、はおかしい」であって、立派なアプリを作ったことがあるかどうかは、論理的には関係無いですよね。
> 戦ってはいないよなあ。本人のいないところで叩いてるだけなんだから、そんなのは戦いとは言わない。ただの陰口。
そこでの議論の相手はkwatchさんじゃなくて、matzさんですよ。で、matzさんはまさに議論の当事者なんだから、陰口とは言わない。そんなの前後見ればすぐわかるでしょうに。なんか嫌いな相手の言うことがめちゃくちゃに見えてるのってkwatchさんの方だったりしませんか?
kmizushima
すいません。typoがあって、意味がつながらない箇所があったので、訂正。
誤:
これが極端で無くて一体何なのでしょうか?いや、極端というか、この言説は単に間違いでしょう。分野によって、現実に言語処理系の速度とアプリケーションの速度に有意な速度差が見られる以上は。
正:これが極端で無くて一体何なのでしょうか?いや、極端というか、この言説は単に間違いでしょう。分野によって、現実に言語処理系の速度とアプリケーションの速度に明らかな関係が見られる以上は。
あと、もう一つ、これは言っておかなきゃいかんなと思ったので、言わせていただきますが、
> Matz大神がわざわざなだめてくださってる。すみません。こんなことでご迷惑をおかけするつもりではなかった。
こういう言説って、最低ですよ。相手をまともじゃない奴として決め付けていないと、こういう言い方は出てきません。私がkwatchさんの言説を批判して、それにmatzさん(やささださん)が反応したのがきっかけで議論が始まっただけの話です。ただ、それだけなのに私が何かmatzさんに悪い事をしたかのような物言いは一体何なの?と思わずにはいられません。
通りすがり3
反論したいのならTwitterでやったらどう?(あまり先入観持たずに使っみようよ。ブログよりもむしろ議論向きだと思うぞ)。
ブログエントリで晒しあげみたいにする方が、陰口よりずっと悪質だと思うのだが。
通りすがり4
> ブログエントリで晒しあげみたいにする方が、
> 陰口よりずっと悪質だと思うのだが。
私もそう思います。他人を卑下して自分を保たないとやっていけないのは日本人の気質ではありますが、これを改善して行かないとこの先日本はダメになると思う。いやすでになりつつあるか。
通りすがり5
>他人を卑下して自分を保たないとやっていけないのは日本人の気質ではありますが、これを改善して行かないとこの先日本はダメになると思う。いやすでになりつつあるか。
と言って他人を卑下して自分を保たないと(ry
arton
kwatchさんも、kmizushimaさんも、傍から見ているとどちらも書き方がおもしろいし、論点のずれ具合がどえらく真摯だから、どうせなら、るびまで討論してみませんか? おれ、司会と原稿化したいな。
RubyKaigiの時にでもどうですか?
kwatch
今日は通りすがりが多いなあ。陰口はよくてブログで書くと名無しのアンチが湧くようでは、すでに日本はダメになっちゃってるよね。
kmizushima氏:
長いので明日書きます。
arton氏:
別に構いませんけど、『言語の速度 != アプリの速度』というこちらの主張は変わんないですよ。派手なのをお望みであれば殴り合いでもしましょうか?(笑
#その企画のほうが視聴率とれそうだw
shou
どっちもアホだろ。還元すれば全ては機械語で動いてんだし、言語の速度もクソも無い。要は「最も効率の良い方法を、最も簡単に記述できる」言語があるってだけの話。チューリング等価まで持ち出すのもバカバカしい
kmizushima
kwatchさん
明日書くという点については了解しました。ただ、arton氏に
> 論点のずれ具合
と書かれて、読み直してみたら、なんかズレの根本がわかってしまった気がしますので、ちょっと書いておきます。で、何がズレてたかというと
> 別に構いませんけど、『言語の速度 != アプリの速度』というこちらの主張は変わんないですよ。
これに関しては、別に私はもともと反論してないんです。Twitterのポストを冷静に一通り読んでもらえればわかるんですが、基本的に、私の主張は
『言語の速度 != アプリの速度』はおかしい
*ではなく*、
『言語の速度とアプリの速度は関係無い』はおかしい
なので、そもそも議論が噛み合ってなかった可能性があります。まず、両者が明確に違うってことはおそらく自明だと思うのですが、すれ違いをふせぐために、一応説明しておきます。前者の言明では、 *あらゆる場合に* 言語の速度はアプリの速度に関係するという事を言っているのに対して、後者の言明では、 言語の速度がアプリの速度に関係する(あるいは重要である) *場合が存在する* ということを言っています。で、後は、言語の速度がアプリの速度に重要な影響を及ぼす場合がどれぐらいあるかって話になると思いますが、これに関してははっきりとした意見は持っていません。ただ、言語処理系の速度が重要なアプリってのは今でも多いだろうって事だけは言えます。たとえば、3Dなどのゲームや、動画のエンコーダ、HPC系のプログラム、組み込み系のプログラム(特にリアルタイム性が要求される分野)、現代的な統合開発環境(EclipseやIntelliJ IDEAなど)、などなど。以前に比べて言語処理系自体が速くないとどうしようも無いという場合はかなり減っているでしょうけど、無視していい程少なくないのも確かでしょう。自分の経験で言うと、バイトでこなした案件でも、言語処理系自体が速くないと難しいだろうなというケースはいくつかありました。あとは、自分の研究の話で、色々なアルゴリズムを実装して試してみるときに、特に、遅いけど正しく動きそうなアルゴリズムのときに、遅い言語処理系だと結果が出るのに凄まじく時間がかかるので、ある程度速い言語処理系じゃないと色々なアルゴリズムを評価することが難しい、という問題もあります。
結局のところ、「関係ない」のところにカチンと来たってのが本音です。その点でこちらも感情的になっていた部分はおそらくあって、その点については謝罪します。で、もし、その部分が、単に筆が滑ったというだけなら、これ以上の議論はおそらく不毛だろうと思います。『言語の速度 != アプリの速度』という事に私は元々反論していないので。
ちなみに、テンプレートエンジンが特殊とかの話は、どちらかというと派生して出てきた論点で、matzさんらと議論する過程で言い過ぎだと気づいたので、途中で引っ込めてます。
ついでに、もう1点。以前のJava屋さん云々の時の議論ですが、ほんとに言いたかったことは、たった一つ
『Java屋さん』とひとくくりにできる程の根拠を持っていないならば、『Java屋さん』とひとくくりにして語らないでくれ。迷惑だから。
これだけです。もちろん、Java屋さんは〜という傾向があるのでは、とかそういう仮説レベルの話ならいいですよ。しかし、まるでそういう事実が所与であるかのような書き方に正直憤りを感じました。
で、以前、kwatchさんは、それに対して、おまえたちも、PHPerとかCOBOLerとか言ってるじゃん、という主旨のことをおっしゃられてましたが、それに関しては、正直、それは私じゃないから知らんとしか言いようが無いです。
Javaプログラマのコミュニティってのはあると思いますが、それは単に技術を通じてゆるくつながってるってだけの話で、別に身内でもなんでもないので、身内が変な事言ったら批判するべき、みたいな物言いはおかしいんですよ(そもそも、そういう変な事言う人と面識も無いですし)。技術者のコミュニティを何か別のものと勘違いしているように見えます。
PHPerとかCOBOLerとか蔑まれたときに憤るのは当のPHP使いやCOBOL使いの人がやればいい話です。
arton
なんか収束しそうな予感がしますが、平行線でも物干し竿には洗濯物をかけられる訳だし、とりあえずよろしくお願いします。
kmizushima
> なんか収束しそうな予感がしますが、平行線でも物干し竿には洗濯物をかけられる訳だし、とりあえずよろしくお願いします。
了解しています。ただまあ、今回の件についてはズレの原因が(少なくとも自分の中では)検討がついて、ある程度納得が行ってしまったので、るびまで討論自体はするとして、若干切り口を変えた方が有意義なものになるかもしれない、と思いました。
kwatch
> そもそも議論が噛み合ってなかった可能性があります。
私は最初から一貫して『言語の速度 != アプリケーションの速度』を主張しており、もとのエントリでも何度もそう書いてます。議論が噛み合ってなかったんじゃなくて、そちらが勝手に誤読してただけですよね。
> 結局のところ、「関係ない」のところにカチンと来たってのが本音です。
全体の主張を読まずに、自分が「カチン」ときた部分だけ取り出して執拗に攻撃したくせに、よくそれで「(kwatchとは)まともな議論ができない」と言いましたね。そのくせ人前では『kwatchさんに悪意は持ってるわけではない』ときれいごとですか。すごいや。
> 『Java屋さん』とひとくくりにできる程の根拠を持っていないならば、『Java屋さん』とひとくくりにして語らないでくれ。迷惑だから。
根拠は示しましたよ。読んでるかどうか知りませんが。サンプル数もSUNとIBMとOracleと富士通の社員約30名と回答しています。そちらこそどんな回答で満足するのか聞いても答えないじゃないですか。あのときもそちらは何の数字も示さずに文句つけるばかり。自分で「200X年におけるY億円以上のJava案件ではEJBはわずかZ%しか使われてなかった」というデータを出せば済むのに何もしない。今回もこちら側は測定データで示したのに、そちらはJSPのコンパイル結果を見ることすらしてないじゃないですか。めんどくさいことは自分では決してせずに相手に要求してばかり。それで「まともな議論ができない」とかふざけすぎ。
> それに関しては、正直、それは私じゃないから知らんとしか言いようが無いです。
都合いいですね。批判された相手がそれで納得すると思いますか?
今の言い分は、たとえば記者クラブ制度が批判にさらされているときに、新聞社の記者が「ワシは政治家担当じゃないからシラネ、ケンカイネー」と発言するようなものです。傍から見れば同じ側の人間なのに、本人たちは当事者とはまるで思ってない。
#んー、そうか、だからあれだけ批判されてもマスコミは自分のこととは思ってなく他人事だと思ってるんだ。なんかすごい納得した。ありがとう >「それは私じゃないから知らん」発言
なんか、自分で勝手に誤読して言いたい放題攻撃したあげく、自分で納得できたから終了!とか、なんなんだろうなあ。むちゃくちゃけったくそ悪いわ。
これ、ドッキリか何かなの?実はこっそり試験官がいて、ワシの人間力が試されているの?勝手に終了されたということは人間力試験の結果が出たというで、そしてワシも生島氏のようにクビにされるの?
2010-06-16
「disる」と「指摘する」は違う・・・よね?
misc | | ![]()
cgi.rbをあんまり意識していないRubyistがPHPをdisれないのだとしたら、それはなんか「自分が完全完璧じゃないと、人を指摘してはいけない!」ような雰囲気になってしまってちょっと嫌かなぁと、というのが率直な感想です。
http://d.hatena.ne.jp/kwatch/20100613/1276385931#c1276477440
ワシは、「disる」と「指摘する」はだいぶ違うと思ってるんだけど、どうなんだろう。一緒と思っている人も多いのかな。
ワシのイメージはこんなかんじ。
「指摘する」の例:
http://www.rubyist.net/~matz/20080126.html#p04
「disる」の例:
Ruby で変数宣言がほしい、とな?
ruby | | ![]()
Thor タスクを書いていて
desc "load KVS_FILE", "load data from given KVS file" def load(kvs_file) case kvs_file when "shift" ksv_file = Dir.glob("kvs/requests/*").sort.first when "pop" ksv_file = Dir.glob("kvs/requests/*").sort.last end p kvs_fileload("shift") しても "shift" が表示されちゃう謎の現象に遭遇。
とか色々調べること10分。原因に気付いて愕然としました。てことで、やはり Ruby にも変数宣言が欲しい、というか、無いとダメだ!しかもオプションで使えるレベルでなくデフォ強制が必須。ワンライナー(golf)用途に、disableにするオプションがあるぐらいの勢いで。
ヽ( ・∀・)ノくまくまー(2010-06-04)
あるあるーw でもJavaScriptみたいな仕様ならいらね。
人間の単純なミスだからそれは使う側のユーザの問題
という正論が成立しそうだが、それは違う。そういうつまらないミスを言語(環境)が指摘してくれることで、ユーザはもっと本質的なロジック部分だけに集中できるのだ。というのも、コンパイラ言語を使った後でRubyに戻ってくると、そういう非本質的な部分(変数名を必死にケアするとか)にも神経を使う必要があって、同じ時間のコーディングでも遥かに疲れるのだ。
強く同意する。
よくアジャイル開発を信奉する人が、「テストをすれば大丈夫、コンパイラのエラーチェックなんていらね」みたいなことを言うけど、テストの実行はけっこうな時間がかかるんだから、テストを実行しないと見つけられないよりも、テストをしなくても見つけられるほうが、ずっとアジャイルじゃね?
Rubyでいまから変数宣言を導入するのは難しいだろうけど、今回の場合なら、代入はされたけど他の箇所で使われていないようなローカル変数を検出する機能がRubyにあればいいんじゃないかな。
あとは、代入されてないのに参照されているローカル変数 (たいがいtypo) の検出ができれば最高だけど、Rubyではレシーバなし引数なしのメソッド呼び出しと、ローカル変数との区別がつかないから、難しいなあ。個人的には前者を禁止したいんだけど。
# Ruby にも pycheker みたいなのがほしいね。
ef3
まさに ruby では変数への代入が宣言です
p defined?(a) # => nil
a = 1 if false
p defined? a # => "local-variable"
ここでの問題の本質は、未使用変数の検出だと思います。
レシーバなし引数なしのメソッド呼び出しは左辺値式には現れないので、ローカル変数との区別は着くと思います。
ruby2rubyを使えば構文木が得られるので、ブロック内の個々の変数の宣言参照バランスを調べることで未使用変数は判ると思います。
flayに組み込めそうですね。
kwatch
> まさに ruby では変数への代入が宣言です
それが静的に可能かどうかが問題です。defined? でわかっても、今回の場合ではうれしくありません。
> ここでの問題の本質は、未使用変数の検出だと思います。
代入したけど未使用なローカル変数と、代入してないのに参照しようとしているローカル変数ですね。
> レシーバなし引数なしのメソッド呼び出しは左辺値式には現れないので、ローカル変数との区別は着くと思います。
こちらの説明が足りてませんでした。正しくは、「レシーバなし引数なしのメソッド呼び出しと、*代入してない*ローカル変数との区別がつかない」です。
> ruby2rubyを使えば構文木が得られるので、ブロック内の個々の変数の宣言参照バランスを調べることで未使用変数は判ると思います。
> flayに組み込めそうですね。
期待してます。
ef3
二行目の a = 1 if false の a = 1 は実行されないのですが、宣言としては成立していて a の値は nil になります。この事は、スクリプトからは使い道はあまりなさそうですが、パーサだけで静的に変数の使用/否がブロック末で確定している事を示しています(実行時のcondにより出来たり出来なかったりするローカル変数がないという意味で静的です)。
動的・静的って表現は難しいですね
・変数の(示すインスタンスの)型は動的に決まる
・ローカル変数のスコープは静的に決まる
・ローカル変数のスコープは実行/否に関わらず、代入から始まる
という意味です
あと、ruby で「*代入してない*ローカル変数」は出来ないと思うのですが?
ブロックの最後の式の値がブロックの値になる事でしょうか?
kwatch
ef3さん:
> ・ローカル変数のスコープは静的に決まる
> ・ローカル変数のスコープは実行/否に関わらず、代入から始まる
おーこれはわかりやすい。参考になる情報をありがとうございます。
> あと、ruby で「*代入してない*ローカル変数」は出来ないと思うのですが?
言語仕様上はそうですが、「ローカル変数に関するバグを検出する」という観点からは、以下のような場合が考えられます (本文でもちょっと触れてます)。
name, password = 'kwatch', 'anpontan'
p pass # 「pass」というローカル変数を使ったつもりが実は代入してなかった
p namae # 「name」というローカル変数を使ったつもりが実は typo してしまった
どちらの場合も、代入されてないのでローカル変数ではありません (これはef3さんのおっしゃる通りです)。ただ、ユーザはどちらもローカル変数のつもりで書いているので、これらをうまく検出しないと「ローカル変数に関するバグを静的に検出する」ことにはならないと思います。そして、こういったのが「レシーバなし引数なしメソッド呼び出し」と見分けがつかないよね、という意味でした。ちょっと説明がわかりにくかったですよね。すいません。
#スクリプト言語にそんなこと求める方が間違いだ!
#という意見もあるかと思いますが、今は単に思考実験
#だと思ってください。
ef3
#亀レス失礼
ローカル変数に限らず、typo の発見はかなりハードルの高いテーマですね。
スクリプト言語処理系の外部で(lintの様に)解析する方法も含めて、プログラマのミスを適切に指摘する機能は、重要な機能だと思います。
2010-06-13
プログラミング言語の優秀さと道具としての評価は別
ワシは、cgi.rb なんかが標準添付になっている Ruby に PHP を dis る資格はないと思ってる (cgi.rbの元ネタである CGI.pm を擁する Perl も同じじゃないかな)。cgi.rb は、標準添付モジュールのくせにコードが汚いし遅いし、cgi[] の戻り値が String だったり File だったりするし、どう考えても設計ミス。
## Ruby だと cgi = CGI.new p cgi['name'] #=> これが File である可能性がある ## PHP だとそんな問題はない $name = $_REQUEST['name']; # 必ず文字列 $file = $_FILE['name']; # ファイルは別途取り出す
そして大半の Rubyist はこういった問題に気づいてすらいない。そういう人たちが PHP を dis ってるのは「ハァ?」と思う。
実は Python も似たようなもん。知ってるか、21 世紀になって 10 年近くたつというのに、Python 標準添付の cgi.py はセッション機能をサポートしてないんだぜ? びっくりだろ。しかも Google App Engine でも Python SDK ではやっぱりセッション機能が用意されてない。Python はセッションになんか恨みでもあるのだろうか。加えてプロセスの起動はトロいわ、cgi.py の読み込みはもっとトロいわで (これは urllib.py のせい)、ちょろっとした掲示板を作りたいときに Python を選ぶのは躊躇する。まあ Python は昔から mod_python が優秀だったから CGI はさほど重要視されてなかったのかもしれんけど、それでも wsgiref を標準添付するまえにやることがあるんじゃねーの? と思う。
結局のところ、言語としての優秀さと道具としての評価は別の話ということだよね。これは言語の速度とアプリケーションの速度とは別の話であるのとよく似ている。Ruby や Python はプログラミング言語としてはすごくよくできているけども、Web アプリケーションを作る道具としての評価は、ワシからみると PHP とそれほどの差はない*1。
逆に初心者向けでいえば、PHP のほうがずっとよく出来ている。初心者が Ruby で CGI スクリプトを作成すると、
- まずファイルに実行属性をつけるところでつまづく (そんな高度な概念は理解できない)。
- 次に #!/usr/local/bin/ruby の書き換えがわからなくてつまづく (そんな暗号は理解できない)。
- 最後に 1 行目が「"#!/usr/local/bin/ruby\r\n"」となっているせいで理解不能なエラーになってつまづく (←ワシもワシも)。
これに比べると、PHP は天国だ。なにせ拡張子を「.php」にするだけでいい。これは初心者でも分かりやすい! つまづくポイントが少ない方が、道具としては優秀だ (まあ PHP はそれ以外のところではまりポイントが多数あるけど)。
ドキュメントもそうだよね。PHPの公式ドキュメントは優秀すぎる。関数の一覧も見やすいし、検索もできるし、有益なコメントがついててこれがまたドキュメントの価値を高めている。これに比べて Ruby のドキュメントは、揃ってはいるんだけど、見やすさや検索性という点ではダメダメ。これを初心者が見て理解できるかというと、まあ難しいよね (そういうわけで、このプロジェクトには期待してる (競争が発生するという意味で))。言語を「道具」として見た場合、ドキュメントは非常に重要。この点でいえば、PHP は Ruby や Python よりも優秀な道具だといえる。
「言語の速度 != アプリの速度」という話をすると、スクリプト言語屋さんはだいたい同意してもらえる。けどそういう人でも「言語の優秀さ != 道具としての優秀さ (道具としてみれば Ruby も PHP もさほど変わんないよ?)」という話をすると、怒ったり無理な反論したり感情的な態度になる (ここらへんの反応とだいたい同じだと思えばわかるだろうか)。
でもさ、「言語としての優秀さと道具としての評価は別」なんて、よく考えたら当たり前のことでしょ? いくら Ruby や Python が優秀だからといって、Windows 用のゲームを作りたい人にとっては VB や HSP のほうが優秀な道具なわけよ。あるいは英語がわからない子供にとっては、道具としてはなでしこのほうが優秀なわけよ。優秀な言語がいつも優秀な道具であるとは限らない。そんなの当たり前のことでしょ?
だから、Rubyist や Pythonista が PHP の言語仕様を dis るのは別にいいけどさ、確かにプログラミング言語としての Ruby や Python は本当によくできてるけどさ、それと道具としての価値はまた別だということを知ってほしい。そんなこととっくに知っとるわい! という人はぜひ cgi.rb の代替物を作るか cgi.py にセッション機能を追加するか urllib.py の _hextochr まわりを修正してから出直してきてほしい。
#他の言語屋さんから dis られて困っている PHPer の方がいたら教えてください。相談にのります。
今日のまとめ:「言語仕様の優秀さ != 道具としての優秀さ」
・・・え、PHP は道具として優秀じゃないって? そこはぜひ Read Air, PLEASE!!
(追記)
ngsw プログラマではないけれど、言語がそもそも道具だと思うんだ。だから評価は不可分なんじゃないでしょうか。 2010/06/14
http://b.hatena.ne.jp/ngsw/20100614#bookmark-22280889
道具としての価値を決定する要素は、言語仕様以外にもいろいろありますよ、ということです。
oukayuka CGIなんて誰も使ってないから放置されてるだけじゃないの? Webフレームワーク全盛の時代にCGIがダメだからこの言語はダメなんて言う人がいるとは思わなんだ。 2010/06/13
http://b.hatena.ne.jp/oukayuka/20100613#bookmark-22280889
キミはせめてtdiaryとhikiぐらいは知るべき。Matz日記もるびまもcgi.rbに依存してるじゃないか。
こういうこと言ってるのはきっと事情をよく知らないRails使いに違いない。Railsだってcgi.rb使ってる (た) のにね。
#つうか標準添付ライブラリが放置されてたらまずいだろww
denchuinc ruby 最近RubyでWebプログラミングする人たちって,cgi.rbなんて使ってるのかしら? 拡張子をphpにすれば良い,ってのもサーバ側の設定次第な気が……。2010/06/13
http://b.hatena.ne.jp/denchuinc/20100613#bookmark-22280889
キミもtdiaryとhikiを知った方がいい。それともcgi.rbを使ってるtdiaryやhikiに対するあてつけか? 高度だなあ。
ssig33 はあ、 cgi.rb の代替って sinatra でいいんじゃないですかね 2010/06/13
http://b.hatena.ne.jp/ssig33/20100613#bookmark-22280889
動作がひどく遅い require 'rubygems' が必要な時点で、代替にはならないんじゃないですかね。
あと代替として推薦するならsinatraじゃなくてrackじゃないですかね。
nazoking PHPの $_REQUEST[xxx] は配列が入ってることがあるよ! 2010/06/13
http://b.hatena.ne.jp/nazoking/20100613#bookmark-22280889
それはキーとして「"xxx"」じゃなくて「"xxx[]"」を指定したとき*だけ*だよね。取り出すデータをプログラマがコントロールできるならそれでいいけど、cgi.rbの場合は違うから。
hitac
PHPの言語仕様に文句をつけている人がWebアプリを作成する道具としてのPHPにまで文句を付けている事ってそんなにありますかね?
大抵は、Webアプリを作る場合の手軽さは評価してる事が多いと思いますが。
g
基本的にPHPを批判するのって「言語仕様がアホ」だからですよね。
少なくとも道具としてのPHPは一級品だと思います。事実、自分で書く動的WebページはPHPで書いていますし。
というか「道具としての優秀さ」は比較できるものではないですよね。
「道具」は「用途」があって初めて比較できる。
kwatch
hitacさん:
> PHPの言語仕様に文句をつけている人がWebアプリを作成する道具としてのPHPにまで文句を付けている事ってそんなにありますかね?
『道具としてのPHP』どころか、PHPを使ってる人のことまで侮辱してますよ。なにか、いじめの深刻さを把握できてない教師のようですね。
http://blog.livedoor.jp/dankogai/archives/50993137.html
gさん:
> というか「道具としての優秀さ」は比較できるものではないですよね。
> 「道具」は「用途」があって初めて比較できる。
はい、まったくその通りです。でも「必ず <?php ?> を書かないといけないPHPはCLIに向いてないからダメだ」というような、用途を勘違いした批判をしてる人もいるんですよ、困ったことに。
http://blog.livedoor.jp/dankogai/archives/50835571.html
VB Loverさん:
> PHPはWebプログラミング界のVBや!
まったくその通りです。言語としてはウンコだけど、道具としては結構使える。
authorNari
> プログラミング言語の優秀さと道具としての評価は別
その通りだなと思いました。cgi.rbよりはPHPの方がよさそうだなーと思います。
> cgi.rb なんかが標準添付になっている Ruby に PHP を dis る資格はない
この辺りが少し引っかかりました。
アフターRails世代のRubyistって「あぁ、俺はcgi.rbを使ってるー」って人は
あまりいないのじゃないでしょうか(僕とかそうなんですけど)。記事にも書
かれている通り、sinatraとかRailsとかはすでにrack使ってますしね。
cgi.rbをあんまり意識していないRubyistがPHPをdisれないのだとしたら、それ
はなんか「自分が完全完璧じゃないと、人を指摘してはいけない!」ような雰
囲気になってしまってちょっと嫌かなぁと、というのが率直な感想です。
あ、cgi.rbもPHPもヘビーに使ったことはない素人考えなので、全然スルーして
もらって結構です(汗)。
def
言語としての優秀さと言語仕様の優秀さは別じゃないですかね。そして、Ruby の言語仕様についても批判はありますし。
http://wota.jp/ac/?date=20100604#p01
kwatch
authorNariさん:
> cgi.rbをあんまり意識していないRubyistがPHPをdisれないのだとしたら、それ
> はなんか「自分が完全完璧じゃないと、人を指摘してはいけない!」ような雰
> 囲気になってしまってちょっと嫌かなぁと、というのが率直な感想です。
・「disる」と「指摘する」は違うと思います (ただの指摘をdisられたと感じる人もいますけど)。
・相手よりひどい欠点がある (かつそれに気づいてもいない)
のに相手をdisるのがまずいのであって、『自分が完全完璧じゃないと…』なんて思う必要はまったくないと思いますし、その心配は杞憂じゃないでしょうか。
・「自分はrails以降の人間でcgi.rbなんか意識してないから云々」というのは、単に自分の無知を棚に上げてるだけのように見えます。まあ知らないままで相手をdisるのも言論の自由なんでしょうけど、傍から見るとギャグにしか見えません。
authorNari
> 「disる」と「指摘する」は違うと思います
あ、なるほど。何も知らないまま、PHPを批判してしまうようなことは駄目だ、とこの記事でいってたんですね。理解不足でした…。納得です。
arikui1911
> cgi.rb なんかが標準添付になっているRuby
つまり標準添付から外せばいいのです。
極論ですかね。代替もないし。
webrick/cgiはPythonのcgi.pyのようにセッション機能がありませんし。
kwatch
authorNariさん:
主題はそこではなくて、あくまで「言語仕様の優秀さ != 道具としての優秀さ」です。PHPを批判するための条件とかそういう話ではないです。
arikui1911さん:
ご自身で分かってられると思いますが、極論です。cgi.rbを改善するか、または代替物を用意することが正攻法であり、cgi.rbを標準添付から外すことは問題から逃げてるだけ。
2週間くらい前から拝見させていただいてますが、
素直に読んでると、kmizushima さんの方がなんか、確かに、分が悪いですね。
kなんとか(!)さんの書いていることは、それなりに複数の言語で、アプリなりシステムなり作ってきた人間から見れば、頷くことばかりです。
なぜあんなに執拗に絡んでくるのか、ホント不思議ですねー。
「スクリプト言語は文字列操作が得意、云々」のくだりは、さすがに「えっ?」と驚きましたが。
でも、この人のブログを見てなんとなく納得しました。
個人的にはコメントのやりとりは面白がって読んでしまうのですが、できれば本題の方で、また面白い記事上げてください。
楽しみにしてます。
そんなの、感情を逆撫でするような書き方をしているからに決まっているでしょ。
そんな当たり前のことにも気づかない(それとも気づかないフリ?)ような鈍感で無神経な人達ばかりなの?
artonもバカっぽく仲裁(それともRubyKaigiのネタ探し?)計ろうとして失敗してたけど、状況読めなさすぎ。
あと、kwatch氏は記事自体はとても良いこと書いているけど、はっきりいって「立ち位置」自体が中途半端すぎ。
"完全匿名"でこんな罵倒・挑発文体使うのならまあ一種の技法として理解はできるのだが、
どうやらRubyコミュニティではそれなりに優遇されている有名な御仁らしいし。
そんな人が、「実務経験」を盾にして「学生」相手に、さらには、まつもと・ささだとかと「グルになって」
晒しあげみたいにする(少なくとも過去を知らない者にはそう見える)からすごく印象が悪いのだよ。
最後に、記事内容自体もその多くが「Rubyの欠点のための自己弁護」にしか見えないのも問題だね。
dankogaiの天然ボケをダシにしてまつもと教祖様を上げようとする所もすごく気持ち悪いから止めてほしいな。
「えっ? そんな風に読めちゃうんだ?」 みたいな。
2つ前の記事ですが「そしてワシも生島氏のようにクビにされるの?」のには失礼ながら笑ってしまいました ^^
まさに「相手が嫌いっつー感情が言動の起点」というタイトル通りですね。
私自身まだまだ勉強不足で、お恥ずかしながら、記事を読んで初めて知ったことも多くありました。。
自分自身の理解の浅さに、少しショックを覚えていると同時に、もっと勉強するぞ!という意欲がわいています。
自分本位ではありますが、新しい記事、楽しみにしております。
http://twitter.com/makotokuwata
kwatchさんは、ツイッターで、色々書いている模様でした。
また、最近論じている内容は、
http://togetter.com/li/66450
こちらでまとめられてました。
たまたま見つけた記事で、higayasuo氏が現れるまで、全然kwatchさんとは気が付きませんでした。
以上、私のように、日記が更新されないことに不安を覚えている人へ。