A (seemingly?) 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 (Slack/Zulip/Discourse/Github):
- Guillaume has been doing a lot of valuable work on documenting proper workflows for people starting out with Julia. Check out the documentation/blog readme with links to drafts and community discussion. Your help will be greatly appreciated.
- As previously discussed, improvements to the Julia threading model have made visible some concurrency bugs in the ecosystem. There is a detailed blog post and community discussion on the topic.
- Lilith and others have been discussing better documentation of Julia’s attitude to integer overflow (which is vaguely “no warning/error unless the check is relatively cheap or the overflow particularly common” for the base integer types and plenty of customizability for non-base types).
- There was a long discussion about how difficult it is to decide on a good default for the number of threads that Julia starts with, including issues like mismatch between Julia and BLAS threads, hyperthreads vs actual cores, allocated cores for HPC jobs, and more.
Core Julia Repos:
- The feature freeze for the upcoming 1.10 happened and there is already a 1.10 alpha and beta.
- Minor improvement to the inlining heuristics (the cost function that decides whether a function is worth inlining). Maybe this is a place where inexperienced folks can start learning about and contributing to the compiler.
- Prem Chintalapudi and others working on a lot of extremely valuable improvements to the documentation of the internals, including Just-int-time compilation, Ahead-of-time compilation, and custom compiler optimizations. Also SSA-IR.
- Some small experiments related to lowering the overhead from mitigating spectre-like CPU vulnerabilities:
- Julia’s REPL has had suboptimal suggestions in autocompletion. There are improvements on the horizon.
- Improvements to
@code_llvm
and other introspection tools thanks to more annotation in the IR.
Dustbin of History:
- The early PL paper on Julia (“Julia: Dynamism and Performance Reconciled by Design” 2018 ACM) is quite the perfect read for folks who want the condensed rigorous version of “What is Special about Julia”.
- While speaking of papers on Julia internals, “Type stability in Julia: avoiding performance pathologies in JIT compilation” (2021) and “Julia subtyping: a rational reconstruction” (2018) are both wonderful.
“Ecosystem” Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):
- FastDifferentiation.jl is a new type of hybrid automatic differentiation / symbolic differentiation tool. This one did not get much discussion, but it does seem like a tool that will be a gamechanger for many autodiff tasks. As always, do not forget that different tasks require different diff approaches, and check AbstractDifferentiation, ForwardDiff, TaylorDiff, Zygote, Enzyme, StochasticAD, and the early stage Diffractor.
- The Diffractor autodiff research project has a release with exciting new mostly-stable functionality.
- For fans of rigorous package testing, there is now PropCheck.jl – a very valuable “hypothesis”-style test generator / fuzzer. If you are a fan of JET and Aqua, up your bug fighting skills even more with PropCheck.jl
- From the author of PropCheck.jl we also get RequiredInterfaces.jl for better ways to define/test interfaces and APIs. Check out the first comment in that discussion which lists a couple of other efforts in that direction.
- The JuliaGraphs ecosystem is evolving, as Etienne and Guillaume are pushing hard to improve and unify the entire interface and split it into GraphsBase.jl. Long-term goal: support weighted graphs, hypergraphs and graphs with metadata out of the box. Help would be extremely valuable to keep the momentum going.
- The AMDGPU stack is moving ahead with many improvements, not the least being finalizing the move to a more unified ROCM backend.
- Citation management in Documenter.jl getting much better thanks to a number of volunteers cleaning up and upstreaming previous efforts.
- A JuliaHub client library for programmatically managing jobs.
- New release with many new features for the distributed arrays (and linear algebra) package Dagger.jl. The post includes future roadmap as well.
Soapboxes (blogs/talks):
- A blog post on the use of @eval but also some pitfalls to consider.
- A talk and blog post on comparisons between Rust and Julia. Please be gentle if you jump in the conversation, as folks were a bit heated for a bit. But a number of really interesting posts emerged from it: a, b, c, d, e, f
- JuliaCon 2023 just finished. There were a ton of great talks. In the spirit of the newsletter though, let me focus only on ones that seem informative about internals for newcomers and veterans. These are all livestreams – these recordings will be deleted soon but captioned post-processed videos are being prepared.
- “The State of Julia”
- Improvements and future work for static analysis (JET.jl)
- Improvements and future work on the Garbage Collector
- The new Package Extension capabilities of Pkg.jl
- What is involved in releasing a new Julia version
- Compiling Julia to “exotic” architectures under severe constraints
- Thread pinning
Sundry:
- JuliaHub Receives 13 M$ Strategic Investment from AE Industrial Partners HorizonX.
Please feel free to post below with your own interesting finds, or corrections, or in-depth explanations, or questions about these developments.
If you would like to help with the draft for next month, please drop your short, well formatted, linked notes in this shared document. Some of it might survive by the time of posting.