dmd 1.046 and 2.031 releases
Derek Parnell
derek at psych.ward
Mon Jul 6 22:58:56 PDT 2009
On Mon, 06 Jul 2009 21:29:43 -0700, Walter Bright wrote:
> Derek Parnell wrote:
>> However, that aside, the syntax you have chosen will have a rational
>> explanation for its superiority. So can you explain in simple terms why
>>
>> CaseLabelInt .. CaseLabelInt eg. case 1: .. case 9:
>>
>> is superior than
>>
>> case CaseRange: eg. case 1 .. 9:
>>
>> given that
>> CaseLabelInt ==> case IntegerExpression :
>> CaseRange ==> IntegerExpression .. IntegerExpression
>
> Because
>
> 1. case X..Y:
>
> looks like
>
> 2. foreach(e; X..Y)
> 3. array[X..Y]
>
> yet the X..Y has a VERY DIFFERENT meaning. (1) is inclusive of Y, and
> (2) and (3) are exclusive of Y.
>
> Having a very different meaning means it should have a distinctly
> different syntax.
Thank you, but now I am confused ... Andrei just got through lecturing us
that the meaning of punctuation is dependant upon context. So I think your
example must be more like ...
Because
1. case X..Y:
looks like
2. foreach(e; X..Y)
3. array[X..Y]
4. case X:..caseY:
yet the X..Y has a VERY DIFFERENT meaning. (1) is inclusive of Y, and
(2) and (3) are exclusive of Y, and (4) is inclusive of Y ... oh, hang
on...
Sorry, but I'm just not getting the "VERY DIFFERENT" part yet. Right now, D
has ".." meaning exclude-end value (2. and 3.) AND it also has ".." meaning
include-end value (4.), depending on context.
Ok, I admit that there is one subtle difference. Examples 2 and 3 are of
the form
IntExpression .. IntExpression
and example 4 is
CaseLabelInt .. CaseLabelInt
but seriously, people are not going to notice that. We see double-dot and
think "range".
I know that this is not ever going to be changed so I'm not arguing that it
should.
(One of the most frequent bugs I have in my D programs is that I forget
that X..Y excludes Y because it's not natural to me to see text that looks
like "the range X to Y" but means "the range X to Y-1".)
It seems that D would benefit from having a standard syntax format for
expressing various range sets;
a. Include begin Include end, i.e. []
b. Include begin Exclude end, i.e. [)
c. Exclude begin Include end, i.e. (]
d. Exclude begin Exclude end, i.e. ()
--
Derek Parnell
Melbourne, Australia
skype: derek.j.parnell
More information about the Digitalmars-d-announce
mailing list