foo!(bar) ==> foo{bar} ==> foo[bar] (just Brackets)

Bruno Medeiros brunodomedeiros+spam at com.gmail
Tue Oct 14 15:43:13 PDT 2008


Don wrote:
> Denis Koroskin wrote:
>> On Wed, 08 Oct 2008 18:22:21 +0400, superdan <super at dan.org> wrote:
>>
>>> Walter Bright Wrote:
>>>
>>>> Dee Girl wrote:
>>>> > I did not follow this group recent. School started. Sorry! I just see
>>>> > now and please add my vote if possible. I start with D recent and I
>>>> > remember beginning. foo!(bar) was not pleasant. Like forced
>>>> > convention with a bad char. And friends I show code never like it. It
>>>> > is first thing they say why they do not like D. For me foo{bar}
>>>> > better idea. Thank you, Dee Girl
>>>>
>>>> What do your friends think of { } ?
>>>
>>> School started. Every one so busy now. But I think does not matter 
>>> any more ^_^
>>>
>>> I want to make little idea. Sorry if idea mentioned before (I did not 
>>> read every thread). I think we can look square brackets []. Let me 
>>> explain why.
>>>
>>> Paren () is over used in C and in D. Any expression can be in (). And 
>>> adding () is possible in many cases. But it is not same with []. For 
>>> example a:(b) is ambiguous but a:[b] is not. So there are many signs 
>>> possible after symbol and before [. They are:
>>>
>>> ~ ! @ # $ % ^ & * - + = | \ / , < . > ? :
> 
> Not all of them work. Here's a few examples:
> 
>     enum { d= 3, e = 7 }
>     int [] a=[1,2];
>     bool c;
>     auto k=[e]; // kills =
>     a ~= c?[d]:[e]; // kills ?
>     int [] f = c?k:[e]; // kills :
>     if (f>[e]) {}   // kills <
>     if (f<[e]) {}   // kills >
>     auto g = (k,[d]); // kills comma
>     auto h = k~[d]; // kills ~
> 
> Array ops will kill + - * / & | % ^
> Suddenly the list looks pretty short.
> !@#$\.


Hum, what about brackets without any prefix character at all?

   Vector[int, 2] foo;
   List[Vector[int, 2]] bar;
   int[3] a = [1, 2, 3]; // array literal here
   int[int] map;
   alias DenseMatrix[num] PulType;
   alias SparseRowsMatrix[num, HashSparseVector] PuuType;
   alias BiMap[uint, Tuple[uint, uint], BiMapOptions.lhDense] DicType;
   int var = a[2]; // array indexing here

Hum... doesn't look bad visually. In fact it seems to fit quite nice 
with how associative arrays, and even normal arrays, are declared. Hum, 
yes, I'm personally liking this a lot.

But does it have any ambiguities? Hum, can't think of any off-hand. If 
an identifier appears before a bracket list, it could either be a 
template instantiation, or an array indexation. But the syntax of both 
is the same, so it doesn't need to be distinguished in the parser.

Waddya think, was this discussed before?

-- 
Bruno Medeiros - Software Developer, MSc. in CS/E graduate
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list