# This month in Julia world - 2025-05

**URL:** <https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584>\
**Category:** Newsletter\
**Created:** [June 3, 2025, 3:05am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584 "2025-06-03T03:05:10Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Krastanov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/krastanov/32/6817_2.png) [@Krastanov](https://discourse.julialang.org/u/Krastanov)\
**Post date:** [June 3, 2025, 3:05am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/1 "2025-06-03T03:05:10Z")

</div>

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](https://juliadispatch.fm/) podcast (on many platforms, including [youtube](https://www.youtube.com/@JuliaDispatch/) and [spotify](https://open.spotify.com/show/6Y1zWtFhjqPLsFQWRvZmws)). 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](https://discourse.julialang.org/t/julia-v1-12-0-beta3-is-now-available/128941).

- Julia [may get an await mechanism](https://github.com/JuliaLang/julia/pull/58532) 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](https://github.com/JuliaDynamics/ResumableFunctions.jl/) library.

- Work has started on much more [fine-grained caching of compiled code](https://github.com/JuliaLang/julia/pull/58592) (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](https://github.com/JuliaLang/julia/pull/58253/files).

- The Julia task scheduler is fairly good, but [work stealing](https://en.wikipedia.org/wiki/Work_stealing) could make it even better. A [new work-in-progress PR](https://github.com/JuliaLang/julia/pull/58500) implements it. This is the fourth attempt at implementing work stealing [[1](https://github.com/JuliaLang/julia/pull/55542), [2](https://github.com/JuliaLang/julia/pull/50221), [3](https://github.com/JuliaLang/julia/pull/43366)], so let’s hope it lands this time.

- The hash algorithm is [changing](https://github.com/JuliaLang/julia/pull/57509)! In many cases the performance should improve substantially, particularly on Strings and [AbstractArrays](https://github.com/JuliaLang/julia/pull/57509)

- Atomic operations on mutable structs with fields marked @atomic [now generate efficient code](https://github.com/JuliaLang/julia/pull/57010), 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](https://github.com/JuliaLang/julia/issues?q=is%3Aissue%20label%3Afold) with performance and consistency. [A new WIP PR](https://github.com/JuliaLang/julia/pull/58418) completely reworks them, closing 17 issues at once.

- A push to lazily load more JLL libraries in the standard libraries [[1](https://github.com/JuliaLang/julia/pull/58405), [2](https://github.com/JuliaLang/julia/pull/58444/files)] and [elsewhere](https://github.com/JuliaSparse/SparseArrays.jl/pull/626), and [precompile JLL related code](https://github.com/JuliaLang/julia/pull/58436) improves latency a fair bit.

- [Work on various versions of `cat` with static size information](https://github.com/JuliaLang/julia/pull/58422) (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](https://github.com/JuliaLang/julia/pull/58389).

- Should collect be able to return other AbstractArray types than Array? This question has [come up again](https://github.com/JuliaLang/julia/pull/58513), and has previously been discussed several times before [[1](https://github.com/JuliaLang/julia/issues/36448), [2](https://github.com/JuliaLang/julia/issues/50051), [3](https://github.com/JuliaLang/julia/issues/47777)].

- In a [discourse discussion](https://discourse.julialang.org/t/question-about-the-future-of-juliac/129228/4) 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`](https://github.com/JuliaLang/julia/pull/58416/files) - please avoid using it, `copy` is probably what you need.

Ecosystem Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):

- [AirspeedVelocity.jl](https://discourse.julialang.org/t/easy-github-benchmarking-with-new-airspeedvelocity-jl/129327) 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](https://discourse.julialang.org/t/ann-trash-jl/129104) - the most feature-complete cross-platform file-trashing library in existence.
- [SmallCollections.jl](https://discourse.julialang.org/t/ann-smallcollections-jl-fast-small-vectors-sets-and-dictionaries/128787) - static implementation for small vectors, sets, and dicts, without allocations, and satisfying `isbitstype`.
- [pluto.land](https://discourse.julialang.org/t/ann-pluto-land-new-simple-website-to-share-pluto-html-notebooks/129138) is web service for hosting static HTML exports of Pluto notebooks by the Pluto team.
- [SankeyMakie.jl](https://discourse.julialang.org/t/ann-sankeymakie-jl/129209) for Sankey-style flow diagrams in Makie.
- [ExchangeRates.jl](https://discourse.julialang.org/t/ann-exchangerates-jl/129317) for simple conversion between currencies.
- [JSON.jl](https://github.com/JuliaIO/JSON.jl/pull/374) will have a breaking release fixing many outstanding issues with it and JSON3.
- [TensorMixedStates.jl](https://github.com/jerhoud/TensorMixedStates.jl) is a new package for simulating open quantum system based on ITensor
- The main Julia repository now contains an [AGENTS.md](https://github.com/JuliaLang/julia/pull/58561/files) 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](https://discourse.julialang.org/t/ann-rationalfunctionapproximation-jl-v0-2/129078) 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](https://arxiv.org/pdf/2505.07308).

See also: [French community newsletter](https://pnavaro.github.io/NouvellesJulia/), [community calendar](https://julialang.org/community/#events), [minutes of triage meetings](https://hackmd.io/@LilithHafner/HJaw__uMp)

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](https://docs.google.com/document/d/1Np1deH_W1o0EO7_tZkScveCLA0XiYg538ceUJs0bFpE/edit). Some of it might survive by the time of posting

---

<div class="post-metadata">

**Author:** ![martin0000](https://avatars.discourse-cdn.com/v4/letter/m/f04885/32.png) [@martin0000](https://discourse.julialang.org/u/martin0000)\
**Post date:** [June 3, 2025, 6:50am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/2 "2025-06-03T06:50:03Z")

</div>

This is very nice info, Thanks for making this post.

---

<div class="post-metadata">

**Author:** ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)\
**Post date:** [June 3, 2025, 9:21am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/3 "2025-06-03T09:21:47Z")

</div>

Thank you for your prokrastanovation! 😀

---

<div class="post-metadata">

**Author:** ![hz-xiaxz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hz-xiaxz/32/209585_2.png) [@hz-xiaxz](https://discourse.julialang.org/u/hz-xiaxz)\
**Post date:** [June 3, 2025, 12:16pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/4 "2025-06-03T12:16:41Z")

</div>

> [@Krastanov](#):
>
> The main Julia repository now contains an [AGENTS.md](https://github.com/JuliaLang/julia/pull/58561/files) file to guide AI agents on how to develop Julia. It is also an interesting way to distill dev tips.

Thanks for mentioning that, will be great to try out!

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [June 3, 2025, 3:18pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/5 "2025-06-03T15:18:16Z")

</div>

> [@Krastanov](#):
>
> The hash algorithm is [changing](https://github.com/JuliaLang/julia/pull/57509)! In many cases the performance should improve substantially, particularly on Strings and [AbstractArrays](https://github.com/JuliaLang/julia/pull/57509)

Do we know if this changes the values of old hashes as well? Is this expected to change in 1.12? Our team has a lot of files keyed by the hash of their values, so we’d need to refresh those caches when updating (which is not a big deal, I just want to be prepared.)

---

<div class="post-metadata">

**Author:** ![adienes](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adienes/32/37459_2.png) [@adienes](https://discourse.julialang.org/u/adienes)\
**Post date:** [June 3, 2025, 3:21pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/6 "2025-06-03T15:21:58Z")

</div>

pretty much every hash value will change (except of types). but it will be 1.13 not 1.12

---

<div class="post-metadata">

**Author:** ![Krastanov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/krastanov/32/6817_2.png) [@Krastanov](https://discourse.julialang.org/u/Krastanov)\
**Post date:** [June 3, 2025, 3:31pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/7 "2025-06-03T15:31:15Z")

</div>

FYI, the `hash` function does not guarantee to give the same result even on the very same version of julia between separate executions of the process.

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [June 3, 2025, 3:37pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/8 "2025-06-03T15:37:04Z")

</div>

Huh, I don’t think we’ve ever run into this (when hashing immutable values, in 1.11.) Regardless, if it’s not a guarantee, we definitely need to switch to a different hashing algorithm. Good to know!

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [June 3, 2025, 3:57pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/9 "2025-06-03T15:57:57Z")

</div>

> [@Satvik](#):
>
> Huh, I don’t think we’ve ever run into this (when hashing immutable values, in 1.11.)

> **[Hyrum's Law](https://www.hyrumslaw.com/)**

---

<div class="post-metadata">

**Author:** ![Satvik](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/satvik/32/20486_2.png) [@Satvik](https://discourse.julialang.org/u/Satvik)\
**Post date:** [June 3, 2025, 4:18pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/10 "2025-06-03T16:18:52Z")

</div>

To be fair, this comment was only added to the documentation in [Julia 1.10](https://github.com/JuliaLang/julia/commit/b0db5009704d8ed03447c4da4b71448eb6d9f708), and we’ve been using Julia since 1.5. It’s pretty easy to miss such a tiny change in documentation! The main other language that randomizes Dict traversal order (not even hashes) I can think of is Go, and they’re very explicit about it all, bringing it up several times.

---

<div class="post-metadata">

**Author:** ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)\
**Post date:** [June 3, 2025, 8:51pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/11 "2025-06-03T20:51:58Z")

</div>

Randomized dict traversal order is a different feature. Hashes not being stable is pretty common.

---

<div class="post-metadata">

**Author:** ![Krastanov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/krastanov/32/6817_2.png) [@Krastanov](https://discourse.julialang.org/u/Krastanov)\
**Post date:** [June 10, 2025, 12:59pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2025-05/129584/12 "2025-06-10T12:59:37Z")

</div>

The history of why hashes are randomized in many languages is kinda interesting. In 2011 Python/PHP/Java/Ruby/PHP hashes were not randomized on startup, but this led to a denial-of-service attack where an attacker who can call a webapi written in python can force a dict into an O(n^2) behavior: [oCERT archive](http://ocert.org/advisories/ocert-2011-003.html)

Python pretty quickly fixed that by randomizing its hashes on startup, which was at the time vary painful for many projects. Sympy in particular was very annoyed and we had to use `ENV["PYTHONHASHSEED"]` in our CI to bring some sanity back.

See [1. Command line and environment — Python 3.13.4 documentation](https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED) and [3. Data model — Python 3.13.4 documentation](https://docs.python.org/3/reference/datamodel.html#object. __hash__ )
