Feature #4452
closedSpeedup Date._parse and Date._strptime by using a plain Hash
Description
=begin
This is pretty much a duplicate of #3667, but since you can't reopen tickets and I didn't get a response to the question I posted after it was closed, I'm resubmitting it.
Date._parse and Date._strptime currently use a Date::Format::Bag instance to hold some temporary data. This is a subclass of Date::Format::BagStruct which is a subclass of Struct. There are no other users of this class and it is a private (nodoc) class. It is much faster to switch the code to use a plain hash instead of Date::Format::Bag, 66% faster for Date._parse and 25% faster for Date._strptime:
$ ruby -v ruby 1.9.3dev (2011-02-28 trunk 30975) [x86_64-openbsd4.9] $ time ruby -r date -I date-struct -e "50000.times{Date._parse('2010-12-25')}" real 0m3.673s user 0m3.660s sys 0m0.010s $ time ruby -r date -I date-hash -e "50000.times{Date._parse('2010-12-25')}" real 0m2.219s user 0m2.200s sys 0m0.020s $ time ruby -r date -I date-struct -e "50000.times{Date._strptime('2010-12-25 10:20:30', '%F %T')}" real 0m8.715s user 0m8.710s sys 0m0.000s $ time ruby -r date -I date-hash -e "50000.times{Date._strptime('2010-12-25 10:20:30', '%F %T')}" real 0m6.980s user 0m6.970s sys 0m0.000s > 3.673/2.219 => 1.655250112663362 > 8.715/6.980 => 1.248567335243553 The only advantage to the current code is that you can use nicer looking accessor methods:
e.d # instead of e[:d] e.d = 1 # instead of e[:d] = 1 However, in this case the performance increase greatly outweighs that issue.
=end
Files
Updated by jeremyevans0 (Jeremy Evans) over 14 years ago
- File date_format.patch date_format.patch added
=begin
The patch in #3667 pretty much applies except for the first hunk, so here's an updated patch against trunk.
=end
Updated by tadf (tadayoshi funaba) over 14 years ago
- Status changed from Open to Rejected
=begin
now i'm planning some improvements for formating method of date.
i may rewrite some methods in c.
thanks.
=end