[#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:28503] Re: [Feature #905] Add String.new(fixnum) to preallocate large buffer

From: Hugh Sasse <hgs@...>
Date: 2010-03-05 10:07:30 UTC
List: ruby-core #28503
On Fri, 5 Mar 2010, Yusuke ENDOH wrote:

> Hi,
> 
> 2010/3/5 Hugh Sasse <hgs@dmu.ac.uk>:
> >> At first glance, the document explains the difference of destructive
> >> and non-destructive concatenations, like String#+ and #<<.
> >>
> >> It is absolutely different topic from pre-allocation.
> >
> > It is related: the algorithm constructs large strings from smaller
> > ones in an elegant way using a "tower of Hanoi", and if the top
> > string concatenation gets bigger than the one below it, only then
> > are they joined together.  Result is less copying and merging.
> 
> 
> Ah, sorry.  I had to read all more carefully.
> 
> The algorithm itself is interesting, but I understand it is
> just workaround to implement efficient string buffer by using
> *immutable* strings (because Lua String seems always immutable).
> 
> But Ruby String is mutable.  Is it also more efficient with
> *mutable* string than current direct concatenation?  I wonder
> if the algorithm needs more memcpy than the current.

Possibly.  I've not gone into this in much depth.  I thought it
might be helpful to raise it in case this would give significant
help to garbage collection.  I'm thinking that as the strings get
longer they fill up space in the heap so need to be moved to the
newly allocated space.  Dealing with only the top of the "tower of
Hanoi" would be handling smaller chunks.  I think this would need to
be tested, but could be worth exploring.  Lua is rather quick, and
the article talks about a big speed increase.

On the other hand, it is difficult to decide when to invoke this
algorithm.  It is probably too heavy for just joining two strings,
but for reading in lots of chunks and appending them, it could be a
big help.  I don't know how to detect that distinction in user code.
It might be too much work.

        Hugh


> 
> -- 
> Yusuke ENDOH <mame@tsg.ne.jp>
> 

In This Thread