JVM still lacks some serious functions, namely, links and monitors. I'm not
that sure you can emulate those on JVM reliably without implementing them as
fundamental operations.
And then, there's still problem of interoperability. Even when you write your
code in Erlang@JVM, it still needs to talk to Java code, which doesn't have
yield points.
> [...] but you can have those millions of processes on the JVM, too [...]
In theory, yes. In practice, it's very difficult. JVM thread corresponds to
a thread of host OS. Spawning and keeping those is very slow and expensive
compared to Erlang's processes. You could have a pool of pre-spawned workers,
but suddenly you can't spawn a worker for each connection and hope it will all
work; you need to manage the pool. You also could try to implement green
threads in JVM, as they are in Erlang, but you would need an entirely new
compiler to insert yield points at appropriate places, or else you would get
exactly the same problems with green threads as everywhere else.
Under JVM you just don't spawn a thread for each and every activity, because
you would choke your system. The whole point of developing Erlang was to allow
exactly this programming style in a manner safe against processing
congestion.
And then, there's still problem of interoperability. Even when you write your code in Erlang@JVM, it still needs to talk to Java code, which doesn't have yield points.