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):
- George Datseris (from JuliaDynamics) wrote a high quality “manifesto” on the advantages of Julia. It is very detailed and technical and well defended, but I particularly liked its post scriptum on “Why do you try so hard to convince people?”. Also discussed on Discourse.
- Another piece of Julia compiler dark magic: AllocChecks.jl is a library capable of making static guarantees about whether your code will require allocations (one of the common reasons for slowdown or garbage-collection indeterminism).
- Julia is known as a great platform to experiment with weird compiler techniques, but it is also known to be rather underdocumented (and fairly rapidly evolving) in that respect. Along these lines, recently we had a conversation on Discourse on CodeInfo and Core.Compiler.IRCode representations and how to manipulate them.
- A brief discussion on the use of Traits (as a programming concept) in Julia. In summary, simple functions probably do not benefit from using Traits over the typical type structure in Julia thanks to constant-propagation optimization passes, but these optimizations might fail in large programs. Using Traits encodes the requirement in the type system, making for a much stronger guarantee that dynamical dispatch would not be necessary.
- People coming from Python have frequently asked why we do not have reliable Ctrl+C exception handler like Python’s KeyboardException. A handwavy reason is that we do not have a GIL, but Keno gives a very detailed expossion of this and possible future steps.
- With more parallelism in precompilation now we have the occasional annoying hangs when a precompilation step in a package spawns its own parallel Task. Aqua now provides checks for such cases, and the devdocs were updated with more detailed explanation for package authors.
- A discussion on whether we should have a NotImplementedError to signify declared but not implemented abstract APIs. A potential implementation PR.
Core Julia Repos:
- The new StyledStrings stdlib is starting to be used in a few places: REPL, Logging and more Logging, stack traces,
- Even a full syntax highlighting stdlib thanks to StyledStrings.
- Work on a better internal datastructure for storing compiled methods (it could lead to a pleasant speedup in compilation).
- Julia has had
unsafe_wrap
to create arrays out of pointers, but now with the new Memory type discussed in the last issue, we are getting a safewrap
.
Dustbin of History:
- Sometime ago custom Method Tables were implemented as a way to have a completely separate multiple-dispatch tree, useful e.g. for GPU compilers. A userfriendly interface to this is CassetteOverlay.jl.
- Some types of interactive tab-completion have been failing in Julia’s REPL since forever.
- Some time ago Giordano wrote a great tutorial on how to write your first macro.
- If you are wondering what it really means to be “homoiconic like Lisp”, Stefan gave agreat answer a few years ago.
- Maybe a bit surprisingly, it has been forever that Julia does not support mutually-referencing types. But where it matters, there are workarounds, e.g. in SumTypes.jl.
Ecosystem Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):
- Julia’s “official” Github action for package testing now provides better caching, significantly lowering test runs.
- AppBuilder.jl was recently released, making the creation of pre-packaged apps for Linux/Mac/Windows easier.
- We have discussed OptimalSortingNetworks before. Now we are getting a related TupleSorting.jl for typestable fast sort of tuples (even large ones).
- DataFrames.jl is solidifying its great performance in multi-language multi-library dataframes benchmark.
- CUDA.jl 5.1 released with yet more great improvements.
- Jello.jl for generating manufacturable geometry (whether by hobby 3D printing or by million-dollar lithography machines and ion beams).
- Impostor.jl a synthetic data generator for mocking up DataFrame algorithms.
- A slack discussion on how to visualize (and debug) Makie layouts.
- BioMakie.jl a visualization tool for biology-related data had a significant new release.
- RxInfer.jl has existed for a while, but their new webpage is a thing of beauty. RxInfer aims to automate inference in your probabilistic models.
- The minutes from the JuliaGraphs community call this month.
- A new, simpler but very fast dense-sparse matrix multiplication implementation release in ThreadedDenseSparseMul.jl
- ReactiveToolkit.jl is new tool to conveniently set up reactive asynchronous “soft-realtime” tasks in julia.
Soapboxes (blogs/talks):
- 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.
I have started linking to fewer slack threads, as slack references are starting to be more and more unreliable on my end (threads getting lost, etc).
Please feel free to post below with your own interesting finds, 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.