What is the stance on partial initializers when declaring

Simen Kjaeraas simen.kjaras at gmail.com
Thu Jul 21 18:29:48 PDT 2011


On Fri, 22 Jul 2011 02:50:52 +0200, bearophile <bearophileHUGS at lycos.com>  
wrote:

> Simen Kjaeraas:
>
>>      int n;
>>      string s;
>>
>>      unpack!(n,s) = tuple(4, "O HAI");
>
> See my other answer. Beside being long and ugly, it doesn't define the  
> types too. And you can't use it in foreach.

Yeah, I can absolutely see that there are places where this could not
reasonably be used. Initializing const and immutable data definitely is
one. And being able to use it in a foreach would be very nice.

Something that might take us part of the way, at least, would be for
alias this to support typetuples. Thus:

struct Tuple(T...) {
     T fields;
     alias fields this;
}

void foo(int n, string s) {}

foo(tuple(3, "bar"));

would work. Foreach would direcly benefit from this:

foreach (x, y; zip([1,2,3], "abc")) {} // Look ma! No bananas!


> In my opinion a tuple syntax is more important than having built-in  
> associative arrays. This means I'd like to remove D built-in associative  
> arrays and replace them with built-in tuples. Tuples are more commonly  
> useful than associative arrays, and in D there are enough ways to design  
> a good enough library-defined AA.
>
> The only problem are AA literals, but a bit of sugar can solve this  
> problem too. In Scala associative arrays look good enough and they are  
> fully in the library. There is just a -> built-in syntax to define  
> 2-tuples, used to create AA literals.

this could work today, given a proper constructor:

int[string] foo = [
     tuple("a", 1),
     tuple("b", 19),
     tuple("c", -3),
     ];

or:

auto foo = AA([
     tuple("a", 1),
     tuple("b", 19),
     tuple("c", -3),
     ]);

Or, if we go bananas:

int[string] foo = [
     (|"a", 1|),
     (|"b", 19|),
     (|"c", -3|),
     ];


I agree that a shorter syntax for 2-tuples could be beneficial, and
certainly may make more people use it (also, the -> arrow is not
taken yet):

auto foo = AA([
     "a" -> 1,
     "b" -> 19,
     "c" -> -3,
     ]);

As for actual typing, 5 characters are saved per line for the tersest
version, and only 3 with bananas. Not enough that I'm convinced by
that argument alone, but the more natural feel of the -> syntax has
me intrigued. (these numbers would also be somewhat different if I
weren't nazi about my spaces)

This is not just about what can be done, but also how to make users
actually use the features. I believe, but do not know, that many
users would feel more comfortable with the latter syntax than
the one saying tuple all the time.

-- 
   Simen


More information about the Digitalmars-d mailing list