I know I know about things moving out of Julia to packages, within reason. I am one of the people who heavily advocated for that back when Julia was batteries included. But let’s ground the discussion with some specifics. I was profiling a bunch of compile times and to my dismay I found the following:
julia> @time using StaticArrays 0.436497 seconds (2.09 M allocations: 155.908 MiB, 0.51% compilation time)
Note that this occurs in a brand new REPL in Julia v1.7 for a package that has almost 2000 dependents. This is a package that almost all users have in a dependency tree somewhere, and by doing so they instantly bump to a noticable at least ~0.5 second delay. It only has standard library dependencies, it has no use of Requires.jl to blame, it just is.
Yes, the standard library is where packages go to slow down development, but is that really a bad case for StaticArrays in its current form? It’s already well-past its major development bump. It sees far less development than something like Base.LinearAlgebra. A good number of the PRs are just fixes for Julia version updates anyways since StaticArrays digs a bit lower than most packages should, so it would be nice if it was tracked by the Base CI.
Why is StaticArrays not in the Base system image, cutting out that load time for every user of 2,000 of the most common packages? If it is worthy of inclusion into the standard system image, where does it stop? ForwardDiff.jl has similar properties, though the usage numbers are not quite as high and it’s only adds 0.2 seconds:
julia> @time using ForwardDiff 0.613780 seconds (2.66 M allocations: 189.512 MiB, 1.81% compilation time)
At what point is something standard enough that it should be part of the standard system image so that we can cut out its startup time? As some libraries become more used than some portions of the standard library, “never” seems like too strict of a rule.