"Hello D-world!", imports & South African D-naughts
Andre Artus
andre.artus at gmail.com
Sat Aug 3 03:12:55 PDT 2013
On Saturday, 3 August 2013 at 09:24:25 UTC, Bosak wrote:
> "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
> {
> int number;
> string name;
> }
> //--3--
> /*Use C++ style atributes. All the declarations after the
> attribute declaration have the attribute. If you declare
> another attribute the same way after that, then the old
> attribute is replaced with the new one for the declarations
> that follow*/
> public:
> int number;
> string value;
> private:
> //everything below is private
Thank you Bosak, I managed to glean as much from the
'Attributes'[http://dlang.org/attribute.htm] page. What tripped
me up is the redundancy in the 'import' declaration
[http://dlang.org/module.html#ImportDeclaration].
If you follow the documentation (as it currently stands) to it's
conclusion then the following should be valid D:
static {
*static* import teleport;
*static* import time_travel, warp;
}
--AND--
static:
*static* import teleport;
*static* import time_travel, warp;
Whereas all the following constructions can just as easily be
parsed when the 'static import ImportList ;' production is
removed from 'ImportDeclaration'.
static {
import teleport;
public import time_travel, warp;
}
static:
import teleport;
public import time_travel, warp;
public:
import teleport;
static import time_travel, warp;
private:
import teleport;
static import time_travel, warp;
along with the more standard fare:
import std.stdio;
import phobos.std.stdio;
import foo, bar;
static import stat.std.stdio;
public import pub.stdio;
static import teleport, time_travel, warp;
import list = util.container.finite.linear.list;
import widget : fun, gun;
import std.stdio : writefln, foo = writef;
The only issue for the parser is that I need to keep track of the
implied block for the 'Attribute :' construction. By that I mean
that the parse trees for X in 'public { X }' and 'public: X'
should probably be indistinguishable, and naively rewriting
'Attribute :' into 'Attribute : DeclDefs?' will not do.
More information about the Digitalmars-d-learn
mailing list