bearophile <[email protected]> wrote:

In my opinion it's good for a built-in D tuple to be a structural type. This also means you are allowed to perform an == among two tuples of different length (the result is known statically to be always false).

I understand (and agree to) the opinion that tuples should be structural
types, but why allow comparison of tuples of different lengths?


Walter:

A lot of it foundered on what the syntax for tuple literals should be. The top
of the list is simply enclosing them in ( ).

This is a bad idea. It has caused troubles in Python because of the singleton syntax (tuple with 1 item).

One solution is to use a special unambigous delimiter to denote tuples, like (a similar solution is used in the Fortress language):

(|1, 2, 3, 4|)

Otherwise a good solution is to use a name:

record(1, 2, 3, 4)

I prefer the record() solution, but the first solution too acceptable.

Yeah, ( T... ) is not a good general tuple syntax. I believe auto( ) is
a free syntax in D, and thus could be used for tuples. Thinking more
about it, I am no longer as sure.


auto (car, cdr...) = expr;

I really like this.


Regarding field names for tuples, I have used Python and I like the optional names of D tuples (records). In some situations you don't need names, but in other situations field names are handy and help avoid bugs. In Python code that processes and uses tuples contains too many [0] [1] [2] etc that aren't readable and are bug-prone.

But a good management of such names asks for the names to not change the type of the tuple, this is why I talk about structural typing for records.


I wrote a Tuple implementation for D that supports structural typing:

http://pastebin.com/qeYKa5GZ

(see line 58-60 for proof)
This is a simple proof-of-concept, so don't expect anything impressive
from it.


--
Simen

Reply via email to