«前の日記(2005年04月27日) 最新 次の日記(2005年04月29日)» 編集

Matzにっき


2005年04月28日 [長年日記]

_ [言語] PEP #340 Anonymous Block Statements

RedHandedより。

PythonにもRubyにあるような「ブロック」を取り入れようというアイディア。

文法はこんな感じかな。

block with_file(filename) as f:
   for line in f:
     print process(line)

これをRubyに翻訳するとこんな感じか。

open(filename) {|f|
  for line in f
    print process(line)
  end
}

Rubyのブロックに似ているのはわざとらしくて、Guido自身も次のように語っている

I think we're on to something. And I'm not too proud to say that Ruby has led the way here to some extent (even if Python's implementation would be fundamentally different, since it's based on generators, which has some different possibilities and precludes some Ruby patterns.)

(超訳)
それなりの案になったと思う。この分野においてRubyの方が進んでいると認めざるをえない。 (Pythonのはgeneratorをベースにしているので実装は全く異なっていて、 Rubyのとは違った(使い方の)可能性があるし、逆にRubyにできてPythonにできないこともあるだろう)

私からの印象は

  • blockキーワードはちょっとうっとうしい。 でも、まだ「仮」だそうだから、実際には違うものになるだろう。
  • asキーワードもあんまりピンとこない
  • generatorを使っているので、blockに使うメソッド(関数)は専用のものが必要。 Rubyのように「ブロックが与えられたら動作が変わる」タイプのものは実現できない。 名前を考えなくてすむのはRubyの方がありがたいが、 きちんと区別したい人にはPythonのやり方を好むかもしれない(私は強制されたくはないが)。
  • else節をつけられるのはPythonのループ類の特徴。 便利な局面もあるらしい。 Python以外ではあまり見かけないが、ずっと以前にどこかで見たようなおぼろげな記憶が。
  • Pythonの文法の制約から(それとgeneratorを使っていることから)ブロック付き関数は値を返せない。 Rubyでのブロック付きメソッドの使われ方から考えると、 これは結構厳しい制約だと思う。魅力半減以下というかなんというか。

まあ、対抗する立場の人からのコメントなので話半分に聞いてほしい。 いずれにしても我々のアイディアが広く受け入れられるのは嬉しいことだ。

_ 論文

去年の夏に出した論文の査読が終わって帰ってくる。いやあ、長かった。

そして査読の結果を見ると...すみません、...私が悪うございました。 はっきりいって論文をナメてました。いや、書いてる時は自覚してませんでしたけど、 未定義の言葉とか、考察が足りないところかが満載なのが厳しく指摘されてました。

これにくじけず再挑戦しますです。書き直す時間を取らなきゃ。 こんどはもっとマシにしなきゃな。


«前の日記(2005年04月27日) 最新 次の日記(2005年04月29日)» 編集