extern(C++, ns)
Simen Kjaeraas via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jan 20 16:07:53 PST 2016
On Wednesday, 20 January 2016 at 23:35:31 UTC, Manu wrote:
> On 21 January 2016 at 01:32, Simen Kjaeraas via Digitalmars-d
> <digitalmars-d at puremagic.com> wrote:
>> On Wednesday, 20 January 2016 at 12:47:44 UTC, Manu wrote:
>>>>>>
>>>>>> 2. Multiple modules cannot have the same name in D.
>>>>>
>>>>>
>>>>>
>>>>> 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.
>>
>>
>> I believe deadalnix here meant something like this:
>>
>> import stl.vector;
>> import mylib.vector;
>>
>> Vector a; // Ambiguous: could be from mylib or stl
>> stl.Vector b; // Error: no such class stl.Vector
>> stl.vector.Vector c; // Works, but requires extra typing
>
> Okay let me tweak your code:
>
> import stl.vector;
> import stl.string; // one more thing; when do you ever only
> import a single module?
> import mylib.vector;
>
> Vector a; // Ambiguous: could be from mylib or stl
> stl.Vector b; // Error: this wouldn't work, becase stl could
> be stl.vector.stl or stl.map.stl
> stl.vector.Vector c; // This is what a D programmer expects,
> exactly like every other conflict resolution in D ever, but it
> doesn't work either
[snip]
>> Which with working namespaces might allow case b to work.
>
> I hope I've shown how it almost never does, and only makes the
> situation worse.
I'm playing devil's advocate here, since I fully agree with you
that there is absolutely no need for C++ namespaces in D, and
that the cost in language complexity is too high.
Suppose that case b above worked, though - instead of a conflict,
lookup would basically merge namespaces with the same name, and
only conflict if there are multiple definitions that are not
namespaces.
On the one hand, I hope that's how it's supposed to work,
otherwise it's just silly. On the other hand, that's a clear break
with D's current lookup rules, and for what I consider very, very
little benefit.
--
Simen
More information about the Digitalmars-d
mailing list