On Saturday, 3 August 2013 at 09:02:32 UTC, Andre Artus wrote:
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
"The D Programming Language" is kind of old and out of date for
the current version of D. There aren't many books for D so you
have not much choice.
Attributes can be declared with 3 different syntaxes. For example
one could write:
//--1--
/*Explicitly state attribute before every declaration*/
public int number;
public string name;
//--2--
/*State the attribute and then curly brackets and all the
declarations inside have the attribute specified. Also note that
those brackets don't introduce a new scope*/
public
{
}