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