[#5563] Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...>

Lately, I've been thinking about the future of ruby

44 messages 2005/08/19
[#5564] Re: Non-overridable and non-redefinable methods — Austin Ziegler <halostatue@...> 2005/08/19

On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:

[#5571] Re: Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...> 2005/08/19

--- Austin Ziegler <halostatue@gmail.com> wrote:

[#5574] Re: Non-overridable and non-redefinable methods — TRANS <transfire@...> 2005/08/20

Just wanted to add a few things.

[#5581] Re: Non-overridable and non-redefinable methods — Austin Ziegler <halostatue@...> 2005/08/20

On 8/19/05, TRANS <transfire@gmail.com> wrote:

[#5583] Re: Non-overridable and non-redefinable methods — "David A. Black" <dblack@...> 2005/08/20

Hi --

[#5585] Re: Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...> 2005/08/20

--- "David A. Black" <dblack@wobblini.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

20 messages 2005/08/22

Re: Non-overridable and non-redefinable methods

From: Eric Hodel <drbrain@...7.net>
Date: 2005-08-19 22:19:56 UTC
List: ruby-core #5572
On 19 Aug 2005, at 12:32, Eric Mahurin wrote:

> --- Eric Hodel <drbrain@segment7.net> wrote:
>> 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.

I'd trade BlankSlate proxies for speed any day of the week.  Ruby's  
current speed pays the bills without making the servers sweat, so I  
don't see what more speed gives me when I have to throw away  
flexibility.

-- 
Eric Hodel - drbrain@segment7.net - http://segment7.net
FEC2 57F1 D465 EB15 5D6E  7C11 332A 551C 796C 9F04


In This Thread