Builtin regex (Was: How to complex switch?)

Timon Gehr timon.gehr at gmx.ch
Thu May 19 06:31:47 PDT 2011


Andrei Alexandrescu wrote:
> Timon Gehr wrote:
> >
> > 1. Deprecate using CommaExpression inside ParanthesizedExpression. (This does not
> > affect most code that uses the comma operator!)
> > 2. Wait a few releases.
> > 3. Introduce straightforward, built-in tuples:
> [snip]
>
> We've been thinking of this approach but it would be difficult to pull off.

How would it be difficult to realize? I guess there is literally no serious D code
out there that uses anything that could clash with tuple literals. (And if there
is any - it can easily be rewritten to use inline delegates instead...)

It should also be only a minor change in the grammar.

>
> One possibility that I hadn't thought before is to use ";" for
> separating tuple elements. Upon a casual inspection, it turns out no
> statement can be enclosed directly in "(" and ")" so there's no
> ambiguity. It would also take care of the issue "did you mean to pass
> them as function arguments, or as one tuple argument?" Just a thought...

other possibilites:

1. make tuple expansion explicit. //maybe not too great as the built-in TypeTuple
expands by default.
2. use the same convention as that used for one-element tuples.

void foo(int a,int b,int c);    //1
void foo((int,int,int) t,); //2

auto t=(1,2,3);
foo(t);  //calls 1 (since t is expanded)
foo(t,); //calls 2 (t is not expanded)

This would change the meaning of trailing "," when tuples are involved though.

>
> auto t=(1; "string"; 'c');

I have actually considered that too. Some issues:

1. ";" is not as easy to type as "," on many keyboard layouts. (not everybody will
use a US Keyboard)
2. It is, like "(|1,2,3|)" another syntax for the same thing that is already
present in the language, (template) parameter tuples. Furthermore, Array and
AssocArray both use "," as a delimiter, meaning it would add further
inconsistency. I think tuple literals should build up on existing features, not be
orthogonal to them. imho tuple literals are a logical consequence of generalizing
D's design, not an entirely new feature.
3. Most important: Error messages. If ";" is not guaranteed to be a statement
delimiter, writing a compiler that can generate meaningful error messages is
_much_ more difficult!

>
> Ehm.
>
> Andrei


Timon


More information about the Digitalmars-d mailing list