Gabriel Baraldi
Sessions
With Julia 1.12, experimental support for statically compiled executables is here, but for many the --trim
feature is still a mystery. How does it work? What are its limitations? What might it look like in the future?
To answer those questions, we'll dive deep into specialized inference support, challenging language semantics, and sharp corners in workflows today. Looking to the future, we'll talk about the tooling we might need to make --trim
accessible for everyday Julia programmers.
Performing I/O in Julia under static compilation requires new considerations. In particular, juliac's --trim feature requires that the types returned from I/O calls be known statically at compile time or at least be enumerated. While this allows for small binaries, it does limit how dynamic statically compiled Julia I/O programs can be. This has required modifications to existing I/O packages as well as a new versions of I/O packages to implement these static features.
Task based parallelism brings many advantages to Julia, the main one being that Tasks are lighter abstractions than OS threads. That is possible because we do the scheduling in user space, avoiding expensive context switches. None of this matters if the scheduler itself has poor performance. This year many improvements were made around an in it, so let's take a deep dive into what makes our scheduler work, how to write code that cooperates with it and how we've made it better.