I was playing with PackageCompiler. I managed to create shared and static libraries for a simple piece of code:
open("/tmp/borrame.txt", "w") do f
write(f, "A, B, C, D\n")
f(x) = x < 20 ? true : false
I was surprised about the size 130M for the shared library.
Will it always be like that or is it a matter of time getting to more reasonable sizes?
I was playing with go and I just love how easy and fast it is to run
go run file.go or compile
go build file.go, getting a single file for the whole project. On the other hand it is really nice having a REPL.
What PackageCompiler does is it recompiles the Julia sysimg (sys.so) with your package/functions compiled on top. Since the Julia sysimg is about 130MB, that’s almost definitely what you’re seeing.
There is a branch of Julia in the works to potentially avoid the need to load the sysimg when we don’t want to pull in all that stuff, just to compile a simple (mostly static) binary: https://github.com/tshort/julia/tree/standalone-mode/test/standalone-aot
Do note that using IO (
open) requires libuv and the Task runtime, which itself might be rather heavy and hard to separate from the rest of libjulia without terribly breaking language symantics. I previously proposed having the option to replace libuv-provided IO with simpler libc-provided IO (which has very different but well-known semantics), which would be useful where you’re okay with blocking IO and such.
Thanks for the information. Really encouraging.