[#9381] Native Thread extension for 1.8 — "Abhisek Datta" <abhisek@...>
Hello,
[#9382] the sign of a number is omitted when squaring it. -2**2 vs (-2)**2 — <noreply@...>
Bugs item #6468, was opened at 2006-11-03 17:25
On 11/3/06, noreply@rubyforge.org <noreply@rubyforge.org> wrote:
Jacob Fugal wrote:
Hi,
Yukihiro Matsumoto wrote:
[#9385] merge YARV into Ruby — SASADA Koichi <ko1@...>
Hi,
On Nov 3, 2006, at 9:11 PM, SASADA Koichi wrote:
On 11/4/06, SASADA Koichi <ko1@atdot.net> wrote:
On Monday 06 November 2006 16:01, Kirill Shutemov wrote:
On Monday 06 November 2006 10:15, Sylvain Joyeux wrote:
On 11/6/06, Sean Russell <ser@germane-software.com> wrote:
On Monday 06 November 2006 13:37, Kirill Shutemov wrote:
On 11/6/06, Kirill Shutemov <k.shutemov@gmail.com> wrote:
On 11/8/06, Austin Ziegler <halostatue@gmail.com> wrote:
On 11/6/06, ville.mattila@stonesoft.com <ville.mattila@stonesoft.com> wrote:
On 2006-11-07 00:47:20 +0900, Kirill Shutemov wrote:
On 11/6/06, Marcus Rueckert <mrueckert@suse.de> wrote:
On Tue, 7 Nov 2006, Joshua Haberman wrote:
[#9402] fast mutexes for 1.8? — MenTaLguY <mental@...>
Many people have been using Thread.critical for locking because Ruby
On Mon, 6 Nov 2006, MenTaLguY wrote:
On Mon, 2006-11-06 at 23:17 +0900, Hugh Sasse wrote:
On Tue, 7 Nov 2006, MenTaLguY wrote:
On Mon, 6 Nov 2006, MenTaLguY wrote:
On Mon, 2006-11-06 at 23:21 +0900, khaines@enigo.com wrote:
On Mon, 2006-11-06 at 09:38, MenTaLguY wrote:
[#9450] Bikeshed: No more Symbol < String? — Kornelius Kalnbach <murphy@...>
Hi ruby-core!
Hi,
David wrote:
On Nov 7, 2006, at 2:28 AM, Yukihiro Matsumoto wrote:
Hi,
Hi --
Hi,
Too bad, I was rejoicing to remove the need of
[#9470] Ruby performanmce improvements — "Michael Selig" <michael.selig@...>
I know you guys are in the middle of YARV stuff, but I thought you might be
Hi,
[#9472] Re: fast mutexes for 1.8? — Brent Roman <brent@...>
At RubyConf 2005 I gave an off-the-wall little talk about the
[#9493] Future Plans for Ruby 1.8 Series — URABE Shyouhei <shyouhei@...>
This week Japanese rubyists were talking about the future of ruby_1_8
[#9515] External entropy pool for random number generator — "Kirill Shutemov" <k.shutemov@...>
In the attachment patch which allow to use external entropy pool for
Hi,
On 11/13/06, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
Hi,
On 11/13/06, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Hi,
[#9520] Re: fast mutexes for 1.8? — Brent Roman <brent@...>
[#9540] Different return values for setter methods — "Marcel Molina Jr." <marcel@...>
>> class Setter; def set=(value) 1 end end
[#9547] Net::FTP should check the control connection on EPIPE — Simon Williams <simon.williams@...>
Hi,
Hi,
On Tue, Feb 06, 2007 at 11:23:01AM +0900, Shugo Maeda wrote:
[#9554] Ruby 1.[89].\d+ and beyond. — Hugh Sasse <hgs@...>
I've been thinking about how version numbers are restricting what we can do.
On Fri, 17 Nov 2006, Eric Hodel wrote:
On Nov 16, 2006, at 12:02 PM, Hugh Sasse wrote:
On 11/16/06, Eric Hodel <drbrain@segment7.net> wrote:
On Nov 19, 2006, at 6:35 AM, Robert Dober wrote:
On Nov 19, 2006, at 8:13 AM, James Edward Gray II wrote:
> What if we need to exceed 1.8.9?
On Nov 19, 2006, at 10:30 PM, Kornelius Kalnbach wrote:
On Mon, 20 Nov 2006, Eric Hodel wrote:
Hugh Sasse wrote:
[#9572] io_write (io.c) bug (and its fix) under MS Windows for GUI apps (rubyw) — "Mounir Idrassi" <idrassi@...>
Hi all,
[#9581] type information — Deni George <denigeorge@...>
Hi,
Nobuyoshi Nakada wrote:
[#9604] #ancestors never includes the singleton class (inconsistent) — <noreply@...>
Bugs item #6820, was opened at 2006-11-22 08:49
Hi,
> It is supposed to. Singleton classes (or eigenclasses, if you want to
On 11/27/06, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
> 2) You could think of all objects already having a singleton class
Re: Ruby performanmce improvements
Michael Selig wrote:
> I found 3 main areas which I then focused on:
> 1) rb_call() especially rb_call0()
> 2) Loops & rb_yield(), especially rb_yield_0()
> 3) The large number of recursive calls to rb_eval()
It's perhaps interesting to note I have made similar changes in the past
for JRuby, and achieved substantial performance gains as a result. More
below.
> So addressing these one at a time:
> 1) rb_call()
> I found that many of these calls are to CFUNC (internal C) methods such as
> Fixnum#+, most of which are simple, and don't access anything other than
> their parameters. However, in order to execute these methods, ruby is still
> doing quite a bit of work in rb_call0(), such as setting up a stack frame
> etc, which is usually not used. So I made an optimisation that if a CFUNC
> method is being called, and no block is being passed to it, then it bypasses
> stack frame creation. (I also had to make a small hack to "backtrace()" to
> handle errors in this case).
In most of our interpreter objects (stack frames, variable scopes, etc)
any nontrivial data structures are created lazily. This allows most
calls to run without creating unnecessary objects. We're doing more and
more of this, and it's helped a lot each time we make a pass over the code.
>
> 2) Loops & rb_yield()
> Most of Ruby's loops end up calling rb_yield() for each iteration. However
> much of the work that rb_yield_0 does each time can be often be done once at
> the start of the loop:
> - Pushing frame, block, vars, class etc
> - Freeing/creation of dynamic variables (instead they can be initialized
> to NIL each time, unless the context has been saved)
> Also loops done by rb_iterate() (via an IFUNC stub) can be simplified
> further to reduce the overhead of "double-yield".
This one I haven't tried, but it's a great idea. I could modify the
yield logic in our ThreadContext to do loops natively, likely improving
the performance of such loops quite a bit. One concern would be making
sure the looped block doesn't capture additional scope...you'd
negatively effect the resulting capture, for example, in the following case:
x = 1
numbered_procs = []
loop {
y = x
numbered_procs << proc { puts y }
x = x + 1
}
numbered_procs.each { |p| p.call }
Should print 1 2 3 4, but if each proc was pointing at the same
containing dynamic vars, it would print 4 4 4 4. Of course I'm not sure
how Ruby handles capturing these dynamic var scopes as well as I
understand JRuby.
>
> 3) rb_eval() calls
> I simply inlined the code for common, simple nodes such as: NODE_LIT,
> NODE_LVAR etc in certain places within rb_eval(), which resulted in a large
> reduction in the number of calls to rb_eval().
I've done a tiny bit of inlining, which has helped. Ruby may also want
to look at handling simple eval tail-calls by altering local vars and
jumping back to the top. This reduced JRuby's stack footprint
substantially and improved performance a measurable amount.
Of course the creation of a bytecode interpreter that doesn't deepen
stack and performs all evaluation in a single call is better, but that
will have to wait for YARV. I'm planning to implement a simple YARV
machine for JRuby soon (a simple version already can run fib()), and
will report back any performance results I get out of that.
I hope that perf changes like these can get into the 1.8 line. There's a
lot of low-hanging fruit in Ruby 1.8's current design that could improve
performance until 2.0 is around.
--
Charles Oliver Nutter, JRuby Core Developer
Blogging on Ruby and Java @ headius.blogspot.com
Help spec out Ruby today! @ www.headius.com/rubyspec
headius@headius.com -- charles.nutter@sun.com