foo!(bar) ==> foo{bar} ==> foo[bar] (just Brackets)
Bruno Medeiros
brunodomedeiros+spam at com.gmail
Wed Oct 15 03:24:46 PDT 2008
Jarrett Billingsley wrote:
> On Tue, Oct 14, 2008 at 6:43 PM, Bruno Medeiros
> <brunodomedeiros+spam at com.gmail> 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?
>
> Erm,
>
> SomeClass[3] a; // template or array?
What about it? It doesn't matter for the parser to know if SomeClass is
a template or array, it can just keep parsing. Its not like the "class A
: B { }" where parsing would continue differently if B was a template
instead of a type.
--
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