On Thursday, 3 April 2014 at 08:18:01 UTC, Bienlein wrote:
My knowledge of compiler constructions is fairly limited and I
might be wrong, but it seems to me that the Scala compiler is
broken. Scala has gained some bad reputation for long build
times (just google for Scala and build time) which IMHO cannot
be explained by the large number of language features. D has a
comparable large number of language features and compiles much
faster than Scala.
D has been designed from the beginning with caution on
compilation speed and thinking about how to keep it slow to
begin with. D not only in that way is a language that was
thought out. On the contrary, Scala seems to me to be a
language where many features of various languages were thrown
into one and then a compiler was built for it. The incremental
Scala compiler pretty much rescues the build time problem,
though, and they are mostly lucky now. Also, IMHO, implicits
are really crazy and it should have been clear from the
beginning that they will become a problem for scalable build
times, see
http://java.dzone.com/articles/implicits-scala-conversion.
Interestingly. Martin Odersky got his Ph.D. from Niklaus Wirth
at the ETH and I don't want to know what Wirth would say about
implicits.
The presentation by Paul Phillips was discussed in the Scala
forums at great length:
What's up with Paul Phillips?
https://groups.google.com/forum/?hl=de#!topic/scala-debate/IgrKCdConlA
54 replies
What's up with Paul Phillips?
https://groups.google.com/forum/?hl=de#!topic/scala-user/ImqlClXTrS4[201-225-false]
201 replies
Sadly, the only serious language on the JVM besides Java8 is
Scala. Ceylon has not taken off at all after becoming 1.0.
Groovy's language extensions are basically AST transformations
and not truly baked into a "real" language. Nobody knows how
Kotlin will be doing when it turns 1.0 maybe somewhen in
autumn/winter this year.
What about Clojure? It is getting real world use. The recent
release makes it easier to call Clojure from Java. Example:
IFn map = Clojure.var("clojure.core", "map");
IFn inc = Clojure.var("clojure.core", "inc");
map.invoke(inc, Clojure.read("[1 2 3]"));
is all you need to use Clojure's map from a Java program.
https://github.com/clojure/clojure/blob/master/changes.md