Someone help me out here, what sort of features would static-Julia have to give up?
GC was mentioned, but there are many statically-typed, AOT-compiled languages with GC, though there are other reasons to eschew GC. Off the top of my head, the one thing to give up is the JIT compiler intervening when dynamic dispatch runs into new call signatures. That’s not to say we can’t have any dynamic dispatch at all, but more care would have be put into proving there is a fixed number of call signatures.
As for static-like AOT compilation with no execution, my current understanding is that precompile statements and successful type inference of Julian generic methods should suffice for the vast majority of cases. The one case I can think of where more annotations could help is captured variables in closures; it’s a really tough ask to infer the type of a variable shared by two methods when only one method has been called. However, we already can achieve that inference with explicit type annotations, whether it’s of the captured variable or if we had refactored to callable types. I’m not sure how close static analysis can get, the type inference part of compilation is needed to get the type information written into statically typed source code.
So I can’t really think of many changes, let alone ones that warrant a major version revision.