[#6954] Why isn't Perl highly orthogonal? — Terrence Brannon <brannon@...>

27 messages 2000/12/09

[#7022] Re: Ruby in the US — Kevin Smith <kevinbsmith@...>

> Is it possible for the US to develop corporate

36 messages 2000/12/11
[#7633] Re: Ruby in the US — Dave Thomas <Dave@...> 2000/12/19

tonys@myspleenklug.on.ca (tony summerfelt) writes:

[#7636] Re: Ruby in the US — "Joseph McDonald" <joe@...> 2000/12/19

[#7704] Re: Ruby in the US — Jilani Khaldi <jilanik@...> 2000/12/19

> > first candidates would be mysql and postgressql because source is

[#7705] Code sample for improvement — Stephen White <steve@...> 2000/12/19

During an idle chat with someone on IRC, they presented some fairly

[#7750] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

Stephen White wrote:

[#7751] Re: Code sample for improvement — David Alan Black <dblack@...> 2000/12/20

Hello --

[#7755] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

David Alan Black wrote:

[#7758] Re: Code sample for improvement — Stephen White <steve@...> 2000/12/20

On Wed, 20 Dec 2000, Guy N. Hurst wrote:

[#7759] Next amusing problem: talking integers (was Re: Code sample for improvement) — David Alan Black <dblack@...> 2000/12/20

On Wed, 20 Dec 2000, Stephen White wrote:

[#7212] New User Survey: we need your opinions — Dave Thomas <Dave@...>

16 messages 2000/12/14

[#7330] A Java Developer's Wish List for Ruby — "Richard A.Schulman" <RichardASchulman@...>

I see Ruby as having a very bright future as a language to

22 messages 2000/12/15

[#7354] Ruby performance question — Eric Crampton <EricCrampton@...>

I'm parsing simple text lines which look like this:

21 messages 2000/12/15
[#7361] Re: Ruby performance question — Dave Thomas <Dave@...> 2000/12/15

Eric Crampton <EricCrampton@worldnet.att.net> writes:

[#7367] Re: Ruby performance question — David Alan Black <dblack@...> 2000/12/16

On Sat, 16 Dec 2000, Dave Thomas wrote:

[#7371] Re: Ruby performance question — "Joseph McDonald" <joe@...> 2000/12/16

[#7366] GUIs for Rubies — "Conrad Schneiker" <schneik@...>

Thought I'd switch the subject line to the subject at hand.

22 messages 2000/12/16

[#7416] Re: Ruby IDE (again) — Kevin Smith <kevins14@...>

>> >> I would contribute to this project, if it

17 messages 2000/12/16
[#7422] Re: Ruby IDE (again) — Holden Glova <dsafari@...> 2000/12/16

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

[#7582] New to Ruby — takaoueda@...

I have just started learning Ruby with the book of Thomas and Hunt. The

24 messages 2000/12/18

[#7604] Any corrections for Programming Ruby — Dave Thomas <Dave@...>

12 messages 2000/12/18

[#7737] strange border-case Numeric errors — "Brian F. Feldman" <green@...>

I haven't had a good enough chance to familiarize myself with the code in

19 messages 2000/12/20

[#7801] Is Ruby part of any standard GNU Linux distributions? — "Pete McBreen, McBreen.Consulting" <mcbreenp@...>

Anybody know what it would take to get Ruby into the standard GNU Linux

15 messages 2000/12/20

[#7938] Re: defined? problem? — Kevin Smith <sent@...>

matz@zetabits.com (Yukihiro Matsumoto) wrote:

26 messages 2000/12/22
[#7943] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

Kevin Smith <sent@qualitycode.com> writes:

[#7950] Re: defined? problem? — Stephen White <steve@...> 2000/12/22

On Fri, 22 Dec 2000, Dave Thomas wrote:

[#7951] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

On Fri, 22 Dec 2000, Stephen White wrote:

[#7954] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

David Alan Black <dblack@candle.superlink.net> writes:

[#7975] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

Hello --

[#7971] Hash access method — Ted Meng <ted_meng@...>

Hi,

20 messages 2000/12/22

[#8030] Re: Basic hash question — ts <decoux@...>

>>>>> "B" == Ben Tilly <ben_tilly@hotmail.com> writes:

15 messages 2000/12/24
[#8033] Re: Basic hash question — "David A. Black" <dblack@...> 2000/12/24

On Sun, 24 Dec 2000, ts wrote:

[#8178] Inexplicable core dump — "Nathaniel Talbott" <ntalbott@...>

I have some code that looks like this:

12 messages 2000/12/28

[#8196] My first impression of Ruby. Lack of overloading? (long) — jmichel@... (Jean Michel)

Hello,

23 messages 2000/12/28

[#8198] Re: Ruby cron scheduler for NT available — "Conrad Schneiker" <schneik@...>

John Small wrote:

14 messages 2000/12/28

[#8287] Re: speedup of anagram finder — "SHULTZ,BARRY (HP-Israel,ex1)" <barry_shultz@...>

> -----Original Message-----

12 messages 2000/12/29

[ruby-talk:6874] Some performance issues

From: "Ben Tilly" <ben_tilly@...>
Date: 2000-12-07 05:06:53 UTC
List: ruby-talk #6874
I decided to try out a few cases that I knew tend to present
possible performance issues in other languages.

  def tst_push (n)
    my_array = []
    for i in 1..n do
      my_array.push("hello")
    end
  end

  def tst_unshift (n)
    my_array = []
    for i in 1..n do
      my_array.unshift("hello")
    end
  end

  def tst_str_concat (n)
    my_str = ""
    for i in 1..n do
      my_str += "hello"
    end
  end

  for arg in ARGV do
    n = arg.to_i
    print "Pushing #{n} elements\n"
    tst_push(n)
    print "Unshifting #{n} elements\n"
    tst_unshift(n)
    print "Appending to a string #{n} times\n"
    tst_str_concat(n)
  end

With this highly unscientific test trying this 100, 1000,
10000, and 100000 times I see that push appears to be
fairly good, unshift appears to scale quadratically but
is not that slow, and appending to a string is definitely
quadratic and painful.  I couldn't figure out a simple
test that matched Perl's ability to produce a map which
returned more elements than it is fed:

  @bigger_list = map {($_, $_)} @list;

(OK, I can, but its performance is the same as push.)

By contrast Perl has for a long time had a fast push, a
fast string append, and a quadratic unshift.  The current
5.7 development has improved that to have a linear unshift
as well, albeit a little slower one than the push.  (The
1->2 map shown above was also quadratic, but will be linear
when 5.6.1 comes out.)

Glancing at array.c and string.c the reason for this is
obvious.  Strings in Ruby take up exactly the room
allocated for them.  Arrays are in a buffer where they
have to be aligned on the left with the buffer but there
is room on the right.  Therefore any playing with the
boundaries of a string forces you to recopy the whole
thing.  And likewise any playing with the left side of an
array forces you to recopy it.  (So shift should also be
slow.)  But when you need to play games on the right
(eg with push and pop) you have a buffer so you generally
can leave the array alone.

If Ruby wants good performance on this set of operations
(trust me, people coming from Perl are going to be very
likely to call shift a lot without realizing that it is
slow) it needs to use a buffering system closer to that
which Perl uses.  In ruby.h this would mean adding a
"capa" field to RString and an "offset" field to RArray,
and adding logic in the C files to use these in an
intelligent way.  To get the same performance profile as
Perl on the array handling, if an array needs to be
reallocated always left-align it, then inside your unshift
function have logic that will ask for the array to be
grown significantly more than you want, slide it, and then
do the accounting to turn the initial part into a buffer.

After all, you might as well use efficient algorithms by
default? :-)

Cheers,
Ben
_____________________________________________________________________________________
Get more from the Web.  FREE MSN Explorer download : http://explorer.msn.com

In This Thread

Prev Next