include is a red herring here. Again, the issue is simply accessing symbols of a parent module without naming it, nothing more.
While having missing features is normal in all languages, I don’t understand why you are trying to rationalize them with arguments like this. Again, we already have the ...... syntax, with as many dots as you like. The discussion is not about this — I appreciate that you are trying to help, but please read the question.
It doesn’t seem to add much and is outweighed by clarity issues and how it can facilitate multiple includes, even if that’s not the intent. It’s hard for me to call it a feature, I suppose. The clarity issues seem pretty similar to what a couple other commenters have opined already.
I don’t know why you think what I said was irrelevant, so I don’t understand why you’re asking me to read the question again. I’m well aware that we can put dots in import statements, and I was opining that it’s beneficial to require a name after the dots. That seems relevant to this issue where you’re proposing that requirement be optional.
Although the proposed nameless syntax example can have a rule to select the name of the parent module that 2 dots indicate, 2 dots being usable for several modules’ imports makes it visually ambiguous without the name. 3 dots can also be used to import Foo, so nameless syntax could do that instead with a different rule. If people don’t keep the rule in mind or make a off-by-1-dot error, they could easily omit the name in using ...Foo without realizing the implicit names are different.
julia> module Foo
module Bar0 end
module Bar using ..Bar0 end # getproperty(Foo, :Bar0)
end;
WARNING: replacing module Foo.
julia> module Foo
module Bar0 end
module Bar using ..Foo end # getproperty(Foo, :Foo)
end;
WARNING: replacing module Foo.
julia> module Foo
module Bar0 end
module Bar using ...Foo end # getproperty(Main, :Foo)
end;
WARNING: replacing module Foo.