C++ is seriously slow in compiling comparing to other languages. And the problem lies within its design. There's a reason why distributed compilers are so common for C++ (and C) but quite uncommon for other languages.Depending on how the engine is built, compiling C++ is lightning fast.
Unlike Java/UScript, you don't have to pass it to any kind of byte code translator at compile time, or run time.
First of all UnrealScript really had a barebones compiler that didn't even support incremental compiling. That made it slow. Java, most production level compilers are very fast.
As for bytecode to machine code translation. That's also done by C++ compilers (but only at compiletime). For Java is usually done at runtime (by a JIT), but it can also be done at compiletime, but of course makes your code less portable. Anyway, it's a non argument.
It can be natively compiled and loaded/run on the fly.
That's the most awesome part. Bytecode runtimes provide a VM that makes it easier to replace code. As long as the data structure hasn't changed it's dead simple to replace the code.
But with machine code, there usually is no clear separation of code and data in memory. To Epic managed to create a subsystem that makes this process possible for their engine. Although you probably have to conform completely to their framework for this functionality to work (using external code could probably break the hot replacing).
But you are probably only going to use that hot replacing feature for tweaking the code and not major changes.
I would love to see this on Linux for once
It's already available, for example: Ksplice