[#45637] [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

14 messages 2012/05/16

[#45670] [ruby-trunk - Bug #6479][Open] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる — "kachick (Kenichi Kamiya)" <kachick1+ruby@...>

9 messages 2012/05/22

[ruby-dev:45665] [ruby-trunk - Feature #6218] struct.cのrb_struct_s_members_m()について

From: "mame (Yusuke Endoh)" <mame@...>
Date: 2012-05-21 15:11:56 UTC
List: ruby-dev #45665
Issue #6218 has been updated by mame (Yusuke Endoh).

Assignee changed from Glass_saga (Masaki Matsushita) to mame (Yusuke Endoh)

Glass_saga さんのコミッタ化にはもうちょっと時間がかかりそうみたいなので、
とりあえず私がやっちゃいます。

-- 
Yusuke Endoh <[email protected]>
----------------------------------------
Feature #6218: struct.cのrb_struct_s_members_m()について
https://bugs.ruby-lang.org/issues/6218#change-26747

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category: 
Target version: 


表題の関数ではrb_struct_s_members()で得たArrayの内容をwhile文で1要素ずつ新たなArrayにpushしていますが、
これはrb_ary_dup()で済ませられるのではないでしょうか。

パフォーマンス上のメリットもあります。

require 'benchmark'

sym = :a
s = Struct.new(*Array.new(100){ sym = sym.succ })

Benchmark.bm do |x|
  x.report do
    1000.times { s.members }
  end
end

以上のコードを実行したところ、以下の結果となりました。

trunk(r35158):
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003188)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.000688)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

In This Thread