Well, the problem of course is that at this point, JIT-compiled dynamic languages can blow away statically compiled languages in performance. A proper JIT can extrapolate most data types, and kill the overhead of having dynamic types, except when you actually use them. Ditto for most other high-level features. At that point, you’re at the same speed. In addition, there is a number of JIT-specific optimizations that, at this point, give you about a 10 percent boost over statically compiled. In addition, the GC can optimize the cache (in typical cases, cache-optimized code is 10x faster than unoptimized, although the GC will likely gain a bit less than the 10x from hand-optimizing memory layout).
In the long term, you can expect JITs to pick data types. I say “I want a list”, and the JIT picks whether I have an array, a linked list, or some kind of tree structure, based on statistics of past use.
Peter - 2007-10-31 10:53:58
Well, the problem of course is that at this point, JIT-compiled dynamic languages can blow away statically compiled languages in performance. A proper JIT can extrapolate most data types, and kill the overhead of having dynamic types, except when you actually use them. Ditto for most other high-level features. At that point, you’re at the same speed. In addition, there is a number of JIT-specific optimizations that, at this point, give you about a 10 percent boost over statically compiled. In addition, the GC can optimize the cache (in typical cases, cache-optimized code is 10x faster than unoptimized, although the GC will likely gain a bit less than the 10x from hand-optimizing memory layout).
In the long term, you can expect JITs to pick data types. I say “I want a list”, and the JIT picks whether I have an array, a linked list, or some kind of tree structure, based on statistics of past use.
Sadly, no one has yet written a good dynamic JIT.