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