[#33640] [Ruby 1.9-Bug#4136][Open] Enumerable#reject should not inherit the receiver's instance variables — Hiro Asari <redmine@...>

Bug #4136: Enumerable#reject should not inherit the receiver's instance variables

10 messages 2010/12/08

[#33667] [Ruby 1.9-Bug#4149][Open] Documentation submission: syslog standard library — mathew murphy <redmine@...>

Bug #4149: Documentation submission: syslog standard library

11 messages 2010/12/10

[#33683] [feature:trunk] Enumerable#categorize — Tanaka Akira <akr@...>

Hi.

14 messages 2010/12/12
[#33684] Re: [feature:trunk] Enumerable#categorize — "Martin J. Dst" <duerst@...> 2010/12/12

[#33687] Towards a standardized AST for Ruby code — Magnus Holm <judofyr@...>

Hey folks,

23 messages 2010/12/12
[#33688] Re: Towards a standardized AST for Ruby code — Charles Oliver Nutter <headius@...> 2010/12/12

On Sun, Dec 12, 2010 at 9:55 AM, Magnus Holm <judofyr@gmail.com> wrote:

[#33689] Re: Towards a standardized AST for Ruby code — "Haase, Konstantin" <Konstantin.Haase@...> 2010/12/12

On Dec 12, 2010, at 17:46 , Charles Oliver Nutter wrote:

[#33763] [Ruby 1.9-Bug#4168][Open] WeakRef is unsafe to use in Ruby 1.9 — Brian Durand <redmine@...>

Bug #4168: WeakRef is unsafe to use in Ruby 1.9

43 messages 2010/12/17

[#33815] trunk warnflags build issue with curb 0.7.9? — Jon <jon.forums@...>

As this may turn out to be a 3rd party issue rather than a bug, I'd like some feedback.

11 messages 2010/12/22

[#33833] Ruby 1.9.2 is going to be released — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

15 messages 2010/12/23

[#33846] [Ruby 1.9-Feature#4197][Open] Improvement of the benchmark library — Benoit Daloze <redmine@...>

Feature #4197: Improvement of the benchmark library

15 messages 2010/12/23

[#33910] [Ruby 1.9-Feature#4211][Open] Converting the Ruby and C API documentation to YARD syntax — Loren Segal <redmine@...>

Feature #4211: Converting the Ruby and C API documentation to YARD syntax

10 messages 2010/12/26

[#33923] [Ruby 1.9-Bug#4214][Open] Fiddle::WINDOWS == false on Windows — Jon Forums <redmine@...>

Bug #4214: Fiddle::WINDOWS == false on Windows

15 messages 2010/12/27

[ruby-core:33549] [Ruby 1.8-Feature#4115][Open] Faster ERB patch

From: Simon Chiang <redmine@...>
Date: 2010-12-03 19:04:28 UTC
List: ruby-core #33549
Feature #4115: Faster ERB patch
http://redmine.ruby-lang.org/issues/show/4115

Author: Simon Chiang
Status: Open, Priority: Normal

ERB can be made faster by pushing all string fragments onto an array and then performing one join to make the result, rather than concatenating each string fragment.  This illustrates the patch:

  [erb_benchmark.rb]
  require 'benchmark'
  require 'erb'

  class FasterERB < ERB
    def set_eoutvar(compiler, eoutvar = '_erbout')
      compiler.put_cmd = "#{eoutvar}<<"
      compiler.insert_cmd = "#{eoutvar}<<"

      cmd = []
      cmd.push "#{eoutvar} = []"
  
      compiler.pre_cmd = cmd

      cmd = []
      cmd.push "#{eoutvar}.join"

      compiler.post_cmd = cmd
    end
  end

  Benchmark.bm(30) do |x|
    n = 10
    template = %q{got <%= "value" %> }

    erb  = ERB.new template
    frb = FasterERB.new template

    x.report "#{n}k small" do
      (1000 * n).times { erb.result }
    end

    x.report "#{n}k small (fast)" do
      (1000 * n).times { frb.result }
    end

    erb = ERB.new(template * 100)
    frb = FasterERB.new(template * 100)

    x.report "#{n}k large" do
      (1000 * n).times { erb.result }
    end

    x.report "#{n}k large (fast)" do
      (1000 * n).times { frb.result }
    end
    
    if erb.result == frb.result
      puts "outputs are equal"
    end
  end

As an example:

  % ruby --version
  ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
  % ruby erb_benchmark.rb 
                            user     system      total        real
  10k small             0.170000   0.000000   0.170000 (  0.163556)
  10k small (fast)      0.150000   0.000000   0.150000 (  0.153408)
  10k large             6.560000   0.020000   6.580000 (  6.579351)
  10k large (fast)      5.690000   0.010000   5.700000 (  5.703097)
  outputs are equal

I attempted to make up a proper patch but I'm unfamiliar with the repository.  I wasn't sure how to run the tests, etc.  Obviously the patch simply consists of replacing the set_eoutvar method.

Note that on 1.9.3 it looks like you would also have to force the encoding of the final string.

  cmd.push "#{eoutvar}.join.force_encoding(__ENCODING__)"


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

In This Thread

Prev Next