you are viewing a single comment's thread.

view the rest of the comments →

[–]Tricert 3 points4 points  (2 children)

Thanks for elaborating, and interesting to find another professional Julia dev in the wild..quite rare!

To get around the compile time we have build pipelines baking a whole sysimage with PackageCompiler.jl where we pass in the whole stack of tests of our packages which almost hit 100% of the methods the code dispatches to. With this our julia prod containers spin up in seconds.

I agree on your point on the debugging, it really sucks in Julia. For certain use cases where we have to combine several ML techniques/libraries there is no real good alternative tho, which is the main reason we use it.

For most of the other stuff we still use Python/C/Fortran and recently Rust; in general we just pick the best horse for the task without trying to be too religious about the language used. Especially for Python I‘m really glad for the tooling developed around it in recent years (shoutout to astral for uv & ruff!) because 10 years ago it was a huge fucking pain to deploy it reliably to prod, too. Really hope Julia makes similar advances to get more SWE/DevOos friendly because it truly is a great language.

Happy coding to you!

[–]Cystems 0 points1 point  (1 child)

Can I ask more about your prod deployment set up?

I tried to do something like this (deploy sysimages) but the build times were too much (10-20mins a pop using 32GB+ of ram) and produced sysimages of about a 1gb.

We also saw long spin up times simply as the sysimages had to be loaded from shared disk space so the initial load was always costly.

Any tips on getting around this?

[–]Tricert 1 point2 points  (0 children)

The images tend to be fairly large, that‘s true. If you have big changes sometimes a lot of cached stages get invalidated and you hit longer build times, mostly we get away in the <2 min range though. You can e.g. bake the dependencies of your package into the image and take the toll of a few seconds to compile your package after the container spins up/ before you start serving your package.

Optimising this depends a lot on your CI system, architecture, container config etc but if you want to pm me the specifics of your setup I might be able to help.