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

Jason House jason.james.house at gmail.com
Wed Oct 15 20:40:41 PDT 2008


Bruno Medeiros wrote:

> 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?
> 


It may be easy to parse, but it isn't easy to read.

What is goban[19]?  Is it an array or a template?  I'd hate to be reading
through somebody else's code and have to decipher what things mean.



More information about the Digitalmars-d mailing list