[#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
Non-overridable and non-redefinable methods
Lately, I've been thinking about the future of ruby performance, ruby compilers, optimizations that a ruby compiler or VM could make, etc. I've come to the conclusion that one big problem in ruby is that you can redefine (or remove) a method (of an object or an instance method of a class) at any point while running. Here are the problem I see with being able to do this: - if the compiler/VM is somehow able to recognize that a certain variable (possibly temporary) is always a certain class, it still can't do any optimizations for the method calls to that object - bypassing method lookup, inlining the method, etc. - when writing C code for a method, many (most?) times you may bypass calling a method of an object (inlining the code instead) if you determine the exact class of an object. For example when you determine that an object is a Fixnum, you are likely going to do a "+" directly in C rather than calling the "+" method of Fixnum. If somebody goes and redefines Fixnum#+, you now have an inconsistency - C code that inlined the + will do something different compared the ruby code that didn't. - a similar issue can occur in ruby code where you may want to special case a certain class for performance reasons. Instead of taking the normal duck-typed route, you may want to use a different set of methods or algorithm (maybe similar to inlining you would do in C). If somebody redefined any of the methods you used, it may give you a functional difference for your special case class when you intended the functionality to be identical (you had that special case only for performance reasons). - in general, it seems like not really knowing what a given class does is a bad thing. To solve these problems and preserve existing functionality, I'd propose that there be a way to tag a method to not be redefinable or removable. Maybe similar to the way private/protected methods are done. I guess you could consider class instance methods and object methods (from the metaclass) separately. I think the problems above mainly deal with simple class instance methods. Another thing that hinders performance optimizations is the lack of the ability to say that a method is not overridable in any derived classes. This mostly applies to many methods in Object and Kernel (because everything gets those methods), but could apply elswhere if the VM/compiler couldn't determine the exact class but possibly the kind_of. Here are methods in Object that would be advantageous to inline (and not allow to be overridden) for performance: __id__ __send__ class equal? extend freeze frozen? id instance_eval instance_of? instance_variable_get instance_variable_set instance_variables is_a? kind_of? method methods nil? object_id private_methods protected_methods public_methods remove_instance_variable respond_to? send singleton_method_added singleton_method_removed singleton_method_undefined singleton_methods taint tainted? untaint I'd propose something like private/protected to say these are not overridable. Or am I off base? Is there another way to get this kind of in-line performance without adding these non-overridable/non-redefinable capabilities. __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com