4 ms·
I am mostly a Java guy, but when people claim that Java can also compile to binaries, I really don't like that. It's kind of true... but with so many caveats i
by brabel 5y ago
I am mostly a Java guy, but when people claim that Java can also compile to binaries, I really don't like that.
It's kind of true... but with so many caveats it's almost a lie.
* it compiles so slowly even basic applications can take 10 minutes to compile. What the hell are they doing all that time?!? Go can compile to multiple OSs architectures on the same machine and it takes a couple of seconds even for large code bases!!
* you can't use most of the Java ecosystem as reflection is endemic... good luck manually declaring everywhere reflection will be used.
* the loss of the JIT hurts peak Java performance a lot. Java runs as fast as Go *once the JVM is warmed up*! Native-image peak performance tends to be some way behind.
Not saying GraalVM native-image is useless, it can be used if you have the energy and knowledge to get past the issues... but as someone who konws Go as well as Java, if I am going to the trouble of going native, I'd just use Go without a doubt.
- cle 5y agoAlso good luck if you need to cross-compile. The Go toolchain for that is seamless, Graal’s is non-existent (because it is fundamentally incompatible with the way native image compilation works).
- pjmlp 5y agoSo you are a Java guy and are only aware of GraalVM, while ignoring all the AOT commercial offerings since 2000? ExcelsiorJET, J/Rockit, Websphere Real Time, PTC or Aicas aren't GraalVM. Also if you don't want to lose JIT, while having the advantage of AOT compilation, JIT caches are a thing, nowadays available for free on OpenJDK, OpenJ9 and Android (even though it isn't proper Java).
- brabel 5y agoI've been working with Java since 2009 only... those things you mention have never been used anywhere I've seen since then (but yes, I heard of them as things of the distant past that no one used).