5 ms·
At least you can write java-style code (or call java seamlessly) for whatever is performance-critical. I agree that idiomatic Scala can be too slow in some cas
by jongraehl 16y ago
At least you can write java-style code (or call java seamlessly) for whatever is performance-critical. I agree that idiomatic Scala can be too slow in some cases (it should be faster due to static typing than Clojure wherever methods aren't generic, or are specialized).
- loewenskind 16y ago>should be faster due to static typing than Clojure Uh, why? Are all object types known at runtime in Clojure? I bet they are. And this is exactly what Hotspot was designed to make fast [1]. [1] http://www.strongtalk.org http://www.strongtalk.org
- kikibobo69 16y agoUnfortunately "as good or better" performance is not realized yet, at least not at theThe Computer Language Benchmarks Game[1]. More code, more time, more memory required by Clojure than Scala, to solve the same problems. However the Clojure implementations on the site are still quite young, so some improvement may be possible. [1] http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=clojure&lang2=scala http://shootout.alioth.debian.org/u32/benchmark.php?test=all...
- loewenskind 16y agoMy point was that it isn't the typing that makes it fast. Hotspot is based on the idea that the type is known at runtime. The Shootout probably wont show good results for this because it takes a little bit for Hotspot to get the most out of it. If you look at the Mandelbrot demo in Strongtalk it takes about 3 full runs to get the best speed.
- kikibobo69 16y agoEither I don't understand, or you are mistaken. Clojure is significantly slower than Java and Scala in the shootout. Presumably Hotspot kicks in, or doesn't, more or less equivalently in all 3 cases. The dynamic languages (Clojure, Groovy, JRuby) are all slower than the statically typed languages (Java, Scala); what else would cause that?
- loewenskind 16y ago>what else would cause that? How much work the code that they generate does. Clojure is mostly pure right? If you have, e.g. a btree and you change some nodes the old notes won't get deleted, a new tree will be created where some of the nodes point to the still valid old ones and some point to your changes. That's more work then just mutating the variables.
- gtani 16y agoThis raises an interesting question for igouy: there are dozens of jvm knobs you can pull to optimize each benchmark: "-server", "XX:MaxInlineSize", the many "XX" options to play with GC etc. I'm assuming that the same settings would be used for java, scala, and groovy for any single benchmark, but are these switches tuned for that particular benchmark, or the same used for all benchmarks?
- therockhead 16y agoClojure is using a lot more memory, any idea why that is?
- runT1ME 16y agoImmutable data structures?
- Dn_Ab 16y agoWhy and where (which idioms) is this the case? Is this due to type erasure on generics or something else? I ask this as this is the sort of knowledge that remains implicit amongst the experienced. p.s. i'm new to scala (and using it on app engine and android) but have extensive F# and decent haskell and ocaml experience and have found stuff like hyperpolyglot useful but this type of knowledge is not readily found.