A monthly newsletter, mostly on Julia internals, digestible for casual observers. A biased, incomplete, editorialized list of what I found interesting this month, with contributions from the community.
“Internals” Fora and Core Repos (Slack/Zulip/Discourse/Github):
Well documented tips on how to minimize latency in your packages are now organized in a new section in the “Performance Tips” docs
The trace-compile capabilities provide a convenient way to track what the compiler is working on as you ecnounter new methods during runtime. It is extremely helpful when you want to figure out what precompile statements to add to your packages. A few quality-of-life improvements are coming up, with better colored output for the traces.
Relatedly, recently we got a special-case of trace-compile, the new trace-dispatch which prints precompile statements only for dynamically encountered methods.
And to make this even better, both of these capabilities will now be available interactively directly from the REPL thanks to new introspection macros.
A great new capability for profiling why the garbage collector is being triggered.
Work on yet more parallelism in the gargabe collector (parallel sweeps of stack pools)
Yet more refactoring and cleanup to enable use of external garbage collectors.
Better caching of package precompiled code and package extensions drastically lowered the time-to-first-X in the ecosystem over the last couple of years. This led also to much more precompilation being possible, which leads to the trade off of long installation times. A discussion has started on github about how to enable more modular packages (lowering the amount of what is installed and compiled) without leading to a proliferation of registered subpackages with (frustratingly) independent versioning.
New primitives for reliably expressing once-per-thread or once-per-process objects are nearly ready.
A variety of improvements to any
and all
: better generic implementation for in
, simplifying the implementation for abstract arrays, better implementation for Bool tuples
Looking into enabling the use of the new LLVM 19 in the julia compiler.
Improvements to the internals of how Julia handles external signals.
A neat and small improvement in how the optimizer handles throwing errors for undefined variables – it is small, so it can be a good place to start reading internal implementation code. Based on another small improvement in how much metadata the optimizer tracks in conditionals.
Minor improvements to the non-default makefile for compiling Julia with profile guided optimization and link time optimization. That makefile has been discussed before in the newsletter – hopefully it will become a default in the future, but until then you can gain some compiler performance by using it manually.
It is always frustrating when Julia or Julia’s imported BLAS does not automatically obey the number of logically-available threads. Related fixes.
Dustbin of History:
Wouldn’t it be great if we had a type-safe ==
(related to occasionally conflating ==
and ===
).
In search of contributors and new maintainers (specify novice/moderate/expert and internals/domain background necessary):
The Center for Quantum Networks is running many bounties and minigrants on a variety of support packages for quantum information science. Few thousand $ will be paid out already in October for bounties from August.
SciML is running a large set of funded small projects – a great opportunity to contribute to the community and be paid for it.
ChainRules, a foundational package to the Julia autodiff effort is looking for a new primary maintainer.
Ecosystem Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):
JuliaCon Global 2025 will be in Pittsburgh from July 21 - July 26, 2025.
Tutorials on interoperability between Rust and Julia.
A fun discussion with many examples of the surprising power of multiple dispatch (the main programming paradigm in Julia) – a good place to mine for examples.
Discussion on planned improvements for the low-level implementation of strings in Julia.
https://discourse.julialang.org/t/enzyme-ready-for-everyday-use-2024/118819
There is a new breaking release of DifferentiationInterface (v0.6) with support for additional constant arguments. This opens DI to even more use cases, so @gdalle will try to integrate it to a bunch of SciML repos (NonlinearSolve, Optimization, OrdinaryDiffEq) as well as Turing. Other potential users are more than welcome to open issues and ask for help.
AcceleratedKernels.jl is a new library with primitives for parallel algorithms on any hardware accelerator.
OptimalTransportNetworks.jl is a new library for optimizing paths in networks.
Guidelines for setting up Julia on HPC clusters in a reliable and clean way.
Brief discussion on baseline comparisons between Lux and Jax.
Soapboxes (blogs/talks):
A pleasant and pedagogically valuable blog post on the Julia type system
Consider subscribing to the French community newsletter (much of the shared materials are in English).
Consider subscribing to the community calendar to be informed of upcoming virtual meetings and talks.
Consider attending the triage meetings of the Julia core contributors (organized on Slack) – being a fly on the wall can be a great way to learn the nitty-gritty details of current priorities and development work. These are organized on the triage channel in slack. Minutes are kept.
You can engage in the discussion of this newsletter on Discourse