Safe override of Class#new?

class Class
alias :create :new

def new(*a,&b)
  obj = allocate
  obj.extend advice
  obj.send(:initialize,*a,&b)
  return obj
end

end

Note #advice is a sprcisl module that provides AOP features.

Like to get the opinions of other Ruby experts on this. What kind of
potential trouble am I asking for by using this?

Thanks,
T.

Like to get the opinions of other Ruby experts on this. What
kind of potential trouble am I asking for by using this?

(Not that I’m a Ruby expert, but anyway…)

You’ll run into a real slowdown of your application. AFAIK,
creating objects is one of the most expensive operations in any
OO language. Even when it’s implemented in C, as is done with
Ruby.

Yeah, sure, go ahead, implement it in Ruby and slow it down by
a factor of three!.. :}

(Just kidding…)

gegroet,
Erik V. - http://www.erikveen.dds.nl/


require “benchmark”

class Class
alias :create :new

def new_new(*a, &b)
obj = allocate
obj.send(:initialize, *a, &b)
obj
end
end

times = 1_000_000

Benchmark.bmbm do |bm|
bm.report(“old_new”) do
times.times do
Object.new
end
end

bm.report(“new_new”) do
times.times do
Object.new_new
end
end
end


           user     system      total        real

old_new 0.680000 0.010000 0.690000 ( 0.687622)
new_new 1.880000 0.010000 1.890000 ( 1.889214)

On Mar 5, 3:39 pm, “Erik V.” [email protected] wrote:

Yeah, sure, go ahead, implement it in Ruby and slow it down by

times = 1_000_000
Object.new_new
new_new 1.880000 0.010000 1.890000 ( 1.889214)

Ouch. Sigh, any way I seem to slice it, AOP in pure Ruby sucks.

T.

On Mar 6, 1:38 am, “Trans” [email protected] wrote:

Ouch. Sigh, any way I seem to slice it, AOP in pure Rubysucks.

OTOH, do you really want to AOP-ify all Ruby classes? Maybe you can
apply the advice to a limited subset of classes. The performance hit
might be acceptable in the end.

Trans schrieb:

Ouch. Sigh, any way I seem to slice it, AOP in pure Ruby sucks.

Welcome to the club :frowning:

Regards,
Pit

On Mar 6, 6:10 pm, “Paolo Nusco P.”
[email protected] wrote:

On Mar 6, 1:38 am, “Trans” [email protected] wrote:

Ouch. Sigh, any way I seem to slice it, AOP in pure Rubysucks.

OTOH, do you really want to AOP-ify all Ruby classes? Maybe you can
apply the advice to a limited subset of classes. The performance hit
might be acceptable in the end.

Thank you. I think that will indeed be enough.

T.