昨日が最終セッションで日帰りできず、 明日は別件で前泊が必要だったので、 今日は東京で過ごさざるをえない。
午前中、広尾で教会の用事をすませて昼食を両親と取り、 午後はデブサミへ。
特に見たいと思っているセッションがあるわけではないので 展示を中心に。
Pythonのブースでは、
柴田さんから「『たのしいみんなのPython』にサインしてください」と依頼される。
Guidoのサインの下というのもどうなんだろう。
一部で価値が出るのかもしれない。
ついでに(?)、PHPブースではPHP本にサインする。 フレンドリー。
デブサミ会場で、雑談していると「PythonはDISらないんですか」と柴田さんから。 なんか自虐的じゃない?
とは言うものの、Pythonは基本的に良い言語で、 不満な点はかなり微妙だ。一般人にはどーでもいいような点だと思う。
一応リストを。
list comprehensionはLINQにつながる「イヤらしさ」がある。 「俺の言語を汚すな」って感じ。
[x for x in ary if cond(x)]
ってのはわからないでもないけど、
ary.map{|x|cond(x)}
の方がすっきりしている、と思う。
もっとも、波村さんによると、 このブロックを積み重ねる方法ではJOINが書きにくいというのが LINQ導入の理由だったそうなので(Andersは最後まで抵抗したとか)、 RubyでもJOINへの要求で、そういうようなことにならないとは言えない、かもしれない。
−− 大物ハッカーといえば?
Rubyのまつもとゆきひろさん。ハッカー理想像を実践されているところにあこがれます。技術力だけをみれば、まつもとさんより優れた方も多く存在されるかもしれませんが、日本人であそこまで自分の信念を持って行動されるハッカーってなかなかいないんじゃないかなと思いますし、自分でしっかりとしたコミュニティーを運営されていることなどもリスペクトしています。Ruby 1.9で過去の遺産をバシバシ捨てているのは素晴らしいなぁ。ああいう覚悟がC++にあれば、もう少し違っていたでしょうが。
いやあ、ほめられちゃった。 でも、そんなに信念持ってたかな。
それはそれとして、過去の遺産ってのはなかなか難しい問題で、 Rubyでもやっぱり苦しんでいる。 「バシバシ捨てて素晴らしい」っていうよりも、 ちゃんと互換性を維持する能力が足りない、ような気がする。
えーと...、女性から見てギークに魅力があるって話は 残念ながら他で聞いたことないなあ。 例外中の例外の話、なのかな。
あえて魅力に感じられそうな点といえば
くらいかなあ。一方、
とかのネガティブ要因もあるし。
まあ、どっちにしても個人に帰属する要因が大きいので、 ギークだからどうこうということは必ずしもないだろう。
根っからのオタクの私だって、結婚して子供までいるわけだし。 弾さんもそうだ。
もっとも、女房子供以外からモテたためしがないのだが。
>インデントベースだとeRubyのようなテンプレートが難しい
実はそうでもないです。pyTenjinはPythonでeRubyと同じことをしてます。
http://www.kuwata-lab.com/tenjin/pytenjin-users-guide.html
要は工夫次第ということです。
>女性から見てギークに魅力があるって話は残念ながら他で聞いたことないなあ。
「おたく男は乙女におすすめ」とか……
http://cruel.org/freeware/geek.html
つまんないコトだけど、
「デブサミ2日目」の柴田さんの本って「みんPy(みんなのPython)」じゃないのかな?
> kwatchさん
Makoもそうですが、end明示するのは「工夫」とは言えないのでは。
>end明示するのは「工夫」とは言えないのでは。
工夫というよりは「必然」です。
eRubyのようなテキスト埋め込みツールでは、Pythonのようなインデント方式は使えません。
またeRubyのようにテキスト汎用である場合、繰り返しや条件分岐では「範囲」を指定する必要があります。
そのため、「end」あるいは別の方法で範囲の終わりを指定することは必須であり、省略できません。
これは言語を問わず、いえることです。
言いたいことは何かというと、Pythonのインデント方式はたしかにeRuby (だけでなくコードの自動生成一般) と相性が悪いように見えますが、「end」の追加程度で済むなら大きな欠点とはならないのでは、ということです。
[x for x in ary if cond(x)]と
ary.map{|x|cond(x)}じゃ結果が違う。
rubyのサンプルの方が処理が少ないから
すっきりしていて当然だと思う。
ary.select{|x|cond(x)} だね
def hoge(x):
dlist = []
for i in range(x):
dlist.append(i)
return dlist
↑が↓で済む
def hoge(x):
for i in range(x):
yield i
で、こうする
for i in hoge(5):
print i,
0 1 2 3 4
コメント汚しごめんなさい。
> 弾さんもそうだ
ごめん、腹かかえて笑った
list comprehensionがLINQ風かどうかはともかく、オブジェクト指向風じゃないことは確かです。
ary.map{|x|cond(x)}
はHaskellだと、
filter cond ary
ではないでしょうか?