The Thermopylae excerpt of TDPL available online

Don nospam at nospam.com
Thu Oct 29 06:24:37 PDT 2009


Lars T. Kyllingstad wrote:
> Denis Koroskin wrote:
>> On Thu, 29 Oct 2009 15:12:51 +0300, Lars T. Kyllingstad 
>> <public at kyllingen.nospamnet> wrote:
>>
>>> Jason House wrote:
>>>> Andrei Alexandrescu Wrote:
>>>>
>>>>> It's a rough rough draft, but one for the full chapter on arrays, 
>>>>> associative arrays, and strings.
>>>>>
>>>>> http://erdani.com/d/thermopylae.pdf
>>>>>
>>>>> Any feedback is welcome. Thanks!
>>>>  I still think is expressions are a glaring problem. Somewhere in 
>>>> the text, you use assert(!is(typeof(... as support for what you're 
>>>> talking about. That particular construct feels more like a hack 
>>>> someone stumbled into than clean, easy to read code. It's the type 
>>>> of thing a programmer will get wring unless they use it frequently. 
>>>> Even you've screwed it up in past Phobos releases!  IMHO all is(...) 
>>>> expressions should be revisited. Have you written the section(s) on 
>>>> them yet?
>>>
>>> I don't think he uses is(typeof(...)) in the text. The code snippets 
>>> in question are marked "Note: normally the code below would not be 
>>> included...", and I suppose he's put them there as a reminder for 
>>> himself and Walter on what needs to be fixed before the book comes out.
>>>
>>> I agree with you, though, is(typeof(...)) is quite often misused, or 
>>> at least used in an ugly way. Why not use __traits(compiles, ...) 
>>> instead?
>>>
>>> -Lars
>>
>> ... which is at least as ugly.
> 
> 
> I disagree. Pretend you are just learning D, and you are presented with 
> the following two lines of code:
> 
>   static assert (is(typeof(XXX));
>   static assert (__traits(compiles, XXX));
> 
> Which of these would you most likely assume to be a check on whether XXX 
> is compilable code?
> 
> What I cannot for the life of me understand is WHY the double 
> underscores? What's wrong with just "traits"?
> 
> -Lars

Also is(typeof(XXX)) *doesn't* currently check that XXX is compilable, 
just that it has a type.
OTOH __traits(compiles, XXX) is ugly. traits(compiles, XXX) would be 
better; but I think we need to do better than that. It's the 
bread-and-butter of metaprogramming in D. Using the ugly syntax, it has 
well and truly proved its value.
I've counted 20 uses in what I've seen of Andrei's book -- it appears 
about as often as (say) 'delegate'!

It does a beautiful thing, it deserves a beautiful syntax. Something at 
least as good as __compiles(XXX), I reckon.






More information about the Digitalmars-d mailing list