digitalmars.D - Mixing C/D-style array declarations
- bearophile (26/29) Apr 03 2011 After a suggestion from simendsjo in D.learn, I have added an enhancemen...
- spir (7/34) Apr 03 2011 +++ D cleaning.
- Vladimir Panteleev (7/9) Apr 03 2011 Hmm, I thought C-style array declarations are pending deprecation. I kno...
- bearophile (4/5) Apr 03 2011 Is this true? If this is true then I will close my new enhancement reque...
- Trass3r (5/10) Apr 03 2011 Are you kidding?
After a suggestion from simendsjo in D.learn, I have added an enhancement request: http://d.puremagic.com/issues/show_bug.cgi?id=5807 If you see something wrong in this post I will modify or close the enhancement request. The documentation about Postfix Array Declarations says:Rationale: The postfix form matches the way arrays are declared in C and C++, and supporting this form provides an easy migration path for programmers used to it.<C style array declarations are handy (despite they add a little of extra complexity and confusion to the D language). But currently (DMD 2.052) D also supports a syntax like: // array of 5 dynamic arrays of ints. int[][5] c; int[] c[5]; int c[5][]; What's the purpose of such mixed syntax? 1) It's not present in C programs; 2) It's not used in normal native D programs; 3) And in my opinion it's not good to use even during the migration from C to D style, because it looks confusing (the order of ranges is inverted between C and D syntax). So I suggest to statically disallow such mixed syntax. Currently the mixed syntax is not just useless and potentially confusing for the programmer, it also causes problems with some vector operations: void main() { int[] a1 = [1, 2, 3]; int[] a2 = new int[3]; a2[] = a1[]; // OK int[3] a3[] = a2[]; // line 5, Error } test.d(5): Error: cannot implicitly convert expression (a2[]) of type int[] to int[3u][] In theory if mixed C/D array declarations become disallowed, then there is only one meaning for the operation at line 5. (This is not very nice, but I don't see better solutions for this syntax problem with array operations). Bye, bearophile
Apr 03 2011
On 04/03/2011 07:43 PM, bearophile wrote:After a suggestion from simendsjo in D.learn, I have added an enhancement request: http://d.puremagic.com/issues/show_bug.cgi?id=5807 If you see something wrong in this post I will modify or close the enhancement request. The documentation about Postfix Array Declarations says:+++ D cleaning. Denis -- _________________ vita es estrany spir.wikidot.comRationale: The postfix form matches the way arrays are declared in C and C++, and supporting this form provides an easy migration path for programmers used to it.<C style array declarations are handy (despite they add a little of extra complexity and confusion to the D language). But currently (DMD 2.052) D also supports a syntax like: // array of 5 dynamic arrays of ints. int[][5] c; int[] c[5]; int c[5][]; What's the purpose of such mixed syntax? 1) It's not present in C programs; 2) It's not used in normal native D programs; 3) And in my opinion it's not good to use even during the migration from C to D style, because it looks confusing (the order of ranges is inverted between C and D syntax). So I suggest to statically disallow such mixed syntax. Currently the mixed syntax is not just useless and potentially confusing for the programmer, it also causes problems with some vector operations: void main() { int[] a1 = [1, 2, 3]; int[] a2 = new int[3]; a2[] = a1[]; // OK int[3] a3[] = a2[]; // line 5, Error } test.d(5): Error: cannot implicitly convert expression (a2[]) of type int[] to int[3u][] In theory if mixed C/D array declarations become disallowed, then there is only one meaning for the operation at line 5. (This is not very nice, but I don't see better solutions for this syntax problem with array operations).
Apr 03 2011
On Sun, 03 Apr 2011 20:43:59 +0300, bearophile <bearophileHUGS lycos.com> wrote:C style array declarations are handy (despite they add a little of extra complexity and confusion to the D language).Hmm, I thought C-style array declarations are pending deprecation. I know the C-style function pointer syntax has already been deprecated. -- Best regards, Vladimir mailto:vladimir thecybershadow.net
Apr 03 2011
Vladimir Panteleev:Hmm, I thought C-style array declarations are pending deprecation.Is this true? If this is true then I will close my new enhancement request. Bye, bearophile
Apr 03 2011
Are you kidding? It pollutes the grammar and breaks consistency. The rationale is nonsense, it rather encourages people not to learn the D way to declare arrays. Drop the C legacy!Rationale: The postfix form matches the way arrays are declared in C and C++, and supporting this form provides an easy migration path for programmers used to it.<C style array declarations are handy (despite they add a little of extra complexity and confusion to the D language).
Apr 03 2011