# This month in Julia world - 2024-04

**URL:** <https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638>\
**Category:** Newsletter\
**Created:** [April 30, 2024, 3:42am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638 "2024-04-30T03:42:12Z")\
**Posts on this page:** 13\
**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:** [April 30, 2024, 3:42am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/1 "2024-04-30T03:42:12Z")

</div>

To my surprise, this newsletter is now running for a whole year…

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

- A new Documenter.jl frontend provides for nice “modern looking” documentation pages. Some folks are [experimenting with converting the default Julia docs to this new frontend](https://github.com/JuliaLang/julia/pull/53988). Also discussed on [slack](https://julialang.slack.com/archives/C67910KEH/p1712494270086029).
- Frame’s [frustration with generic `error()` exceptions](https://julialang.slack.com/archives/C67910KEH/p1712566017244079) without valuable metadata led to discussion of Timothy’s draft [proposal for better error reporting in Julia](https://public.tecosaur.net/JuliaErrors.html).
- A slack discussion on [duck typing and interfaces in Julia vs Rust](https://julialang.slack.com/archives/C67TK21LJ/p1712654824391249).
- Discussion on the paradigm [differences between Julia and Rust which lead to Julia being comparatively slower to compile](https://discourse.julialang.org/t/why-is-rust-compilation-faster-than-julia-pre-compilation/113257) (chiefly stemming from Julia’s “open world” extensibility).
- Why is it difficult to provide certain other Rust-like ergonomics, e.g. [amazing interactive type-stability reports as you type your code in your IDE](https://discourse.julialang.org/t/towards-rust-level-feedback-on-type-stability/113497)?
- Maybe you should not do this, but here is a brief discussion on [how far can you push Julia’s goto](https://julialang.zulipchat.com/#narrow/stream/225542-helpdesk/topic/Programmatic.20goto.20for.20backtracking/near/434498885) for manipulating your own (potentially faster) call stack.
- Improvements to the [matrix multiplication dispatch tree](https://github.com/JuliaLang/julia/pull/52439), potentially significantly improving type stability and performance.
- [About.jl](https://github.com/tecosaur/About.jl) is [getting fancier and fancier](https://julialang.zulipchat.com/#narrow/stream/137791-general/topic/About.2Ejl/near/432048760). It now gives a pretty [nice overview of `infer_effects`](https://julialang.zulipchat.com/#narrow/stream/137791-general/topic/About.2Ejl/near/435878576) for any function (i.e. it reports what the compiler has proved/assumed about a function).
- [`deepcopy(nothing)` vs `copy(nothing)`](https://discourse.julialang.org/t/why-can-i-deepcopy-nothing-but-not-copy-nothing/112429) is a convenient reason to revisit some of the semantics of the `copy` interface.
- OpenBLAS now has an interface to cooperate with threads provided by an external runtime. Maybe soon enough we will have [freely nestable multithreading **aware** of OpenBLAS threads](https://julialang.slack.com/archives/C674ELDNX/p1713906763590949).
- Significant performance improvements might be possible if we start special-casing the [construction and storage of small strings](https://julialang.slack.com/archives/C688QKS7Q/p1713867916171509).
- Folks are looking into more ways to [visualize reports from the full-ecosystem continuous integration runner (nanosoldier)](https://julialang.slack.com/archives/C688QKS7Q/p1713933549841489)
- A few stories on what “Undefined Behavior” is for the Julia compiler, on [slack](https://julialang.slack.com/archives/C67910KEH/p1713349665663749) and [github](https://github.com/JuliaLang/julia/pull/54099)

Core Julia Repos:

- Upgrading Julia’s [LLVM backend to v17 is almost finished](https://github.com/JuliaLang/julia/pull/53070).
- Get ready for another bikeshedding session as we are discussing the potential for creating anonymous “get property” functions (e.g. `.foo` as shorthand for `x -> x.foo`). Check out the [PR](https://github.com/JuliaLang/julia/pull/53946).
- The “Performance Tips” section of the documentation has finally been structured to reflect the main categories of advice, see the [new docs](https://docs.julialang.org/en/v1.12-dev/manual/performance-tips/) and the [PR](https://github.com/JuliaLang/julia/pull/54211)

In search of contributors and new maintainers:

- Issue bounties are still up for grabs at the [Plots.jl repository](https://github.com/JuliaPlots/Plots.jl/issues/4786)

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

- [Version 1.0 of ADTypes.jl](https://github.com/SciML/ADTypes.jl/pull/40) (the autodiff package chooser) has been released, with support for all existing autodifferentiation packages and a more coherent handling of sparsity. Updating dependents is an [ongoing process](https://github.com/SciML/ADTypes.jl/issues/44).
- Lux.jl now supports [much better nested autodifferentiation](https://discourse.julialang.org/t/nested-ad-with-lux-etc/113573).
- Folks sharing tips and tricks on their preferred approach to [data science in Julia](https://discourse.julialang.org/t/whats-the-current-spring-2024-canonical-approach-to-data-science-in-julia/112427).
- Tidier, the tidy-verse-style Julia data science ecosystem [has new docs](https://tidierorg.github.io/Tidier.jl/dev/).
- Native Julia engine for quarto using [QuartoNotebookRunner.jl](https://discourse.julialang.org/t/ann-native-julia-engine-for-quarto-using-quartonotebookrunner-jl/112753)
- A new advanced extremely fast random sampler that is soon to be incorporated in most of Julia foundational statistics packages: [AliasTables.jl](https://discourse.julialang.org/t/aliastables-jl/112884)
- [Rambus.jl](https://discourse.julialang.org/t/ann-rembus-jl/112372) is a new serialization / message passing toolkit for Julia and other languages.
- [BayesianTomography.jl](https://discourse.julialang.org/t/ann-bayesiantomography-jl-a-julia-package-for-bayesian-quantum-state-tomography/112764) was recently released for quantum state tomography.
- [Space Invaders REPL](https://github.com/JuliaWTF/WatchJuliaBurn.jl/pull/44).
- A lovely list of [well documented packages](https://julialang.slack.com/archives/C6FGJ8REC/p1713881924909949) that you can use as an inspiration for your documentation writing.
- An essay and paper of [Julia’s potential for being best-in-class statistical software framework](https://discourse.julialang.org/t/julia-as-a-universal-platform-for-statistical-software-development/113017).
- Prometheus is an open source software for tracking the performance of servers and systems. We have a convenient [Julia interface for Prometheus](https://discourse.julialang.org/t/prometheus-jl-release-announcement/113005) now.
- [Changelog.jl](https://discourse.julialang.org/t/changelog-jl-release-announcement/112996) can help with managing and prettifying a Changelog file (potentially as part of a Documenter.jl deployment).
- Discussion on the [difficulties of creating a convenient interfacing package for binding Rust in Julia](https://discourse.julialang.org/t/rustcall-jl/113259/).
- Interesting “[experience report](https://discourse.julialang.org/t/experience-report-after-finishing-a-reasonably-substantial-julia-project-in-2024/113148)” from a developer that recently finished a big self-contained software project in Julia. Might be of value for people brainstorming dev tool improvements.
- Gripes and suggestions on using [Arrow, Parquet, and HDF5](https://discourse.julialang.org/t/challenges-with-arrow-and-parquet-in-a-reasonably-substantial-julia-project/113209) as data storage formats from Julia.

Notes from other ecosystems:

- Chapel is an interesting language to keep an eye on if you are into high-performance numerical computing. [Their yearly conference is happening soon](https://chapel-lang.org/ChapelCon24.html).
- Rust is floating the idea of [experimenting with “calling conventions”](https://mcyoung.xyz/2024/04/17/calling-convention/), i.e. how at machine-code level function arguments are mapped to CPU registers. Discussed on our [slack](https://julialang.slack.com/archives/C688QKS7Q/p1713447344540189) and on [hacker news](https://news.ycombinator.com/item?id=40081314).

Soapboxes (blogs/talks):

- A great thorough primer on [Automatic Differentiation in Julia](https://gdalle.github.io/AutodiffTutorial/).
- 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.

Sundry:

- [Summer school on numerical methods in quantum information science](https://qnumerics.org), mostly presented in Julia. Happening in August, near Boston.

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:** ![TheLateKronos](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/thelatekronos/32/12824_2.png) [@TheLateKronos](https://discourse.julialang.org/u/TheLateKronos)\
**Post date:** [April 30, 2024, 8:00am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/2 "2024-04-30T08:00:12Z")

</div>

Yet another really good newsletter. Thank you!

---

<div class="post-metadata">

**Author:** ![tamasgal](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamasgal/32/27946_2.png) [@tamasgal](https://discourse.julialang.org/u/tamasgal)\
**Post date:** [April 30, 2024, 8:24am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/3 "2024-04-30T08:24:19Z")

</div>

Thanks @Krastanov I really love your newsletters!

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [April 30, 2024, 2:44pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/4 "2024-04-30T14:44:28Z")

</div>



---

<div class="post-metadata">

**Author:** ![johnh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnh/32/3615_2.png) [@johnh](https://discourse.julialang.org/u/johnh)\
**Post date:** [April 30, 2024, 6:52pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/5 "2024-04-30T18:52:11Z")

</div>

I NEED the Space Invaders REPL. How to enable?

---

<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:** [April 30, 2024, 9:09pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/6 "2024-04-30T21:09:57Z")

</div>

```julia
using WatchJuliaBurn
# then press the space bar (twice?)

```

It is like any other REPL mode. `]` for pkg mode, `;` for shell mode, `?` for help mode, ` `&nbsp;&nbsp;&nbsp;&nbsp; for **space** invader mode

---

<div class="post-metadata">

**Author:** ![jlapeyre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlapeyre/32/4514_2.png) [@jlapeyre](https://discourse.julialang.org/u/jlapeyre)\
**Post date:** [May 1, 2024, 12:53pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/7 "2024-05-01T12:53:14Z")

</div>

Got excited there for a moment to see the new algebraic data types in `ADTypes.jl`.  
Not that the actual package isn’t good.

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [May 1, 2024, 1:50pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/8 "2024-05-01T13:50:25Z")

</div>

> [@jlapeyre](#):
>
> Not that the actual package isn’t good.

The really interesting part is the stuff we can do with ADTypes.jl + DifferentiationInterface.jl

> [@\[ANN\] DifferentiationInterface - gradients for everyone](https://discourse.julialang.org/t/ann-differentiationinterface-gradients-for-everyone/113644):
>
> Julia’s composability has rather interesting consequences for its [automatic differentiation ecosystem](https://juliadiff.org). Whereas Python programmers first choose a backend (like PyTorch or JAX) and then write code that is specifically tailored to it, Julians first write their code and then make it differentiable for one or more of the many available backends (like ForwardDiff.jl or Zygote.jl). Forward and reverse mode, numeric and symbolic, Julia has it all. But it’s not always obvious which option is best suited …

---

<div class="post-metadata">

**Author:** ![kellertuer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kellertuer/32/220707_2.png) [@kellertuer](https://discourse.julialang.org/u/kellertuer)\
**Post date:** [May 1, 2024, 3:14pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/9 "2024-05-01T15:14:40Z")

</div>

Space invader mode! Best feature this month!  
One space is enough, since no reasonable Julia command starts with a space (nor ] nor ; hence they are all mode characters). ⌚ :julia: 🔥!

---

<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:** [May 1, 2024, 6:40pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/10 "2024-05-01T18:40:12Z")

</div>

> [@Krastanov](#):
>
> A lovely list of [well documented packages](https://julialang.slack.com/archives/C6FGJ8REC/p1713881924909949) that you can use as an inspiration for your documentation writing.

This is in Slack, could you copy and paste it here (or somewhere accessible without an account)?

---

<div class="post-metadata">

**Author:** ![kapple](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kapple/32/218915_2.png) [@kapple](https://discourse.julialang.org/u/kapple)\
**Post date:** [May 4, 2024, 2:32am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/11 "2024-05-04T02:32:54Z")

</div>

Julia packages mentioned in the [“well documented packages”](https://julialang.slack.com/archives/C6FGJ8REC/p1713881924909949) Slack thread:

- Documenter.jl
- Makie.jl
- BSplineKit.jl
- Agents.jl
- Franklin.jl
- Supposition.jl
- DataFrames.jl
- Tidier.jl
- ChainRulesCore.jl
- JuMP.jl
- DifferentialEquations.jl
- JuliaFormatter.jl
- Term.jl
- Infiltrator.jl
- Zygote.jl
- Manopt.jl
- DocumenterCitations.jl
- DocumenterInterLinks.jl
- DocInventories.jl
- DrWatson.jl
- OhMyThreads.jl
- FastAI.jl
- [https://learn.genieframework.com](https://learn.genieframework.com)
- Oceananigans.jl
- Luxor.jl

Sidenote: Also mentioned in the thread is extended help (point 11 of [here](https://docs.julialang.org/en/v1/manual/documentation/#Writing-Documentation)), which I didn’t know about till now =).

---

<div class="post-metadata">

**Author:** ![younes](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/younes/32/208506_2.png) [@younes](https://discourse.julialang.org/u/younes)\
**Post date:** [May 14, 2024, 4:13pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/12 "2024-05-14T16:13:54Z")

</div>

Thank you @Krastanov  
I cannot access [About](https://juliahub.com/ui/Packages/General/About)

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [May 14, 2024, 4:23pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2024-04/113638/13 "2024-05-14T16:23:09Z")

</div>

**About.jl** isn’t registered, so it’s not on JuliaHub. Discourse here auto-links to packages in an aspirational manner — if something looks kinda like a registered package it’ll auto-link to it assuming it is. It’s not perfect, but it’s a 90% sort of solution.

I’ve edited the post to manually link to the git repo instead.
