On 30 November 2015 at 20:12, Kagamin via Digitalmars-d <[email protected]> wrote: > On Sunday, 29 November 2015 at 04:57:28 UTC, Walter Bright wrote: >> >> We considered making them for mangling only, and rejected it as >> unworkable, because then two identical names in different namespaces could >> not be distinguished by the D symbol table system. > > > Didn't you show how two identical names can be distinguished with D symbol > table system: > > On Sunday, 29 November 2015 at 18:29:14 UTC, Walter Bright wrote: >> >> file1.NS.X x; >> file2.NS.Y y; > > > It also works the same for C bindings: they share (empty) namespace, but > identical C declarations can be distinguished in D if they are in different > modules. Maybe it's better to ignore C namespaces and rely on D module > system instead? > Though I don't know why one would want to disallow access to a C++ > namespace.
Exactly, the D module system would still be in place. Assuming they were in defferent modules, then the D module system would keep them out of conflict naturally, with rules identical to the normal D rules. I imagined this; C++ namespace is for mangling, D module is for scoping. That's not how it seems to be, so my intuition was dead wrong, but my weekend's experience has convinced me it would be better how I initially intuited. Thing is, we're presenting a C++ API to D, so we want to present it in D's terms, that is, the API is distributed among D modules in a way that makes sense to a D user. I don't want to present the API in C++ terms, and it's not even practical; stuffing the entire C++ API into a single D module is crazy. In the cases I'm interested in, the C++ API is possibly larger than the entire D codebase that's attached to it. Walter said this: "Stop trying to bash D into behaving like C++! [...]", which I was kind of offended by, because it couldn't have been further from my intent. I'm trying to bash C++ into behaving like D, and the best way to do that would be to say that C++ namespace is for mangling only, and expect that the dev will distribute the C++ symbols among D modules in such a way that makes sense to D developers consuming the API.
