Sometimes I wonder how computing would look like if the default implementations of Java and C#[1] were available from the start as native compilers, instead of VM environments.
[1] Funny enough, the precursor of .NET was native and COM based, similar to what is now WinRT, more info here,
http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-co...
I think that's why the GP has the JIT in parentheses (to account for Julia's implementation, which does use a JIT-compiler, as opposed to D and Nimrod)
At least with Java that would defeat one of the main intents of its development. What would you think would be gained by having non-VM based implementations of these by default?
For the JVM, considerably lower startup/JIT warm-up times. You can really observe this nicely if you're using Zinc (the incremental Scala compiler), where you not only cut the startup overhead down to pretty much zero, but compilation really speeds up once the JIT has warmed up a bit. (Hence why Nailgun exists.)
Nailgun seems to be a way to keep the JVM running so you don't incur the startup overhead. Straightforward enough, and makes sense when your execution time is dominated by the JVM init.
Zinc seems to be a compiler based on Nailgun so that performance improves over time (particularly useful for long compiles or frequent compilation).
Neither of those though, move Java off a VM/JIT basis. However, as someone who hasn't seen them before, it was interesting reading and neat to see what's going on in the rest of the world.
That's the thing; the Nailgun workaround to an extent avoids the startup overhead, but can create other problems. E.g., when you're starting multiple builds on the same server (because the Nailgun server listens on a port, so you may have to sort out conflicts), if you have multiple users on the same machine (because anybody can connect to the socket, so you have a potential security problem), etc.
With a native option, this can be avoided (note that IBM offers an AOT compiler for Java).
Re: Nailgun - that seems like an implementation issue, but yes, if native compilation were present then Nailgun wouldn't exist (or need to) so the technical issues causing those problems wouldn't exist.
If you mean bytecode, well there isn't nothing speaking against it. After all it is just an implementation issue.
And bytecodes are not Java specific. Pascal, Ada, Modula-2 are languages with native compilers that also had originally bytecode compilers as well.
But most importantly, it would not confuse a whole generation of developers to mix strong typing with VM as form of implementation.
Many people discussing about languages in HN and reddit, tend to first of all, mix languages with implementations. Language X is compiled, interpreted, ..., sometimes without knowing multiple implementations are available.
Then many never used strong typed languages with native compilers, like Pascal, Modula-2 and so on. Their experience tends to be limited to JVM/.NET languages.
Outside of this world, they kind of know C and C++ are not as strong typed as those languages, don't have a GC and have native code compilers available.
Hence, strong typed typed languages are managed and require a VM.
This is a pattern I observed in many young developers without CS background.
This was the initial way Pascal and Modula-2 were developed. P-Code and M-Code were their bytecodes.
This didn't prevent most compiler vendors to introduce native compilers and use those bytecode implementations mainly for bootstraping purposes.
Writing compilers is not that dark magic thing many think about.
Well, except when targeting x86 processors, maybe. :)