"Hello D-world!", imports & South African D-naughts

Andre Artus andre.artus at gmail.com
Sat Aug 3 02:02:31 PDT 2013


On Saturday, 3 August 2013 at 06:51:40 UTC, evilrat wrote:
> On Saturday, 3 August 2013 at 05:24:11 UTC, Andre Artus wrote:
>> On Saturday, 3 August 2013 at 04:38:13 UTC, Andre Artus wrote:
>>> Hello D-world!
>>>
>>> My name is Andre Artus, and I'm a programmer from 
>>> Johannesburg, South Africa.
>>>
>>> I'm relatively new to D, but so far quite impressed by it. I 
>>> have been reading Andrei Alexandrescu's "The D Programming 
>>> Language" and Ali Çehreli's "Programming in D" to get up to 
>>> speed. Both are quite good.
>>>
>>> 1st Q: Are there other S'frican D'philes on this forum?
>>>
>>> 2nd Q:
>>>
>>> I have noticed Andrei's use of the following construct with 
>>> regard to static imports (p 346):
>>>
>>> static {
>>> import teleport;
>>> import time_travel, warp;
>>> }
>>>
>>
>> To answer my own question this seems to be an application of 
>> the AttributeSpecifier rule. Which means that "public" and 
>> "static" should probably be removed from the ImportDeclaration 
>> rule.
>
> they shouldn't. static imports is handy that way to reduce 
> namespace pollution(by forcing fully qualifying names), and 
> public imports allow import other necessary modules just by 
> importing one.

I realize I was probably a bit unclear in my writing. I am not 
advocating for the removal of these constructions of 'static' or 
'public' from the language. What I'm proposing is that this 
specific area of the documentation does not accurately reflect 
the grammar (or does so redundantly).

What I tried to say is that the reference to 'static' and 
'public' in my implementation of ImportDeclaration (based on my 
reading of the online docs) was redundant. I have since changed 
my implementation and it now parses all the variants I previously 
described including the following:

static {
   import teleport;
   import time_travel, warp;
}

public {
   import teleport;
   import time_travel, warp;
}


The rule "static import ImportList ;" production given in 
[ImportDeclaration](http://dlang.org/module.html#ImportDeclaration) 
is redundant because it is already covered by 
[AttributeSpecifier] 
(http://dlang.org/attribute.html#AttributeSpecifier).

ImportDeclaration:
	import ImportList ;
	**static import ImportList ; ** // seems redundant


AttributeSpecifier:
     Attribute :
     Attribute DeclarationBlock


Attribute:
     // ...
     ProtectionAttribute
     **static**
     // ...

ProtectionAttribute:
     private
     package
     protected
     **public**
     export




More information about the Digitalmars-d-learn mailing list