[#5524] Division weirdness in 1.9 — "Florian Frank" <flori@...>
Hi,
[#5536] bug in variable assignment — Mauricio Fern疣dez <mfp@...>
Hi,
On Mon, Aug 08, 2005 at 11:36:22AM +0900, nobuyoshi nakada wrote:
hi,
Hi,
[#5552] Exceptions in threads all get converted to a TypeError — Paul van Tilburg <paul@...>
Hey all,
[#5563] Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...>
Lately, I've been thinking about the future of ruby
On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
--- Austin Ziegler <halostatue@gmail.com> wrote:
Just wanted to add a few things.
On 8/19/05, TRANS <transfire@gmail.com> wrote:
Hi --
--- "David A. Black" <dblack@wobblini.net> wrote:
On 8/20/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
On 8/20/05, TRANS <transfire@gmail.com> wrote:
On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:
--- Austin Ziegler <halostatue@gmail.com> wrote:
On 20 Aug 2005, at 02:05, Eric Mahurin wrote:
Eric Hodel wrote:
Eric Mahurin wrote:
Hi,
--- SASADA Koichi <ko1@atdot.net> wrote:
Hi,
--- SASADA Koichi <ko1@atdot.net> wrote:
[#5609] Pathname#walk for traversing path nodes (patch) — ES <ruby-ml@...>
Here is a small addition to Pathname against 1.9, probably suited
Evan Webb wrote:
In article <43094510.6090406@magical-cat.org>,
[#5651] File.extname edge case bug? — Daniel Berger <Daniel.Berger@...>
Hi all,
[#5662] Postgrey — Shugo Maeda <shugo@...>
Hi,
[#5676] uri test failures. (Re: [ruby-cvs] ruby/lib, ruby/lib/uri: Lovely RDOC patches from mathew (metaATpoboxDOTcom) on URI/* and getoptlong.rb) — Tanaka Akira <akr@...17n.org>
In article <20050824050801.5B4E0C671F@lithium.ruby-lang.org>,
[#5680] Problem with mkmf and spaces in directory names? — noreply@...
Bugs item #2308, was opened at 2005-08-25 13:42
[#5685] Wilderness Project — "Charles E. Thornton" <ruby-core@...>
OK - I see where ELTS_SHARED is used to implement COPY-ON-WRITE
Re: Non-overridable and non-redefinable methods
Hi,
Florian Growrote:
> I'd propose doing it similar to YARV. Optimize 1 + 2, but only if you
> clearly see a Fixnum.freeze at the beginning of the file.
YARV doesn't inline Fixnum#+. If Fixnum#+ is redefined, YARV invoke
redefined function (same as current Ruby interpreter). ... In the
future version. I have already inserted redefine check code, but not
write redefine notify code (in rb_define_method()).
pseudo instruction code of current YARV:
instruction opt_plus(recv, obj){
if(FIXNUM_P(recv) && FIXNUM_P(obj) &&
!REDEFINED(FIXNUM, +)){
/* in real code, you must check overflow */
return INT2FIX(FIX2INT(recv)+FIX2INT(obj));
}
else if(...){
...
}
else{
return recv.__send__(:+, obj);
}
}
This optimization makss good performance.
===============================================
Another idea:
fixnum_plus(recv, obj){
if(FIXNUM_P(recv) && FIXNUM_P(obj)){
return INT2FIX(FIX2INT(recv) + FIX2INT(obj));
}
else{
vm->plus_func = search_plus_func(recv, obj);
return vm->plus_func(recv, obj);
}
}
search_plus_func(recv, obj){
if(FIXNUM_P(recv) && FIXNUM_P(obj) && !redefine(Fixnum#+)){
return fixnum_plus;
}
else if(CLASS_OF(recv) == String && CLASS_OF(obj) == String
&& !redefine(String#+)){
return string_plus;
}
...
return normal_dispatch;
}
vm->plus_func = fixnum_plus;
define_method(klass, id, body){
...
if(klass == Fixnum && id == :+){
vm->plus_func = normal_dispatch;
}
...
}
instruction opt_plus(recv, obj){
func = vm->plus_func;
return func(recv, obj);
}
* good:
* flexibile replacement of inlining code with context
* bad:
* C function call overhead
* design "normal_dispatch" is difficult
===============================================
Re-compile inlining code if someone redefines some special methods, has
some difficulty. If re-compiled function was already called, you must
replace return address of method like "on stack replacement".
===============================================
BTW, I hate redefinable method for VM performance (of course!). But
redefine method is power of language (flexibility, refrectionability).
IMO, if you restrict Ruby's language specification, it will be Ruby--.
I'm trying to beet this "bad specification for performance" with VM
implementation technique (not change specification).
(But current ruby interpreter inlinie "/foo/ =~ expr" ...)
Of course, I want to add restriction to Ruby's specification :)
Especially Evil Eval!
Excume me my poor English.
Regards,
--
SASADA Koichi at atdot dot net