My thoughts & experiences with D so far, as a novice D coder
Jesse Phillips
Jesse.K.Phillips+D at gmail.com
Thu Mar 28 19:11:08 PDT 2013
Definitely need to add some updates to the docs. Long story:
D provides an iterable interface called a Range. There are two
base forms, inputRange and outputRange.
Dynamic Arrays have the privilege of being, a inputRange,
outputRange, and a container.
An array however doesn't operate as you might expect, especially
when using a function called append on it.
An output range consists of the ability call put for Range and
Element (defined in std.range) for a dynamic array this means you
can assign to front.
ubyte[] buffer;
buffer.append!ubyte(42);
The append function takes an outputRange, if we drill down the
call that would be made (ignoring my value isn't correct)
buffer.front = 42;
buffer.popFront();
Thus when using an array as an outputRange it
1) Must have a size (hence the error: "Attempting to fetch the
front of an empty array of ubyte")
2) Starts at the beginning (hence the observation: "instead of
appending it behaves like write()")
3) Is consumed (You didn't run into this)
That is why arrays are awkward and the example makes use of
appender (a more traditional form of an outputRange)
------------
The write function seems a little odd as it uses random access
(indexing).
Instead of assigning to front like append does it assigns at
index buffer[0]...
------------
The implementation of append is what you will find more in
idiomatic D. In fact if the module was written today write
wouldn't exist and append would probably have been named write.
-------------
-------------
"Error: __overloadset isn't a template"
That needs fixed, it usually does a better job of specifying
conflicting modules across modules.
------------
------------
"It seems to me as importing std.bitmanip somehow adds new
properties"
D provides UFCS (Uniform Function Call Syntax). For a given type
A, foo(A a) is callable in both foo(a) and a.foo().
(Historical note: UFCS is recent addition, a bug allowed it to
work with dynamic arrays like you see in these docs)
More information about the Digitalmars-d
mailing list