The great advantage of Julia is that it produces it compiles “dynamic” code into binaries that look very much like statically compiled code. You will find that ultimately efficient Julia code runs with performance comparable to fully AOT compiled languages such as C++ (and better in some cases). It is extremely well suited to technical computing despite not being fully AOT. Having come from C++ myself I can understand you being somewhat skeptical about this, but I’m sure that if you give it a chance you will find not having static binaries not to be a significant disadvantage.
eval can be useful, but it is not something that most users use often, and is almost never necessary. The primary use of
eval is usually in generating “boilerplate” code, but even in that case it is often better to use macros and generated functions. In fact, I would recommend that beginners not use
eval at all until they have a bit of a better understanding of the Julia compiler.
Yes, everybody definitely wants this, it has been discussed extensively on these forums, but it just isn’t a priority yet. You will find that for the vast majority of applications it simply isn’t necessary. There has been some experimentation with this, see here. I strongly suggest, however, that you first explore “dynamic” Julia. It probably isn’t at all what you seem to be expecting. The disadvantages the Julia JIT compiler have compared to static code are really very minimal in the context of scientific computing.