4 ms·
> I think that all the metaprogramming magic that Ruby allows is at odds with speed. I don't think so, Java and C# also have metaprogramming (reflection, class
by laureny 13y ago
> I think that all the metaprogramming magic that Ruby allows is at odds with speed.
I don't think so, Java and C# also have metaprogramming (reflection, class loading, bytecode manipulation) and they are still plenty fast.
Ruby's liability is that it's dynamically typed, and this puts a hard limit on how fast it can be (and also on how toolable it can be, but that's a separate discussion).
- adamnemecek 13y agoI mean metaprogramming support is kind of a spectrum and neither Java nor C# support it to the same degree as Ruby. For one thing and for another, C# and Java have large corporations supporting those languages which try very hard to make the runtimes fast so it's not a fair comparison.
- pjmlp 13y agoThen compare it with compilers for dynamic languages like Lisp, Scheme, Dylan, Smalltalk...
- adamnemecek 13y agoI said tricky, not impossible but I will, even though I'm not sure I'm really qualified to talk about these languages for one thing and for another, I think that these sort of comparisons are pretty pointless to begin with. Also I'm not sure where you are exactly going with your comment. Lisp + Scheme: I mean if nothing else, people have been trying to make them fast for the last more than half of century. Plus AFAIK most Lisp meta-programming code is generated during compile time through macros not during run-time. Dylan: I don't really know anything about Dylan but it seems to have come out of Apple and CMU, so there's that. Plus it seems to be just a Lisp dialect. Smalltalk: You consider Smalltalk fast? Lol.
- pjmlp 13y ago>Smalltalk: You consider Smalltalk fast? Lol. Well, any Smalltalk JIT beat the standard Ruby implementation hands down, what can I say?!
- andrewvc 13y agoReflection in Java is in fact slow. The difference is that in ruby that stuff is pervasive, in Java you rarely use reflection.
- InclinedPlane 13y agoHow much metaprogramming is normally going on behind the scenes in a typical Ruby/Rails app vs Java or C# though? If you do a lot of reflection in Java then you'll end up with some pretty crummy performance, but the average Java program doesn't have much.
- philwelch 13y agoIt's not just the actual metaprogramming, i.e. define_method is slow. It's also the runtime implications of metaprogramming being possible, i.e. needing to dispatch each and every method call dynamically just in case someone called define_method. Java can turn every method call into a function pointer at compile time.
- bronson 13y agoMetaprogramming is code using define_method (optionally closing over local variables), instance_eval, and stuff of that nature. Even with bytecode manipulation they would be very difficult to emulate in Java/C++ and would be quite slow. That said, JavaScript is not far off of Ruby's monkeying capabilities and yet pretty darned fast.