DMD 0.177 release [Length in slice expressions]

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Fri Dec 22 03:03:01 PST 2006


Bill Baxter wrote:
> Andrei Alexandrescu (See Website For Email) wrote:
> 
>> But if we made "$" into an operator identifying the last element of 
>> _any_ array, which could refer to the last element of _the left-hand 
>> side_ array if we so want, then all of a sudden it becomes useful in a 
>> myriad of situations:
>>
>> int i = a[$ - 1]; // get last element
>> int i = a[$b - 1]; // get a's element at position b.length - 1
>> if (a[$ - 1] == x) { ... }
>> if ($a > 0) { ... }
>> if ($a == $b) { ... }
>> swap(a[0], a[$ - 1]); // swap first and last element
> 
> Please give some thought to the case where a and b are of types not 
> easily characterized by a single '.length'.  Matrix classes, or more 
> generally multidimensional array classes being the canonical examples. 
>  For those cases it is desirable to be able to have a '$' with different 
> meaning "per axis".

I did. The thing with language design is that it's easy to either 
underdo or overdo it, and that where underdoing or overdoing starts is 
highly subjective.

IMHO the current meaning of "$" is a good example of underdoing. The 
"$expression" meaning "(expression).size" is (again IMHO) just right. I 
use collection.size() all the time in C++, and scalar(@array) or $#array 
all the time in Perl, inside and outside index expressions. So I'd be 
happy to have that. Taking it to the next step of meaning any 
subdimension of a multidimensional (or fractal, heh) structure is, IMHO, 
overdoing because I can think of few use examples that are both frequent 
enough and interesting enough.


Andrei



More information about the Digitalmars-d-announce mailing list