A monthly newsletter, mostly on julia internals, digestible for casual observers. A biased, incomplete, editorialized list of what a clique of us found interesting this month, with contributions from the community.
For recent news on Julia and interesting conversations with community members, check out the JuliaDispatch podcast (on many platforms, including youtube and spotify). Highlights from the newsletter get discussed (with more context) during some episodes.
“Internals” Fora and Core Repos (Slack/Zulip/Discourse/Github):
Julia 1.12-beta3 has been released.
Julia may get an await mechanism similar to C++’s coroutines. These are low-level resumable functions, which are generally useful to implement asynchronous software, and may e.g. be used by Julia’s existing Task infrastructure, or Python yield-style generators. This would be a much better alternative than the fairly hackish ResumableFunctions.jl library.
Work has started on much more fine-grained caching of compiled code (i.e. work like this can enable recompiling only parts of a module after an edit).
The manual now has a more detailed section on world age and binding partitioning.
The Julia task scheduler is fairly good, but work stealing could make it even better. A new work-in-progress PR implements it. This is the fourth attempt at implementing work stealing [1, 2, 3], so let’s hope it lands this time.
The hash algorithm is changing! In many cases the performance should improve substantially, particularly on Strings and AbstractArrays
Atomic operations on mutable structs with fields marked @atomic now generate efficient code, and the old Threads.Atomic type is therefore no longer special.
The implementation of ‘reduce-like’ functions such as reduce, foldl, and sum has long had several issues with performance and consistency. A new WIP PR completely reworks them, closing 17 issues at once.
A push to lazily load more JLL libraries in the standard libraries [1, 2] and elsewhere, and precompile JLL related code improves latency a fair bit.
Work on various versions of cat
with static size information (number of rows or columns being concatenated) for potentially faster initialization of array literals.
A proposal for library authors to be able to control how type parameters are printed in stack traces.
Should collect
be able to return other AbstractArray types than Array? This question has come up again, and has previously been discussed several times before [1, 2, 3].
In a discourse discussion on julia and juliac, Matt gives a nice summary of some of the ways to execute/compile julia code.
A somewhat overdue warning to the docstring of deepcopy
- please avoid using it, copy
is probably what you need.
Ecosystem Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):
AirspeedVelocity.jl is a CI-focused package-benchmarking utility that now comes with a Github action that can run and post benchmarks in your pull requests.
Trash.jl - the most feature-complete cross-platform file-trashing library in existence.
SmallCollections.jl - static implementation for small vectors, sets, and dicts, without allocations, and satisfying isbitstype
.
pluto.land is web service for hosting static HTML exports of Pluto notebooks by the Pluto team.
SankeyMakie.jl for Sankey-style flow diagrams in Makie.
ExchangeRates.jl for simple conversion between currencies.
JSON.jl will have a breaking release fixing many outstanding issues with it and JSON3.
TensorMixedStates.jl is a new package for simulating open quantum system based on ITensor
The main Julia repository now contains an AGENTS.md file to guide AI agents on how to develop Julia. It is also an interesting way to distill dev tips.
Numerical Math ecosystem:
RationalFunctionApproximation.jl is a tool for automatic approximation of functions by ratios of polynomials, now out at v0.2
Autodiff ecosystem:
A recent publication on sparse matrix autodiff and coloring.
See also: French community newsletter, community calendar, minutes of triage meetings
Please feel free to post below with your own interesting finds, or in-depth explanations, or questions about these developments.
You can engage in the discussion of this newsletter on Discourse