タグ

ブックマーク / ruby-trunk-changes.hatenablog.com (3)

  • Ruby では明示的に return を書くほうがちょっと遅い、は 1.9 でも有効か - ruby trunk changes

    Ruby ではメソッドの最後の式の値がそのまま返り値になります。どこで読んだのか忘れてしまいましたが「明示的に return を書くとちょっとだけ遅いので、不要なら明示的な return を書かずに返り値の式だけ書くのが Ruby 流」という言説があって、その当時試してみると確かに明示的に return を書かないほうがちょっと速いという結果だったので「不要なら明示的な return は書かないのがジャスティス」というのを信条にしてきました。 しかし先日その話をしていて、ふと 1.9 ではもうこの"常識"は通用しなくなってるんじゃないかと思いついたので確認してみました。 benchmark に使ったスクリプトと実行結果は gist に置きました。 https://gist.github.com/935934 明示的な return の有無と、さらに block の中から return する

    Ruby では明示的に return を書くほうがちょっと遅い、は 1.9 でも有効か - ruby trunk changes
    jewel12
    jewel12 2011/04/25
    ブロック内 return が早い
  • ruby trunk changes

    今日は主に irb の組み込みコマンド disable_irb の追加や VM 命令コンパイル時の最適化の不具合修正などがありました。 [83618f2cfa] Peter Zhu 2024-02-26 20:07:28 UTC MSAN のメモリリーク検出対応のためにプロセス終了時に可能なかぎりメモリ解放を徹底することを指示するフラグの値をチェックする C API ruby_free_at_exit_p() というのを追加しています。うーむ、これを使ってまでメモリ解放してくれる拡張ライブラリがどのくらいあるかという問題はあると思いますが……。 [ruby-core:116963] [Feature #20306] [3822ca9884] hogelog 2024-03-14 15:40:21 UTC irb の組み込みコマンドの disable_irb というのを追加しています。どうい

    ruby trunk changes
    jewel12
    jewel12 2010/12/04
  • あなたならどう書く - 可変個のネストしたブロックつきメソッドの呼び出し - ruby trunk changes

    Ruby では Dir.chdir とか Kernel#open, Mutex#synchronize のように、ブロックを渡してそのブロックの呼び出しの前後に準備/後片付けの処理で挟むためのメソッドというのがありますね。ブロックから抜けると自動的に後始末をしてくれるので便利です。 ブロックの中でそのようなメソッドをネストさせることもできます。 @mutex.synchronize do open(file) do ... end end そこで複数のオブジェクトについてそのようなブロックつきメソッドをネストさせて呼びだしたい、しかもオブジェクトの数は可変個(たとえば配列に入ってくる)にしたいという時にどう書くのか考えてみました。思ったよりも難しかったです。 class A def initialize(n) @n = n end def guard(&blk) begin p [:bef

    あなたならどう書く - 可変個のネストしたブロックつきメソッドの呼び出し - ruby trunk changes
    jewel12
    jewel12 2010/11/18
  • 1