I'm not sure what situation you're imagining where modules would be created with the same names...?


How do you plan to map C++'s standard lib ? One giant hundred of thousands of line C++ file ?

Surely it would map by file.

#include <vector> -> import stl.vector;
#include <map> -> import stl.map;
#include <string> -> import stl.string;

Perhaps 'stl' may be something else, 'std' is an unfortunate conflict with phobos, but this is unique to this case.


But, in this case, I can't have an stl.vector!X which would map to an std::vector<X> . The namespacing of symbol has been completely changed.

I'd suggest it's the only possible way to make it feel the same.
It's a no-brainer for the binding author, copy and rename .h files to
.d, then regex until finished.


That would require to have a similar namespacing, unless extern(C++, name) introduce a symbol called name.

Note that the conflict rule can be tuned the same way it is specified for multiple alias this and you get something really nice.

What case is there where a C++ lib distributing its symbols naturally among modules named accordingly with the original include's would
cause confusion when compared against the C++ docs?
Doc says '#include <libname/feature.h>', I'll 'import libname.feature;'
Nothing could be more natural than this.

As a bonus, the project's C++ namespace 'libname' is already present in the fully qualified name, it's the top level package! No point repeating that as 'libname.feature.libname.symbol'.

I think it does make sense to make the C++ namespace "skippable", alias this style, while keeping it around to disambiguate. It is clear that C++ having namespacing and header being decoupled will cause problem if namespaces do not introduce a symbol.

Reply via email to