
Julia 1.13 released with major speed gains in precompilation, startup & garbage collection
The Julia project has released version 1.13 of its programming language. The release focuses heavily on reducing latency, one of Julia's long-standing pain points. According to the announcement, package precompilation now takes roughly 30% less time than in Julia 1.12, and 10–20% less time than the 1.10 long-term-support release depending on the machine, while startup itself is about 20% faster than the previous version. To keep future regressions in check, the project has also built latency monitoring into its own development pipeline: dedicated time-to-first-plot/execution (TTFX) continuous integration jobs now run on pull requests and every commit to master, with results tracked publicly.
Another major highlight is a change to garbage collection. Objects in the system image and package images are now loaded as permanently marked and skipped by the GC's mark phase, with the few mutations that do occur tracked separately. As a result, the cost of a full collection now scales with the heap a program actually creates rather than the amount of code loaded. The difference is stark in the numbers shown in the blog post: timing a full GC.gc() in a fresh session took about 0.035 seconds in Julia 1.12, versus roughly 0.0005 seconds in 1.13, a nearly 70-fold reduction.
Beyond performance, the release brings a batch of developer-facing conveniences. A new public @__FUNCTION__ macro joins @__MODULE__ and @__FILE__ in referencing the innermost containing function, including anonymous ones. Under the hood, the default hashing algorithm for strings and many numeric types has been swapped from MurmurHash3 to RapidhashNano, a streaming hash written in pure Julia that the developers say is significantly faster and easier to maintain. Debugging gets a boost too: a new --trace-eval command-line flag prints top-level evaluation progress to help spot hangs in scripts and test suites, and is enabled automatically when debug logging is turned on for CI runs. Finally, the experimental juliac trimming tool has graduated into a proper package called JuliaC.jl, with support for trimming more constructs such as finalizers, @cfunction, and mapreduce, a step forward for producing smaller compiled Julia binaries.


