The Thermopylae excerpt of TDPL available online
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Fri Oct 30 10:21:29 PDT 2009
Saaa wrote:
> Andrei Alexandrescu wrote:
>> Andrei Alexandrescu wrote:
>>> Saaa wrote:
>>>> Could anybody clear these up for me?
>>>>
>>>>> p16. Is there anything other than the random values, unsafe about void
>>>>> assignment?
>>> I'd put your feedback on my pile of things to do, but now that you ask, I
>>> made this change to the incriminated paragraph:
>>>
>>> ===========
>>> Such uninitialized arrays are particularly useful for large arrays
>>> that serve as temporary buffers. An uninitialized integral may not
>>> cause too much harm, but uninitialized values of types with
>>> indirections (such as arrays themselves) are unsafe.
>>> ===========
>>>
>>>>> p18. What is unsafe about implicit conversion of static to dynamic
>>>>> array?
>>>>> Meaning getting a dynamic array pointing to a stack allocated
>>>>> array.
>>>>> Any operation changing its size could copy the array to the
>>>>> heap. What am I missing
>>> T[] fun() { T[10] a; return a; }
>>> ...
>>> auto x = fun(); // gained access to recycled stack memory
>>>
>>> There's no change in size there.
>>>
>>>>> p20. 10 int take up 40 words?
>>> The example given has a per-row payload of 10 ints, i.e. 40 words.
>> It's bytes actually. So finally I rewrote those last words as:
>>
>> "... small per-row payload of~10 @int at s (40 bytes)."
>>
>>
>> Andrei
>
> Thanks !
>
> Out of interest, do you keep a list of common error or something alike that
> helps you keep errors at a minimum?
I got as sophisticated as having an email folder dedicated to TDPL.
> Also, do you have automated example checking?
Yes. If you look at the document very closely, you'll see that some
snippets have a thin line above and below them. Those are automatically
checked every time I save the document. (There are 1-2 examples that
aren't checked in the Thermopylae excerpt because I switched editing to
a 64-bit machine that can't build D programs (I'll post a question later
today). But in the meantime I fixed those.)
Very short snippets do not have a thin line above and below them. Those
are not checked because they are short enough to warrant that I know
what I'm doing.
Some checked snippets wouldn't compile without being in a function, for
example:
enum size_t columns = 128;
// Allocate a matrix with 64 rows and 128 columns
auto matrix = new double[columns][64];
// No need to allocate each row - they already exist in-situ
foreach (ref row; matrix) {
... // use row of type double[columns]
}
These are automatically entered inside a unittest. Also, my code
extraction script (written in D!) automatically eliminates unneeded
"...", so the code as seen by the compiler is:
unittest {
enum size_t columns = 128;
// Allocate a matrix with 64 rows and 128 columns
auto matrix = new double[columns][64];
// No need to allocate each row - they already exist in-situ
foreach (ref row; matrix) {
// use row of type double[columns]
}
}
which passes compilation.
Some other examples need "invisible" support:
writeln("hey");
For those I have a special mechanism to insert invisible code, so my
text for the above actually looks like this:
\begin{D-invisible}
import std.stdio;
\end{D-invisible}
\begin{D-snippet}
writeln("hey");
\end{D-snippet}
What the compiler sees is a file importing std.stdio and including the
writeln inside a unittest.
I wouldn't know how to pull this off reasonably with e.g. Word, but I'm
sure it now has mechanisms or extensions that allow that kind of thing.
One thing I don't need to worry about with LaTeX is that it's text-based
so I can process it easily myself.
> Or, more general, I would be interested in a small article explaining how a
> book like this is written.
>
> Maybe After the book is finished :)
I think the topic is well worth an article indeed. I continuously
streamline the process of building the book, and it's gotten pretty
sophisticated but very helpful as well. Index building is also an
interesting subtopic.
Andrei
More information about the Digitalmars-d-announce
mailing list