# This month in Julia world - 2023-07

**URL:** <https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276>\
**Category:** Newsletter\
**Created:** [July 30, 2023, 9:26pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276 "2023-07-30T21:26:21Z")\
**Posts on this page:** 7\
**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 30, 2023, 9:26pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/1 "2023-07-30T21:26:21Z")

</div>

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](https://github.com/JuliaLang/www.julialang.org/issues/1908) 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](https://discourse.julialang.org/t/psa-thread-local-state-is-no-longer-recommended-common-misconceptions-about-threadid-and-nthreads/101274).
- Lilith and others have been [discussing better documentation](https://github.com/JuliaLang/julia/issues/50486) 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](https://julialang.slack.com/archives/C67TK21LJ/p1689341566774939) 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:

- The feature freeze for the upcoming 1.10 happened and there is already a 1.10 alpha and beta.
- Minor improvement to the [inlining heuristics](https://github.com/JuliaLang/julia/pull/50428) (the cost function that decides whether a function is worth inlining). Maybe this is a place where inexperienced folks can start learning about and contributing to the compiler.
- Prem Chintalapudi and others working on a lot of extremely valuable improvements to the documentation of the internals, including [Just-int-time compilation](https://github.com/JuliaLang/julia/pull/50168), [Ahead-of-time compilation](https://github.com/JuliaLang/julia/pull/50376), and [custom compiler optimizations](https://github.com/JuliaLang/julia/pull/50319/files). Also [SSA-IR](https://github.com/JuliaLang/julia/commit/5baaafd693dd32309f5c4317a674302880fbaa0e).
- Some [small](https://github.com/JuliaLang/julia/pull/50320) [experiments](https://github.com/JuliaLang/julia/pull/50321) related to lowering the overhead from mitigating [spectre](https://en.wikipedia.org/wiki/Spectre_(security_vulnerability))-[like](https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability)) CPU vulnerabilities:
- Julia’s REPL has had [suboptimal suggestions](https://github.com/JuliaLang/julia/issues/49466) in autocompletion. There are [improvements](https://github.com/JuliaLang/julia/pull/49562) on the [horizon](https://github.com/JuliaLang/julia/pull/50412).
- Improvements to `@code_llvm` and other introspection tools thanks to [more annotation in the IR](https://julialang.slack.com/archives/C6FGJ8REC/p1689719971869459).

Dustbin of History:

- [The early PL paper on Julia (“Julia: Dynamism and Performance Reconciled by Design” 2018 ACM)](https://dl.acm.org/doi/pdf/10.1145/3276490) is quite the perfect read for folks who want the condensed rigorous version of “What is Special about Julia”.
- While speaking of papers on Julia internals, “[Type stability in Julia: avoiding performance pathologies in JIT compilation](https://dl.acm.org/doi/10.1145/3485527)” (2021) and “[Julia subtyping: a rational reconstruction](https://dl.acm.org/doi/10.1145/3276483)” (2018) are both wonderful.

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

- [FastDifferentiation.jl](https://discourse.julialang.org/t/ann-fastdifferentiation-jl/101556/) 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](https://discourse.julialang.org/t/diffractor-release/102123) autodiff research project has a release with exciting new mostly-stable functionality.
- For fans of rigorous package testing, there is now [PropCheck.jl](https://discourse.julialang.org/t/ann-propcheck-jl/101481) – a very valuable “[hypothesis](https://hypothesis.readthedocs.io/en/latest/)”-style test generator / fuzzer. If you are a fan of [JET](https://github.com/aviatesk/JET.jl) and [Aqua](https://github.com/JuliaTesting/Aqua.jl), up your bug fighting skills even more with PropCheck.jl
- From the author of PropCheck.jl we also get [RequiredInterfaces.jl](https://discourse.julialang.org/t/ann-requiredinterfaces-jl/101296) 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](https://github.com/JuliaGraphs/Graphs.jl/issues/146) to improve and unify the entire interface and split it into [GraphsBase.jl](https://github.com/JuliaGraphs/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](https://github.com/JuliaGPU/AMDGPU.jl/pull/423#issuecomment-1623226477).
- [Citation management in Documenter.jl](https://github.com/JuliaDocs/DocumenterCitations.jl) getting much better thanks to a number of volunteers cleaning up and upstreaming previous efforts.
- A [JuliaHub client library](https://discourse.julialang.org/t/ann-juliahub-jl-client-library-for-juliahub/101456) for programmatically managing jobs.
- New release with many new features for the distributed arrays (and linear algebra) package [Dagger.jl](https://discourse.julialang.org/t/dagger-development-and-roadmap/101935). The post includes future roadmap as well.

Soapboxes (blogs/talks):

- A [blog post on the use of @eval](https://www.oxinabox.net/2023/06/17/resident-eval.html) but also [some pitfalls to consider](https://julialang.slack.com/archives/C688QKS7Q/p1689608941424169).
- A [talk and blog post](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/1) on comparisons between Rust and Julia. Please be gentle if you jump in the conversation, as folks were a bit heated for a bit. But a number of really interesting posts emerged from it: [a](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/22), [b](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/24), [c](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/34), [d](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/56), [e](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/64), [f](https://discourse.julialang.org/t/blog-post-rust-vs-julia-in-scientific-computing/101711/80)
- [JuliaCon 2023](https://juliacon.org/2023/) just finished. There were a ton of great talks. In the spirit of the newsletter though, let me focus only on ones that seem informative about internals for newcomers and veterans. These are all livestreams – these recordings will be deleted soon but captioned post-processed videos are being prepared.
  - [“The State of Julia”](https://www.youtube.com/live/2D8oRtDJEeg?feature=share&t=951)
  - [Improvements and future work for static analysis (JET.jl)](https://www.youtube.com/live/rMrHCM1Etng?feature=share&t=17129)
  - [Improvements and future work on the Garbage Collector](https://www.youtube.com/live/rMrHCM1Etng?feature=share&t=16467)
  - [The new Package Extension capabilities of Pkg.jl](https://www.youtube.com/live/vG6ZLhe9Hns?feature=share&t=23631)
  - [What is involved in releasing a new Julia version](https://www.youtube.com/live/3AFiBLHlG1A?feature=share&t=20381)
  - [Compiling Julia to “exotic” architectures under severe constraints](https://www.youtube.com/live/3AFiBLHlG1A?feature=share&t=18594)
  - [Thread pinning](https://www.youtube.com/live/rMrHCM1Etng?feature=share&t=1655)

Sundry:

- JuliaHub Receives [13 M$ Strategic Investment](https://www.prnewswire.com/news-releases/juliahub-receives-13-million-strategic-investment-from-ae-industrial-partners-horizonx-301863793.html) from AE Industrial Partners HorizonX.

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](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:** ![indymnv](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/indymnv/32/212594_2.png) [@indymnv](https://discourse.julialang.org/u/indymnv)\
**Post date:** [July 30, 2023, 11:25pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/2 "2023-07-30T23:25:25Z")

</div>

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?](https://discourse.julialang.org/t/what-steps-should-the-julia-community-take-to-bring-julia-to-the-next-level-of-popularity/101389)

---

<div class="post-metadata">

**Author:** ![Tomas\_Pevny](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomas_pevny/32/25466_2.png) [@Tomas\_Pevny](https://discourse.julialang.org/u/Tomas_Pevny)\
**Post date:** [July 31, 2023, 4:41am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/3 "2023-07-31T04:41:06Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![fatteneder](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fatteneder/32/33991_2.png) [@fatteneder](https://discourse.julialang.org/u/fatteneder)\
**Post date:** [July 31, 2023, 11:49am UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/4 "2023-07-31T11:49:46Z")

</div>

You can find all previous newsletters in the `Community - Newsletter` category: [Newsletter - Julia Programming Language](https://discourse.julialang.org/c/community/news/66)

---

<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:** [July 31, 2023, 1:24pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/5 "2023-07-31T13:24:47Z")

</div>

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

 ![image](https://global.discourse-cdn.com/julialang/original/3X/3/b/3be44ed4172fb67d78485a27ffddfc5ca016e31e.jpeg)

---

<div class="post-metadata">

**Author:** ![greatpet](https://avatars.discourse-cdn.com/v4/letter/g/e495f1/32.png) [@greatpet](https://discourse.julialang.org/u/greatpet)\
**Post date:** [August 1, 2023, 3:56pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/6 "2023-08-01T15:56:08Z")

</div>

> [@Krastanov](#):
>
> A [blog post on the use of @eval](https://www.oxinabox.net/2023/06/17/resident-eval.html)

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?

---

<div class="post-metadata">

**Author:** ![ranocha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ranocha/32/35588_2.png) [@ranocha](https://discourse.julialang.org/u/ranocha)\
**Post date:** [August 3, 2023, 12:04pm UTC](https://discourse.julialang.org/t/this-month-in-julia-world-2023-07/102276/7 "2023-08-03T12:04:49Z")

</div>

It’s definitely a nice feature. We have used it in [Trixi.jl](https://github.com/trixi-framework/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.
