[#28687] [Bug #2973] rb_bug - Segmentation fault - error.c:213 — rudolf gavlas <redmine@...>

Bug #2973: rb_bug - Segmentation fault - error.c:213

10 messages 2010/03/16

[#28735] [Bug #2982] Ruby tries to link with both openssl and readline — Lucas Nussbaum <redmine@...>

Bug #2982: Ruby tries to link with both openssl and readline

16 messages 2010/03/18

[#28736] [Bug #2983] Ruby (GPLv2 only) tries to link to with readline (now GPLv3) — Lucas Nussbaum <redmine@...>

Bug #2983: Ruby (GPLv2 only) tries to link to with readline (now GPLv3)

10 messages 2010/03/18

[#28907] [Bug #3000] Open SSL Segfaults — Christian Höltje <redmine@...>

Bug #3000: Open SSL Segfaults

19 messages 2010/03/23

[#28924] [Bug #3005] Ruby core dump - [BUG] rb_sys_fail() - errno == 0 — Sebastian YEPES <redmine@...>

Bug #3005: Ruby core dump - [BUG] rb_sys_fail() - errno == 0

10 messages 2010/03/24

[#28954] [Feature #3010] slow require gems in ruby 1.9.1 — Miao Jiang <redmine@...>

Feature #3010: slow require gems in ruby 1.9.1

15 messages 2010/03/24

[#29179] [Bug #3071] Convert rubygems and rdoc to use psych — Aaron Patterson <redmine@...>

Bug #3071: Convert rubygems and rdoc to use psych

10 messages 2010/03/31

[ruby-core:28521] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer

From: Caleb Clausen <vikkous@...>
Date: 2010-03-05 23:44:47 UTC
List: ruby-core #28521
On 3/5/10, Nikolai Weibull <now@bitwi.se> wrote:
> I=92m getting the feeling thath the only real use case that we=92ve got
> for this so far is ERb.  Wouldn=92t it make more sense to change the way
> ERb (and similar =93string concatenators=94) creates its result?

So, maybe erb can be modified to collect its result in an array which
is #join'd just before returning instead of a string which is
catenated to as you go along. In other words, instead of something
like this:

  def expand_template
     result=3D''
     fragments.each{|frag|
       .... #evaluate frag if appropriate
       result<<frag
     }
     return result
  end

it should do this:

  def expand_template
     result=3D[]
     fragments.each{|frag|
       .... #evaluate frag if appropriate
       result<<frag
     }
     return result.join
  end

This is a good suggestion, Nikolai. Array#join appears to have the
appropriate optimization already; in other words, it preallocates a
buffer (with rb_str_buf_new) that will be large enough for the total
length of all the fragments. However, I still don't see why this
facility which is available internally inside the interpreter cannot
be made available in rubyland as well. Why shouldn't there be a way to
call rb_str_buf_new directly from ruby code?

Note: I've never looked at erb source code; I'm just speculating about
what it might actually consist of.

In This Thread