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):
- The VS Code julia extension now shows inline type hints as discussed on slack.
- The juliaup installer (the official one) now provides for an easy way to run the latest nightly version of julia.
- For folks that want to learn more about warts in the type system, check out this slack thread about
Tuple{Type{Int}}
- Fun discussion of weird edge-cases in the type system, together with a few PRs that fix them: discourse, pr1, pr2, pr3
- This has started coming up very regularly: how do you export a type from a package extension (you do not, really).
- A very exciting proposal to provide precompiled caches through the pkg servers, so that users do not need to wait for precompilation when they install a library. A detailed proposal and a slack discussion.
- There is growing consensus that
using Foo
is too polluting to the namespace of a library, and people are encouraged to switch tousing Foo: Bar
. There is even now testing/CI tools for that. - How difficult would it be to support pre-emptible threads in Julia, similar to Erlang or Go. See this slack discussion.
- More experiments with better support for fixed-sized arrays and all the potential compiler guarantees that brings discussed on slack.
- Educational discussion on the difference between a
struct
and amutable struct
with all fields markedconst
on slack. - An interesting slack thread on “errors as return types” and the
Option
andSome
types, of course ending up with discussion of sum types again.
Core Julia Repos:
- The way the compiler allocates memory is very different from how other allocations happen. There is a suggestion to set up the garbage collector so that separate memory pool is used for allocations done by the compiler, significantly lowering memory fragmentation. See issue, draft PR, and slack discussion.
- You can now use the -m CLI flag to directly run the
main
function of a module. - Many improvements to the registration process for the General registry.
- Now it is much easier to customize the printing of your own testset types (for when you want custom testing behavior).
- Project.toml files will soon support
[sources]
sections that specify paths to installed packages, making many dev workflows more convenient. - Long ago a profile-guided-optimization recipe for Julia was prepared. It is now merged.
- Convenient CLI flag for Julia to start a temporary environment.
In search of contributors and new maintainers (specify novice/moderate/expert and internals/domain background necessary):
-
FillArrays.jl is looking for people to contribute to the package. No specific domain expertise is necessary, just a general understanding of writing performant code in Julia. Contributions will mainly be in improving the interoperability with other packages, which may be either through bug fixes, testing package composition, or through adding package extensions. FillArrays is a transitive dependency of nearly two thousand packages, so any contribution would have a significant impact across the ecosystem.
-
Looking for contributors to the PySR/SymbolicRegression.jl/DynamicExpressions.jl ecosystem. There is a variety work related to “PySR v2” — significant contributors will be invited to coauthor, when PySR will become more of a community tool for symbolic discovery. Of particular need: (1) CUDA.jl kernel optimization, (2) interfacing with PythonCall.jl, (3) making the SymbolicRegression API more generic and idiomatic, and (4) interfaces with Flux.jl(/other). For general contributions, all skill levels are welcome to get in touch (mc2473@cam.ac.uk).
Ecosystem Fora, Maintenance, and Colab Promises (Slack/Zulip/Discourse/Github):
- The new Codecov action requires a bit more setup. If you use it in your CI, make sure it has not broken. Discussed also on slack.
- A new CI tool exists now to test lower bounds of your Project.toml compat sections. Quite useful if you want to ensure that your package is resilient when installed together with other ancient libraries.
- Pluto now visualizes stack traces in an awesome, detailed, user friendly way.
- A well-known frustration is that Revise does not automatically revise struct/type definitions. This thread discusses tools to work around that issue.
- JuliaHealth now has two monthly meeting to better accommodate timezones: one starting at 12PM EST for Americas/Africa/Europe areas, and another at 12PM IST for folks in Asia/Oceania. Check the community calendar for dates
- Handcalcs.jl for visualizing your Julia computational kernels in pretty LaTeX math.
- A detailed comparison of many different optimizers in Julia.
- For those interested in sum types, another interesting development is MixedStructTypes.jl.
- More tools for simplifying the implementation of pretty printing methods with AutoPrettyPrinting.jl.
Soapboxes (blogs/talks):
- An interesting comparison of high-performance toy parser implementations in Julia and Mojo, together with some personal reflections of the feelings a Julia power user has for Mojo.
- The blog Modern Julia Workflows has published a second tutorial, showing all the details of package creation.
- Consider subscribing to the French community newsletter (much of the shared materials are in English).
- Consider subscribing to the community calendar 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:
- Jacob Zelko (TheCedarPrince) has stepped up as one of the community administrators for this year’s Google Summer of Code.
- Google Summer of Code season is here! Make sure to update your projects on the JuliaLang website.
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. Some of it might survive by the time of posting.