This month in Julia world - 2023-07

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:

Dustbin of History:

“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):


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.


Also the discussion about what the community should do to take Julia to the next level of popularity has a lot of traction these days What steps should the Julia community take to bring Julia to the next level of popularity?


Would it make sense to pin this thread to appear on top in discourse? Otherwise, it might get lost and if people do not check the forum regularly, they would miss this wonder.


You can find all previous newsletters in the Community - Newsletter category: Newsletter - Julia Programming Language


Another reason for the dedicated Newsletter category is so you can subscribe to the category as a whole and get notifications for new posts.


Something interesting from the blog which I’ve never heard of before: “The 5th secret one is include(::Function, file) which is like include(file) except it takes a function that is AST to AST which gets exectured on every expression parsed out of the file before it is executed.”

Is this meant to enable people to write entire source files in DSLs?


It’s definitely a nice feature. We have used it in Trixi.jl to write a function trixi_include that gets the file name to include and arbitrary keyword arguments that can be used to overwrite variables and keyword arguments in the included file. This is quite handy for us since we provide all examples as small script files (that we call elixirs in Trixi.jl). Thus, it allows us to modify something like the resolution or time span easily from the REPL by adapting the trixi_include call.

1 Like