[#37231] Announcing New Ruby Book Under Development! — <robert.calco@...>

Everybody:

31 messages 2002/04/02
[#37250] Re: [ANN] Announcing New Ruby Book Under Development! — "John" <jyeung@...> 2002/04/02

Have you checked out?

[#37279] About efficiency — Jean-Hugues ROBERT <jean_hugues_robert@...> 2002/04/02

[#37289] Re: About efficiency — nobu.nokada@... 2002/04/03

Hi,

[#37291] Re: About efficiency — Sean Middleditch <elanthis@...> 2002/04/03

On Tue, 2002-04-02 at 20:16, nobu.nokada@softhome.net wrote:

[#37232] seeking to understand... — Mark Probert <probertm@...>

38 messages 2002/04/02
[#37255] Re: Ruby, python, perl, ... — Chris <chris@...> 2002/04/02

In article <87d6xhaoif.fsf@jenny-gnome.dyndns.org>,

[#37281] Is eval a code/design smell? — "Chris Morris" <home@...>

I seem to have an inherent distaste for eval, but I don't know why. I've

51 messages 2002/04/03
[#37323] Re: Is eval a code/design smell? — Ron Jeffries <ronjeffries@...> 2002/04/03

On Wed, 03 Apr 2002 00:15:10 GMT, "Chris Morris" <home@clabs.org> wrote:

[#38034] Re: Is eval a code/design smell? — Ian Macdonald <ian@...> 2002/04/11

On Wed 03 Apr 2002 at 20:35:30 +0900, you wrote:

[#38045] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 01:40, Ian Macdonald wrote:

[#38061] Re: Is eval a code/design smell? — Ian Macdonald <ian@...> 2002/04/11

On Thu 11 Apr 2002 at 22:07:03 +0900, you wrote:

[#38063] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:06, Ian Macdonald wrote:

[#38064] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38066] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:25, ts wrote:

[#38067] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38068] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:42, ts wrote:

[#38069] Re: Is eval a code/design smell? — ts <decoux@...> 2002/04/11

>>>>> "S" == Sean Middleditch <elanthis@awesomeplay.com> writes:

[#38072] Re: Is eval a code/design smell? — Sean Middleditch <elanthis@...> 2002/04/11

On Thu, 2002-04-11 at 12:59, ts wrote:

[#37342] regular expression question — "Firestone, Mark - Technical Support" <mark.firestone@...>

Thanks for the help with the tread questions guys... I have one about (gasp)

16 messages 2002/04/03

[#37385] TextPad replacement for Linux? — Tobias Reif <tobiasreif@...>

TIA,

25 messages 2002/04/03

[#37397] Really new-new-newbie question :) — "Philip Mateescu" <philip@...>

Hi,

13 messages 2002/04/03

[#37454] ModRUBY question — George Moschovitis <gmosx@...>

Hi everybody,

18 messages 2002/04/04

[#37470] Test the result of an initialization ? — jayce@... (Jayce Piel)

17 messages 2002/04/04

[#37540] Fibonacci Number Generators — jzakiya@... (Jabari Zakiya)

Hi, I'm a newbie, coming to Ruby from a

14 messages 2002/04/04

[#37549] OO/Ruby Terminology — <james@...>

I added a wiki page for Ruby book development ...

22 messages 2002/04/05
[#37808] Re: OO/Ruby Terminology — <bbense+comp.lang.ruby.Apr.07.02@...> 2002/04/10

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

[#37861] RE: OO/Ruby Terminology — <james@...> 2002/04/10

> From: bbense+comp.lang.ruby.Apr.07.02@telemark.stanford.edu

[#37944] Re: OO/Ruby Terminology — Chris <chris@...> 2002/04/10

In article <PGEPJIFLPEPOHCKEEEIKIEFADCAA.james@rubyxml.com>,

[#37963] RE: OO/Ruby Terminology — <james@...> 2002/04/10

> From: Chris [mailto:chris@cmb-enterprises.com]

[#37617] Addition to file.c (File.extension) — Mike Hall <mghall@...>

18 messages 2002/04/05
[#37736] Re: Addition to file.c (File.extension) — matz@... (Yukihiro Matsumoto) 2002/04/08

Hi,

[#37653] Switching from PHP to Ruby - Comments Please — Jim Freeze <jim@...>

Hi:

34 messages 2002/04/06

[#37746] ruby-dev summary 16501-16750 — TAKAHASHI Masayoshi <maki@...>

Hi all,

17 messages 2002/04/08

[#37833] Ruby as replacement for VB? — "Robb Shecter" <rs@...>

Hi,

19 messages 2002/04/10
[#37923] Re: Ruby as replacement for VB? — Michael Davis <mdavis@...> 2002/04/10

Robb Shecter wrote:

[#39153] Re: Ruby as replacement for VB? — "Euan Mee" <xlucid@...> 2002/04/26

On 11 Apr 2002, at 1:03, Michael Davis wrote:

[#37835] crypting ruby source — Ludo <coquelle@...>

Hi,

32 messages 2002/04/10
[#38280] Re: crypting ruby source — web2ed@... (Edward Wilson) 2002/04/14

Ludo <coquelle@enib.fr> wrote in message news:<3CB31298.13A44B26@enib.fr>...

[#38044] RFC - class_added callback — Michal Rokos <m.rokos@...>

Hello,

16 messages 2002/04/11

[#38046] GetoptLong question — djberg96@... (Daniel Berger)

Hi all,

16 messages 2002/04/11
[#38051] Re: GetoptLong question — "Pit Capitain" <pit@...> 2002/04/11

On 11 Apr 2002, at 22:16, Daniel Berger wrote:

[#38101] How to Make a Method Ineffective Efficiently? — William Djaja Tjokroaminata <billtj@...>

Hi,

15 messages 2002/04/11
[#38135] Re: How to Make a Method Ineffective Efficiently? — Jean-Hugues ROBERT <jean_hugues_robert@...> 2002/04/12

Hello,

[#38159] Re: How to Make a Method Ineffective Efficiently? — William Djaja Tjokroaminata <billtj@...> 2002/04/12

Thanks for all the responses. I just want to add the final

[#38126] Ruby/Google — Ian Macdonald <ian@...>

Hi,

19 messages 2002/04/12

[#38136] Idea for a new shorthand — "Hal E. Fulton" <hal9000@...>

OK, maybe this is an idea no one will like. Or

17 messages 2002/04/12

[#38167] Why Object#class Is Inconsistent in "==" and "case"? — William Djaja Tjokroaminata <billtj@...>

Hi,

12 messages 2002/04/12

[#38199] not vs !, and vs && — <james@...>

I'm confused about the behavior of 'not'. The Pickaxe and Ruby21Days books

17 messages 2002/04/12

[#38238] Barnes & Noble putting on the squeeze — David Alan Black <dblack@...>

Hello --

11 messages 2002/04/13

[#38239] Freshmeat article about Ruby — Tobias DiPasquale <anany@...>

Hi all,

28 messages 2002/04/13
[#38447] Re: Freshmeat article about Ruby — Joel VanderWerf <vjoel@...> 2002/04/16

Tobias DiPasquale wrote:

[#38457] Re: Freshmeat article about Ruby — David Alan Black <dblack@...> 2002/04/16

Hi --

[#38560] Re: Freshmeat article about Ruby — Mark Hulme Jones <mjones@...> 2002/04/18

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

[#38561] Re: Freshmeat article about Ruby — Paul Brannan <pbrannan@...> 2002/04/18

On Fri, Apr 19, 2002 at 01:07:22AM +0900, Mark Hulme Jones wrote:

[#38562] Re: Freshmeat article about Ruby — Pat Eyler <pate@...> 2002/04/18

On Fri, 19 Apr 2002, Paul Brannan wrote:

[#38564] Re: Freshmeat article about Ruby — Jack Herrington <jack_d_herrington@...> 2002/04/18

On 4/18/02 9:30 AM, "Pat Eyler" <pate@eylerfamily.org> wrote:

[#38648] Ruby golf (FFT) Was: Freshmeat article about Ruby — Christian Szegedy <szegedy@...> 2002/04/19

Jack Herrington wrote:

[#38657] Re: Ruby golf (FFT) Was: Freshmeat article about Ruby — David Alan Black <dblack@...> 2002/04/19

Hello --

[#38331] mime type — Tobias Reif <tobiasreif@...>

Hi all,

15 messages 2002/04/15

[#38338] Compiling Ruby on Mac OS X — Alwyn <alwyn@...>

I've downloaded the latest Stable Snapshot and tried building it. It

18 messages 2002/04/15

[#38449] Help wanted for statvfs extension — djberg96@... (Daniel Berger)

Hi all,

35 messages 2002/04/16
[#38470] Re: Help wanted for statvfs extension — "James F.Hranicky" <jfh@...> 2002/04/17

On Wed, 17 Apr 2002 05:04:06 +0900

[#38525] resolv.rb Bug — "Roy J. Milican" <roy@...>

Greetings,

18 messages 2002/04/17

[#38627] Imlib2-Ruby 0.4.0 — Paul Duncan <pabs@...>

I just posted Imlib2-Ruby version 0.4.0, my Ruby bindings for Imlib2

12 messages 2002/04/19

[#38635] Threads creating threads creating threads... — Tobias Peters <tpeters@...>

I have already asked this question in [ruby-talk:19661], but I will ask it

12 messages 2002/04/19

[#38694] Ruby on .NET? — Ron Jeffries <ronjeffries@...>

I scanned the .net threads here and didn't see whether there is, or is not, an

37 messages 2002/04/19
[#38696] RE: Ruby on .NET? — "repeater" <repeater@...> 2002/04/19

recently found:

[#38839] building extensions-- new vs initialize — "Norman Makoto Su" <normsu@...>

Hi, I'm trying to build a ruby extension in C. While looking at the pickaxe CD

14 messages 2002/04/23

[#38910] Numberic#prev — Sean Chittenden <sean@...>

I do a lot of incrementing and decrementing of values: it'd be nice if

36 messages 2002/04/24

[#39047] A Wild Idea: What do you think? — Jim Freeze <jim@...>

Hi:

16 messages 2002/04/26

[#39122] RE: A Wild Idea: What do you think? — "Morris, Chris" <chris.morris@...>

> > OK, then let's have it in Texas. How about August? Oh, what do you

28 messages 2002/04/26
[#39123] Re: A Wild Idea: What do you think? — Jim Freeze <jim@...> 2002/04/26

On Sat, Apr 27, 2002 at 03:15:21AM +0900, Morris, Chris wrote:

[#39176] Re: A Wild Idea: What do you think? — Pat Eyler <pate@...> 2002/04/27

On Sat, 27 Apr 2002, Jim Freeze wrote:

[#39177] Re: A Wild Idea: What do you think? — David Alan Black <dblack@...> 2002/04/27

Hi --

[#39228] RubyConf.new(2002) - ideas for agenda — "Daniel Berger" <djberg96@...>

Ok - so I'm probably jumping the gun here, but hey, what the heck.

27 messages 2002/04/28

[#39394] ncurses, mingw32 — tony summerfelt <snowzone5@...>

i've been away from ruby for awhile, it was time to dust off the pickaxe book

13 messages 2002/04/30

About efficiency

From: Jean-Hugues ROBERT <jean_hugues_robert@...>
Date: 2002-04-02 23:51:31 UTC
List: ruby-talk #37279

Hello,

Short Version:

I am looking for tips about writing more efficient Ruby programs. I have 
found http://www.bagley.org/~doug/shootout/lang/ruby/ and not much more. I 
guess I could have a deeper look at the MRI C interpreter, but that seems a 
bit extreme.

Thanks,

JHR

-------------
Long Version:

I have been enjoying Ruby for 2 weeks now. I am very impressed. It is my 
understanding that currently the interpreter directly executes the parse 
tree versus going thru some bytecode generation phase (the later is what I 
did for some interpreter I wrote years ago, while at the same time a friend 
of mine was going the ruby way, hence we had opportunities to compare).

I don't have a definitive answer about which approach is faster (hints 
welcome) and I guess Matz has some good reasons to plan for some bytecode 
generation (besides doing what Java does...). What matters more to me is 
that it is a clear indication that we all care about efficiency to some extend.

Yet, I have a hard time figuring out what is efficient versus what is not 
in Ruby. I am not talking about what algorithm I pick, this is language 
independent mostly.

Here are a few questions:

1) Would using Symbol more be more efficient ?
While writing some debugging tool, I was surprised to discover that a 
function like Kernel.set_trace_func() would set a proc that is given a 
"String" to describe what is happening. I would have guessed that a Symbol 
would obviously be more efficient here (comparing two symbols is like 
comparing two pointers, whereas comparing two strings may involve comparing 
byte per byte). Maybe it's not a big deal. But these are the deals that end 
up making things go faster I think.

Migrating toward more use of Symbol is not very difficult, specially if 
using Symbol (instead of String, when it makes sense) gets some help from 
the language (i.e. like "aaa" == :aaa resulting in true instead of false 
today).

2) "xxx" versus 'xxx', which is more efficient ?
Equivalent according to Matz's recent comment. Well... I guess that when 
xxx does not include any special construction, one of the two *has* to be 
faster than the other one, either at compile time (parse tree constuction 
time I mean) or at runtime, right ? Which one ? I am used to using "xxx" 
but if 'xxx' is more efficient, I can use it instead (when both are 
semantically equivalent).

3) closure
I suspect that holding a closure means at least that the stack frame where 
the closure was created is referenced (and not garbage collected until the 
closure disappears) (I hope that the caller stack frames aren't referenced, 
are they ?). This may have big memory impacts, specially if the stack frame 
also holds references to large object. For sure it does not hurt to do some 
xxx=nil when xxx is not usefull anymore.

Is there a way to know about that, because it is nowhere in any of the 
book/article I have read so far, as if nobody cared (which is the subject 
this message wishes to address).

Detecting that a block does not need to reference its binding environment 
is probably non trivial (if possible at all), isn't it ? Yet, there are 
solutions, as in C++ where a smart use of "const" helps the compiler to 
understand that it can safely make a copy of what the closure needs, versus 
keeping every thing referenced.

3) type induction
One day the "dynamic typing" versus "static typing" language war will be 
over. That day, you will have the ability to switch smoothly from dynamic 
to static, during the optimization phase of your project. No need for C++ 
style templates then. All you will have to do is give hints to the 
compiler/interpreter about the domain/type/range of variables so that the 
compiler/interpreter can take advantage of that knowledge to optimize the 
code. I have seen that being applied years ago in Turbo Prolog to some 
extend, with incredible results. Any plan for Ruby about that ?

4) String
For a String intensive language like Ruby, there is an optimization that 
could be worth implementing. It is an optimization where a String is 
actually made of a reference to some potentially shared string 
representation, + an_offset, + a_size. That means that many operations then 
do not need to copy the string anymore (you update 'an_offset' and/or 
'a_size' instead, still referencing the same 'string_representation'). Has 
such an optimization been evaluated (it has almost no impacts on the 
external interface) ? I think this is a type of "Copy On Write" optimization.

5) Cache.
Reading the books about the implementation of Smalltalk gives some hints on 
how much efficient such caches can be. Candidates are: caching 
(a_class,a_method_name)=>a_method. This cache alone doubled the speed of 
the smalltalk interpreter !

Another one is for (a_class,an_instance_variable_name)=>an_index. Assuming 
an object has a value (i.e. has some set of instance variables) and if 
accessing that set directly is an option (with an index, i.e. versus 
sequentially or some other less efficient method) then again this can speed 
things up a lot (in the most common cases, where objects have instance 
variables layed out in the same order).

A less trivial cache is for inlining small methods. This is specially 
efficient for accessors. I think it is described too in the books about the 
implementation of Smalltalk 80.

after 7 years of existence, I guess that a profiling of Ruby does not show 
any hot-spot anymore (I remember malloc() beeing a big one in my 
interpreter, before I implemented pools ; strangely enough getimeofday() 
was another one, I had to implement an heuristic to estimate "how often" I 
had to call it to get a fast/reliable measure of quantums between thread 
switches)...

-----
As CPU gets faster, it becomes more and more compelling to use higher level 
languages. Yet, the faster the language, the more chances it has to be 
adopted *now* (versus when CPU's speed permit). I have some expectations 
that Ruby could be the next step, after machine code, C, C++ and Java. The 
faster it runs (without compromising too much about flexibility and 
dynamics), the better (but I guess everybody would agree on that). 
Impressive job !

Any info/links to Ruby's efficiency/tips ?

Thanks,

Jean-Hugues


In This Thread