On Monday, 23 January 2023 at 00:36:36 UTC, thebluepandabear
wrote:
I haven't been programming for a long time, but most of the
other languages I used had such a namespace feature. Kotlin has
something called an `object` which is essentially a namespace
and it is great. The benefits of adding a namespace-like
feature outweigh its costs, imo.
If you really want to, you can mostly force a namespace use like
this:
```
// mylib/package.d
module mylib;
public static import mylib.impl.funcs;
// mylib/impl/funcs.d
module mylib.impl.funcs;
void foo() { }
```
Now when users import mylib, the public static import means hey
call mylib.foo. Just don't bother documenting the impl subpackage
and only those who look at the source will even know it exists.
I went through this same process when I first came to D years
ago. D's modules *are* namespaces, and I wanted a way to force
them. Eventually, I got over it. There's no reason to force a
namespace. Namespaces are intended to disambiguate conflicting
symbols. So let the users use them that way. There's no need to
force them to type out the namespace all the time. It's certainly
not an OOP vs. procedural issue, as namespaces have nothing to do
with OOP.