One of the big reasons for having things in
Base is that packages can seamlessly coordinate: Packages A and B extend a base function and then can cooperate, without knowing about each other. If no suitable name / abstract interface exists in Base, then, well, as far as I understood there needs to be a
fooBase package containing no actual code, only abstract types and function definitions. Then A and B both depend on
fooBase and can cooperate.
fooBase is really tiny (NPM left-pad style), and introduces only a tiny amount of overhead. So it might make sense to have some non-exported
Base.Stubs.xyz as coordination points. That is: The bar for exported code in Base is much much higher than the bar for a non-exported empty function declaration. And I think that, in the example of
inner or the recent PR for Banach-space norms https://github.com/JuliaLang/julia/pull/27401, much of the proponents good arguments for inclusion in
Base could be met by giving them their reserved (non-exported, in a submodule!) name.
Indeed, I could imagine quite a few more useful name reservations, like e.g. distances (now in
Distances.jl). In some sense, julia Base wants to be a kind of IANA (having a global DNS root is pretty useful for coordination, even though you of course want the option of locally resolved name-spaces).
What do you think?