[#29911] [Bug #3231] Digest Does Not Build — Charlie Savage <redmine@...>

Bug #3231: Digest Does Not Build

19 messages 2010/05/01

[#29920] [Feature #3232] Loops (while/until) should return last statement value if any, like if/unless — Benoit Daloze <redmine@...>

Feature #3232: Loops (while/until) should return last statement value if any, like if/unless

9 messages 2010/05/01

[#29997] years in Time.utc — Xavier Noria <fxn@...>

Does anyone have a precise statement about the years supported by

13 messages 2010/05/04

[#30010] [Bug #3248] extension 'tk' is finding tclConfig.sh and tkConfig.sh incorrectly — Luis Lavena <redmine@...>

Bug #3248: extension 'tk' is finding tclConfig.sh and tkConfig.sh incorrectly

9 messages 2010/05/05

[#30226] [Bug #3288] Segmentation fault - activesupport-3.0.0.beta3/lib/active_support/callbacks.rb:88 — Szymon Jeż <redmine@...>

Bug #3288: Segmentation fault - activesupport-3.0.0.beta3/lib/active_support/callbacks.rb:88

10 messages 2010/05/13

[#30358] tk doesn't startup well in doze — Roger Pack <rogerdpack2@...>

Currently with 1.9.x and tk 8.5,the following occurs

12 messages 2010/05/22

[ruby-core:30476] [Bug #3359] Date::Format::Bag performance improvement

From: Kurt Stephens <redmine@...>
Date: 2010-05-28 02:36:10 UTC
List: ruby-core #30476
Bug #3359: Date::Format::Bag performance improvement
http://redmine.ruby-lang.org/issues/show/3359

Author: Kurt  Stephens
Status: Open, Priority: Normal
ruby -v: ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]

Date::Format::Bag spends a lot of time in method_missing for a limited number of method selectors.

The hack below removed ~ 3% of time from a ActiveRecord/Rails app that parses and formats many Date objects.

<pre>
class Date::Format::Bag
    def method_missing(sel, *args) # , &block)
      sel = sel.to_s
      t = sel.dup
      set = t.chomp!('=')
      t = t.intern
      if set
        value = @elem[t] = args[0]
        expr = "def #{sel}(arg); @elem[#{t.inspect}] = arg; end"
      else
        value = @elem[t]
        #
        # There appear to be no callers like:
        #
        #   e.foo(something)
        #
        # Thus do not interpret any arguments as
        # the *rest parameter creates Arrays that are
        # never referenced.
        #
        # expr = "def #{sel}(*rest); @elem[#{t.inspect}]; end"
        expr = "def #{sel}(); @elem[#{t.inspect}]; end"
      end
      expr = "class #{self.class}; #{expr}; end;"
      # $stderr.puts "  **** #{self.class}\##{sel} => #{expr}"
      eval(expr)
      value
    end
  end
</pre>

Might be better to just enumerate all the possible Hash slot getter/setters using a simple class macro,
since Date::Format::Bag is not used by anything outside of Date.


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

In This Thread

Prev Next