Stupid little iota of an idea
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Feb 9 06:08:55 PST 2011
On 2/9/11 7:46 AM, Nick Sabalausky wrote:
> "spir"<denis.spir at gmail.com> wrote in message
> news:mailman.1422.1297254724.4748.digitalmars-d at puremagic.com...
>>
>> Side-question: what is actually 1..5 as of now for a thing? Or is it
>> conceptually "unconstructed" by rewriting to (probably) an ordinary for
>> loop? Anyway, the point above applies to language-side semantics, whatever
>> optimisation may happen.
>>
>
> AIUI: Syntactically, it doesn't exist at all, at least not by itself. It's
> just part of one of the foreach syntaxes:
>
> 'foreach' '(' {declaration list} ';' {expression} '..' {expression} ')'
>
> and also part of one of the slice syntaxes:
>
> (from the docs:)
> PostfixExpression [ AssignExpression .. AssignExpression ]
>
> Although it's possible I've understood it wrong.
>
> Don't have a clue how it's handled beyond that though.
Indeed, a..b is just punctuation in the two grammatical constructs you
mentioned.
Your proposal has indeed been made a couple of times, first probably by
bearophile - but then what did bearophile /not/ propose? (Meaning this
in good fun.) I think it would be okay to move iota into druntime and
enact the rewrite. But this would improve the language by such a small
iota...
I buy the orthogonality argument as much as you do. foreach is not
orthogonal because it is a short form of for, which is not orthogonal
because it is a short form of while, which is not orthogonal because it
is a short form of a scope with if/goto at the top.
If a..b would be rewritten into iota(a, b) that would still be
non-orthogonal because one could express one thing in two ways.
Ironically, it's more orthogonal to leave things as they are: you have
iota(a, b) as the general concept and you have a..b as punctuation in
two grammatical constructs.
But the most important question is: if the rewrite were done, to what
extent would that improve your use of the language? Integral intervals
do occur outside foreach and slices, but quite infrequently. In those
cases you'd gain by replacing iota(a, b) with a..b. Is this significant?
Andrei
More information about the Digitalmars-d
mailing list