The Thermopylae excerpt of TDPL available online

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Fri Oct 30 01:11:20 PDT 2009


Don wrote:
> 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.

Again with the double underscores. :) I'm starting to think we need a 
separate namespace for the CT stuff.

   D.compiles(XXX)
   D.typeof(foo)
   D.stringof(T)
   D.allMembers(T)
   etc.

-Lars



More information about the Digitalmars-d mailing list