[#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
--- Eric Hodel <drbrain@segment7.net> wrote:
> On 19 Aug 2005, at 10:03, Eric Mahurin wrote:
> > 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 either never call these methods, or would use them for
> making proxy
> objects.
>
> send can be quite useful to override, and respond_to? pairs
> with
> method_missing, so it can't be in the list. id is used
> extensively
> by Rails, and is deprecated anyhow.
>
> I don't see why remove_instance_variable is on the list. I
> may *not*
> want to remove certain instance variables.
I'm not saying all of these should be on the list to be
non-overridable/removable. But, anything you put in this list
could offer a performance advantage in some future ruby
VM/compiler.
The ones I think are most important are:
__id__ (and maybe object_id)
__send__ (and maybe send)
equal?
nil?
Some of these even say in the docs that they shouldn't be
overridden. And I think when you override __send__, it gives a
warning. I'm proposing an enforcement to this. This is
sort-of like "final" in java. Or not "virtual" in C++.
It seems kind of silly that all of the above has to go through
the method call overhead when the in-lining what these do is so
trivial.
> Also, we couldn't make dead-simple proxies like this:
>
> class BlankSlate
> instance_methods.each { |m| undef_method m unless m =~
> /^__/ }
> end
>
> class Proxy < BlankSlate
>
> def initialize(obj)
> @obj = obj
> end
>
> def method_missing(sym, *args, &block)
> @obj.__send__(sym, *args, &block)
> end
>
> end
>
> class Foo
> def x; y; end
> protected
> def y; @y = :stuff; end
> end
>
> foo = Foo.new
> dfoo = Proxy.new foo
>
> p foo.protected_methods
> p dfoo.protected_methods
>
> p dfoo.send :x
> p dfoo.instance_variables
You couldn't do this - unless the only
non-overridable/removable methods were __send__ and __id__ -
because the above code didn't want to mess with them.
This is a performance vs. flexibility tradeoff. You'd want to
find the right list of non-overridable/removable methods to
give the best balance.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com