Project

General

Profile

Backport #8328

r40457 - Hash#shift performance improvement

Added by charliesome (Charlie Somerville) over 6 years ago. Updated over 6 years ago.

Status:
Closed
Priority:
Normal
[ruby-core:54588]

Description

r40457 contains a patch which significantly improves the performance of Hash#shift.

As it does not change behaviour, it should be backported.

Thanks.


Files

backport_fix_shift.diff (3.29 KB) backport_fix_shift.diff funny_falcon (Yura Sokolov), 06/02/2013 08:42 PM

Associated revisions

Revision c4b61464
Added by usa (Usaku NAKAMURA) over 6 years ago

[Backport #8328] [ruby-core:55250] Patch by funny-falcon

  • benchmark/bm_hash_shift.rb: add benchmark for Hash#shift

  • hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
    delete element without iterating the whole hash.

  • hash.c (shift_i): remove function

  • include/ruby/st.h (st_shift): add st_shift function

  • st.c (st_shift): ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@41652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 41652
Added by usa (Usaku NAKAMURA) over 6 years ago

[Backport #8328] [ruby-core:55250] Patch by funny-falcon

  • benchmark/bm_hash_shift.rb: add benchmark for Hash#shift

  • hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
    delete element without iterating the whole hash.

  • hash.c (shift_i): remove function

  • include/ruby/st.h (st_shift): add st_shift function

  • st.c (st_shift): ditto

History

Updated by usa (Usaku NAKAMURA) over 6 years ago

  • Status changed from Open to Assigned
  • Assignee set to usa (Usaku NAKAMURA)

Sorry for late reply.

trunk is too different from 1.9.3, so I cannot patch r40457 simply.
Please wait more.

Updated by funny_falcon (Yura Sokolov) over 6 years ago

Backported version of "fix Hash#shift" attached.

#3

Updated by usa (Usaku NAKAMURA) over 6 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r41652.
Charlie, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


[Backport #8328] [ruby-core:55250] Patch by funny-falcon

  • benchmark/bm_hash_shift.rb: add benchmark for Hash#shift

  • hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
    delete element without iterating the whole hash.

  • hash.c (shift_i): remove function

  • include/ruby/st.h (st_shift): add st_shift function

  • st.c (st_shift): ditto

Also available in: Atom PDF