
GraalVM: The holy graal of polyglot JVM? - mooreds
https://www.transposit.com/blog/2019.01.02-graalvm-holy/?c=hn
======
stephen
Supposedly es4x (powered by GraalVM) cracked the top-5 empower benchmarks,
while no other Node/JS frameworks are in top-20/top-30 (iirc):

[https://www.youtube.com/watch?v=JUJ85k3aEg4](https://www.youtube.com/watch?v=JUJ85k3aEg4)

The assertion in the ^ video (from the es4x author) is that node programs hop
across the http/libuv/v8/etc. boundaries all the time, and that's the majority
of the overhead, not actual business/program logic.

So, es4x sitting on graal brings all of those http/event loop/js runtime infra
projects into a single optimizing VM.

My memory is ~fuzy on the details, but I believe I got our apollo server
running running on es4x a few months back, and the latency was ~double node,
which was still impressive IMO, but I didn't see the amazing gains that the
author does. Not sure why.

~~~
xenadu02
I integrated a really simple JS runtime into a C# project once and found the
same thing. V8 was orders of magnitude slower due to the interop overhead.
Even though the IronJS compiler was very simplistic it was just so much faster
to do it inside the CLR and let the MSIL JIT optimize to the degree it was
able. An example of “worse is better” I suppose.

~~~
pjmlp
Just like Google did with their FloatMath class, after Dalvik got replaced by
a proper JIT compiler.

[https://developer.android.com/reference/android/util/FloatMa...](https://developer.android.com/reference/android/util/FloatMath)

------
cellularmitosis
Clojure "Hello, world" compiled with Graal running in Docker wasn't that bad:
[https://gist.github.com/cellularmitosis/66e024439cdefbc43375...](https://gist.github.com/cellularmitosis/66e024439cdefbc43375a4988882af11)

~~~
mooreds
Have you tried to build anything larger with Graal/Clojure?

~~~
lvh
I'm not GP, but we have done several native Clojure CLI apps with Graal:

[https://github.com/latacora/wernicke](https://github.com/latacora/wernicke)

[https://github.com/latacora/recidiffist-
cli](https://github.com/latacora/recidiffist-cli)

[https://github.com/latacora/caro](https://github.com/latacora/caro)

As well as several internal tools. It mostly works fine. Graal is actually the
default JDK on my development machine.

If there's one thing I'd fix, it's the ability to bake dylibs into the single
binaries. E.g. if you want good elliptic curve TLS, you need
sunec.so/dylib/dll, and part of the point for native-image for us is the
ability to ship a single binary.

------
emmelaich
Watch out if you choose the "enterprise" version; you can't use it for
development of an app that will be used in production.

~~~
grashalm
Indeed you need to buy the enterprise version for use in production. This is
funding the project so that the majority of the features can stay open source.

------
cromwellian
Until GraalJS can get even close to native JS VMs in performance, I still
think of it as Java VM.

[https://github.com/graalvm/graaljs/issues/74](https://github.com/graalvm/graaljs/issues/74)

~~~
mooreds
Maybe I am reading that issue incorrectly, but it seemed there was some back
and forth on startup time penalties and what constituted a valid benchmark to
compare the two systems.

------
bogidon
If what they just wanted was ES6 syntax, why not use Babel? But I guess what
they really wanted was to get off of their deprecated JS runtime (Nashorn).

------
eby
Great to see GraalJS is a realistic option. This polyglot VM idea is
fascinating, though it's not likely to go anywhere for my personal use until
GraalVM Python gets some traction. I check in on it now and then - every time
it hits HN - but it seems to be going nowhere. Anyone have any experience with
that?

------
mperham
GraalVM Community is GPLv2 with no support.[0]

GraalVM Enterprise costs $18/mo/core[1]. Every machine running GE needs a
license so a 16-core production server, 4-core staging box and 4-core dev
laptop will cost you $18*24 = $432/mo.

[0]: [https://www.graalvm.org/docs/faq/](https://www.graalvm.org/docs/faq/)
[1]:
[https://www.oracle.com/uk/a/ocom/docs/corporate/pricing/graa...](https://www.oracle.com/uk/a/ocom/docs/corporate/pricing/graalvm-
price-list.pdf)

~~~
samus
According to your first source, GraalVM

> is free for testing, evaluation, or for developing non-production
> applications

This means that the price model is, perhaps unsurprisingly, close to the
OracleJava one.

------
leoh
I found this helpful for getting going with OpenJDK 8/Graal on Mac OS X (but
the instructions are highly applicable to Linux as well).

[https://blog.softwaremill.com/graalvm-installation-and-
setup...](https://blog.softwaremill.com/graalvm-installation-and-setup-on-
macos-294dd1d23ca2)

~~~
joobus
There is a brew cask now: [https://github.com/DeLaGuardo/homebrew-
graalvm](https://github.com/DeLaGuardo/homebrew-graalvm)

------
altmind
Mind me asking some questions here?

(openjdk 8)

Do you need to install graalvm separately on the target system, or can the
compiler and runtime be packaged with the application in the uberjar?

Do you need to change the the java execution command line to enable graalvm?

Does end user need to know anything about truffle or is it api for language
developers?

~~~
lvh
GraalVM has several parts. If you want to run polyglot apps directly, yes, you
need to install GraalVM. If you compile your JVM apps to native, no, you get a
standalone binary.

Truffle is a developer-facing API.

------
ksec
I am still dreaming on Ruby, C extension, Rails, along with Javascript
bundling all running solely on GraalVM and nothing else.

Although Chris Seaton is no longer working on TruffleRuby, so I guess this
isn't going to happen anytime soon.

~~~
chrisseaton
> Although Chris Seaton is no longer working on TruffleRuby

I’m still working with TruffleRuby, just at Shopify instead of Oracle.

------
sitkack
It needs to support wasm on the front and the back, as well as RISC-V on the
back (and maybe on the front). When it does those things, it will be The Ring.

~~~
mooreds
WASM:
[https://github.com/oracle/graal/issues/1358](https://github.com/oracle/graal/issues/1358)

Wasn't able to find anything about RISC-V, file an issue :)

------
ryanthedev
I don't get it. Seems like a lot of overhead.

~~~
mooreds
Sorry, what do you mean?

~~~
ryanthedev
Bloated JVMs are not worth the trouble. Especially with containers...

~~~
pjmlp
Containers are catching up with features that bloated JVM have had for years,
without their monitoring and debugging capabilities in production.

We still don't see any business need to bother with containers, other that
being trendy and fashionable.

------
rthrowayay
Customers running js on your server in a Java VM doesn't sound very secure. I
could be wrong but when I see Java I get the suspicion that user code and
privileged server code are running in the same process. Of course they could
have a properly sandboxed java process and are just using Java because that is
what they are familiar with.

~~~
andrewvc
That perspective is somewhat dated to be blunt. A modern Java deployment would
be identical security wise to node, with one app per Java process running with
the minimum of privileges.

~~~
sk5t
I think you are being very polite here. Fearing the JRE/JVM in this particular
way falls somewhere between superstitious and ignorant.

~~~
EdwardDiego
I have no worries, because I make sure to sacrifice chickens to my Tomcat apps
each day. Although going into the cloud is making it trickier, chickens
generally can't fly that high.

