views:

184

answers:

5

Is it possible to design something like Ruby or Clojure without the significant performance loss in many situations compared with C/Java? Does hardware design play a role?

Edit: With significant I mean in an order of magnitudes, not just ten procent

Edit: I suspect that delnan is correct with me meaning dynamic languages so I changed the title

+1  A: 

Don't confuse the language design with the platform that it runs on.

For instance, Java is a high-level language. It runs on the JVM (as does Clojure - identified above, and JRuby - a Java version of Ruby). The JVM will perform byte-code analysis and optimise how the code runs (making use of escape analysis, just-in-time compilation etc.). So the platform has an effect on the performance that is largely independent of the language itself (see here for more info on Java performance and comparisons to C/C++)

Brian Agnew
I tried to state my question more precisely
Stefan Schmidt
-1, Doesn't answer the question.
one-zero-zero-one
I see the question has been modified since I answered it by adding 'Java' to the criteria. Regardless, I think it's important to distinguish between the language and the platform.
Brian Agnew
If I compare Ruby MRI to C and Clojure to Java are they not on the same plattform?
Stefan Schmidt
+8  A: 

Performance depends on many things. Of course the semantics of the language have to be preserved even if we are compiling it - you can't remove dynamic dispatch from Ruby, it would speed things up drmatically but it would totally break 95% of the all Ruby code in the world. But still, much of the performance depends on how smart the implementation is.

I assume, by "high-level", you mean "dynamic"? Haskell and OCaml are extremely high-level, yet are is compiled natively and can outperform C# or Java, even C and C++ in some corner cases - especially if parallelism comes into play. And they certainly weren't designed with performance as #1 goal. But compiler writers, especially those focused onfunctional languages, are a very clever folk. If you or I started a high-level language, even if we used e.g. LLVM as backend for native compilation, we wouldn't get anywhere near this performance.

Making dynamic languages run fast is harder - they delay many decisions (types, members of a class/an object, ...) to runtime instead of compiletime, and while static code analysis can sometimes prove it's not possible in lines n and m, you still have to carry an advanced runtime around and do quite a few things a static language's compiler can do at compiletime. Even dynamic dispatch can be optimized with a smarter VM (Inline Cache anyone?), but it's a lot of work. More than a small new-fangeled language could do, that is.

Also see Steve Yegge's Dynamic Languages Strike Back.

And of course, what is a significant peformance loss? 100 times slower than C reads like a lot, but as we all know, 80% of execution time is spent in 20% of the code = 80% of the code won't have notable impact on the percieved performance of the whole program. For the remaining 20%, you can always rewrite it in C or C++ and call it from the dynamic language. For many applications, this suffices (for some, you don't even need to optimize). For the rest... well, if performance is that critical, you should propably write it in a language designed for performance.

delnan
*Thank you* for writing "C or C++" instead of "C/C++".
Jon Purdy
I never understood the hatred of the C/C++ terminology, since I always read it as "C or C++", the same as I'd read "You can use a dynamic language like Tcl/Python/Ruby" as being an OR statement also.
RHSeeger
+1  A: 

Loss compared to what? If you need a garbage collector or closures then you need them, and you're going to pay the price regardless. If a language makes them easy for you to get at, that doesn't mean you have to use them when you don't need them.

If a language is interpreted instead of compiled, that's going to introduce an order of magnitude slowdown. But such a language may have compensating advantages, like ease of use, platform independence, and not having to compile. And, the programs you write in them may not run long enough for speed to be an issue.

There may be language implementations that introduce slowness for no good reason, but those don't have to be used.

Mike Dunlavey
A: 

You might want to look at what the DARPA HPCS initiative has come up with. There were 3 programming languages proposed: Sun's Fortress, IBM's X10 and Cray's Chapel. The latter two are still under development. Whether any of these meet your definition of high-level I don't know.

And yes, hardware design certainly does play a part. All 3 of these languages are targeted at supercomputers with very many processors and exhibit features appropriate to that domain.

High Performance Mark
A: 

It's certainly possible. For example, Objective-C is a dynamically-typed language that has performance comparable to C++ (although a wee bit slower, generally speaking, but still roughly equivalent).

mipadi
Would you consider it a good idea to use Objective-C for web development?
Stefan Schmidt
Not really. It doesn't have any good web frameworks.
mipadi