Plans for Updating Julia

Juliaup consists of two binaries: juliaup and julialauncher.

julialauncher gets exposed to end-users as julia via a symlink on Linux/Mac and an execution alias on Windows. When a user installs Juliaup, and then types in julia, that will actually start julialauncher. julialauncher handles a few things: it handles the +channel command line argument, reads the Juliaup configuration file, when in standalone mode occasionally checks for new versions of Juliaup itself, and then launches the correct actual Julia binary. As it essentially injects itself into almost every Julia launch, it needs to be really fast. And small and self-contained, so that it can actually be fast. That means it can essentially be written in C, C++ or Rust (or maybe Go? Not familiar enough with it) in terms of mainstream languages. The original version was in C++, but that was painful because even very simple things seem often very complicated in C++, plus it was just a major pain to get simple functionality like downloading files, extracting archives etc. working. I started looking at Rust at the same time, and it really is fantastic for this kind of software.

juliaup itself was originally written in Julia, as @simeonschaub rightly pointed out, and then compiled with PackageCompiler.jl. But that was never really a smooth experience, for many reasons. The resulting binary distribution was gigantic (couple hundred MB), which really is not ideal for a simple small command line tool, startup latency was not fantastic (not horrible, but not great), compile times were really long and it was all just really rough. So then at some point, when I had already ported julialauncher to Rust, I just ported the rest over as well. And I’m very, very happy with that choice :slight_smile: Rust is fantastic for this kind of software, the tooling is excellent etc. All the things that make Rust very different from a dynamic language like Julia, e.g. static typing, very different error handling model etc, make it a complete non-starter for scientific code, but for something like Juliaup it is a really good match (much better than a dynamic language like Julia, IMO).

Just to be clear, Rust compiles standalone binaries, end-users don’t need Rust or anything related to Rust installed on their system to use Juliaup.

I think in general a default Julia installer should “just work”, without users having to install anything else first. Plus, Python setup on Windows is kind of mess, IMO… I really wouldn’t want the default Julia setup story to get entangled in that.

29 Likes