# This month in Julia world - 2024-06

**URL:** <https://discourse.julialang.org/t/this-month-in-julia-world-2024-06/116704>\
**Category:** Newsletter\
**Created:** [July 6, 2024, 7:35pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-06/116704 "2024-07-06T19:35:37Z")\
**Posts on this page:** 2\
**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:** [July 6, 2024, 7:35pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-06/116704/1 "2024-07-06T19:35:37Z")

</div>

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

- There are considerations of how to remove some of Julia’s warts without a breaking Julia 2.0 release: a “[strict mode](https://github.com/JuliaLang/julia/issues/54903)” and [versioning of export statements](https://github.com/JuliaLang/julia/issues/54905) seem like a pretty big step in that direction.
- The [compiler now has a much neater “engine”](https://github.com/JuliaLang/julia/pull/54816) to track (potentially multithreaded) inference and code generation.
- Much [neater autocompletion](https://github.com/JuliaLang/julia/pull/54800) of emojis on the REPL.
- This is a bit of a prolonged edge case frustration at this point, but progress is made again on fixing the [`Tuple{Union{}}`](https://github.com/JuliaLang/julia/pull/54792) breaking change edge case from 1.10. Discussed previously in the March issue of this newsletter.
- Progress on the “wordage for bindings, not just function methods” discussed in the last month’s issue. Refactoring and cleanup being done for [lowering of consts](https://github.com/JuliaLang/julia/pull/54773). Some related performance improvements to the [use of global variabls](https://github.com/JuliaLang/julia/pull/54733).
- Julia now has a more reliable mechanism to [communicate breaks](https://github.com/JuliaLang/julia/pull/53849) to internal unexported nonpublic functionality, hopefully leading to more stable packages that (ab)use unstable implementation details (e.g. JET, Revise, Cthulhu).
- [Improvements to the printing](https://github.com/JuliaLang/julia/pull/54714) of stack overflow traces related to recursion. Some related [PRs](https://github.com/JuliaLang/julia/pull/54712).
- `@atomic` might soon [permit indexing](https://github.com/JuliaLang/julia/pull/54707).
- Improvements to [tuple sorting](https://github.com/JuliaLang/julia/pull/54494).
- Interesting experimentation with new recursive implementations for fold, map, setindex functionality for tuples, related to better loop unrolling capabilities in the compiler and to better type stability. [[1](https://github.com/JuliaLang/julia/pull/54478)] [[2](https://github.com/JuliaLang/julia/pull/54479)] [[3](https://github.com/JuliaLang/julia/pull/54480)] [[4](https://github.com/JuliaLang/julia/pull/54490)]
- An interesting discussion on the interaction between `convert` and `==` and other equality checks on [slack](https://julialang.slack.com/archives/C67TK21LJ/p1717777602292389) and a related [github discussion](https://github.com/JuliaLang/julia/issues/40717) on the type-safety of equality checks.
- JET now has [an official badge](https://github.com/aviatesk/JET.jl/pull/635) you can put in your readmes (together with your Aqua badge). [![](https://img.shields.io/badge/%F0%9F%9B%A9%EF%B8%8F_tested_with-JET.jl-233f9a)](https://github.com/aviatesk/JET.jl)
- On master you can start julia with `--trace-compile=stderr --trace-compile-timing` to figure out [how long compilation/precompilation takes](https://github.com/JuliaLang/julia/pull/54662) for each methods.
- A big step forward for the project to plug [external garbage collectors](https://github.com/JuliaLang/julia/pull/54238) into julia. Still, just refactoring for now.
- The standard UUID library now has a [UUID 7](https://github.com/JuliaLang/julia/pull/54834) implementation.
- More detailed documentation of the [new memory backends](https://github.com/JuliaLang/julia/pull/54642) on which vectors are implemented.
- An interesting example of [using `@constprop` annotation](https://github.com/JuliaLang/julia/pull/54635) to improve the type stability of a function.

Dustbin of History:

- Unicode subscripts and superscripts are wonderful when writing more legible code, but frustratingly a few random latin letters are not available… Some time ago the Julia community started preparing a [proposal to the unicode consortium](https://github.com/stevengj/subsuper-proposal) to remedy that situation, but it has lately lost steam (any volunteers?).

In search of contributors and new maintainers (specify novice/moderate/expert and internals/domain background necessary):

- [SciML is running a large set of funded small projects](https://sciml.ai/small_grants/) – a great opportunity to contribute to the community and be paid for it.
- ChainRules, a foundational package to the Julia autodiff effort is looking for a [new primary maintainer](https://discourse.julialang.org/t/chainrules-project-looking-for-a-new-primary-maintainer/115636).

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

- [GTPSA](https://discourse.julialang.org/t/gtpsa-jl-a-julia-interface-to-the-new-gtpsa-library-for-fast-high-order-automatic-differentiation/115370) is a new library for Taylor-style autodiff, with a new Julia interface.
- Julia was used to [prototype the new audio codec](https://discourse.julialang.org/t/julia-used-to-prototype-whatsapp-audio/115626) in WhatsApp.
- Significant improvements to linear algebra on multinode computing clusters with Dagger.jl, [discussed on slack](https://julialang.slack.com/archives/C677F4ABD/p1719340733844509).
- AlgebraOfGraphics.jl plotting library is getting a healthy refresh, [discussed on slack](https://julialang.slack.com/archives/C8RQUU2KH/p1719416651396969).
- A [slack discussion](https://julialang.slack.com/archives/C6G240ENA/p1719468441542609) of improvements in DifferentiationInterface.jl – this package is becoming a valuable cornerstone for the autodiff efforts in Julia.
- Some recent publicity about Julia in HPC, [discussed on slack](https://julialang.slack.com/archives/CBFP2PTTR/p1719144962104219).

Notes from other ecosystems:

- NumPy 2.0 breaking release is out. Discussed on [hacker news](https://news.ycombinator.com/item?id=40699470).

Soapboxes (blogs/talks):

- Consider subscribing to the [French community newsletter](https://pnavaro.github.io/NouvellesJulia/) (much of the shared materials are in English).
- Consider subscribing to the [community calendar](https://julialang.org/community/#events) 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. [Minutes are kept](https://hackmd.io/@LilithHafner/HJaw__uMp).
- Julia [tshirts](https://cormullion.github.io/pages/2024-06-03-rejects/) made with Luxor.jl

Sundry:

- A “[Julia for HPC](https://discourse.julialang.org/t/ann-training-course-julia-for-hpc-in-stuttgart-germany-on-sept-10-13-2024/115311)” training course will run in Germany in September.

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:** ![nsajko](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nsajko/32/221187_2.png) [@nsajko](https://discourse.julialang.org/u/nsajko)\
**Post date:** [July 6, 2024, 11:11pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-06/116704/2 "2024-07-06T23:11:03Z")

</div>

> [@Krastanov](#):
>
> Interesting experimentation with new recursive implementations for fold, map, setindex functionality for tuples, related to better loop unrolling capabilities in the compiler and to better type stability. [[1](https://github.com/JuliaLang/julia/pull/54478)] [[2](https://github.com/JuliaLang/julia/pull/54479)] [[3](https://github.com/JuliaLang/julia/pull/54480)] [[4](https://github.com/JuliaLang/julia/pull/54490)]

Thanks for the attention! I’ll probably close these PRs as I’m working on a new design, but probably it’ll be a package for some time before I try to upstream it.

The idea with the open PRs was to keep, together with a tuple, a singleton type representing the length of a view into the tuple.

The idea that I’m currently experimenting with is to create a new recursive data structure for a constant-size heterogeneous collection. The first thing I tried was simply something like this:

```julia
struct HeterogeneousList{ElementType,Rest}
    first_element::ElementType

    # When `rest` isn't a `HeterogeneousList`, the object represents an empty collection
    rest::Rest
end

```

A problem with the above design was that there’s no way to describe, e.g., a list of indeterminate length, all of whose elements are `Int` (`Tuple{Vararg{Int}}` in tuple parlance), or a list whose first element is `Bool` while any others are `Int` (`Tuple{Bool,Vararg{Int}}` in tuple parlance).

The current design looks like this:

1. There’s a homogeneous list type (representing a constant-length homogeneous collection, so all elements are of the same type)
2. Then the heterogeneous list type is implemented as a list of “homogeneous extents”, each of which is a homogeneous list. The idea is for each homogeneous extent to be maximal

This design is actually supposed to allow **more** descriptive power than the combination of `Tuple` and `Vararg`, as it should allow describing types such as “an indeterminate number of `Int`s, terminated by a `Bool`”. This is something that’s not possible to describe as a tuple type in Julia’s type system. In the end this should allow for improved inference, especially with abstract argument types. For example, currently an operation such as `reverse` loses information when given a tuple type with `Vararg`:

```julia
julia> f(t) = reverse(reverse(t))
f (generic function with 1 method)

julia> Core.Compiler.return_type(f, Tuple{Tuple{Int,Vararg{Bool}}})
Tuple

```

Ideally, the inferred type would be `Tuple{Int,Vararg{Bool}}` instead of just `Tuple`, and my design above should allow for that.

In practice my package would probably be used like so:

1. convert a tuple to a heterogeneous list
2. apply the required operations on the heterogeneous list instead of on the tuple
3. convert the result back to `Tuple`
