Re: dupping to allow vector operation?
On Thursday, 9 October 2014 at 18:01:27 UTC, John Colvin wrote: On Thursday, 9 October 2014 at 11:29:14 UTC, bearophile wrote: Observe: void main() { int[3] a1 = [1, 3, 6]; int[] a2 = a1[] * 3; // line 3, Error int[] a3 = a1.dup[] *= 3; // line 4, OK? int[] a4 = (a1[] * 3).dup; // line 5, Error } Currently the operation in line 4 is accepted: test.d(3,17): Error: array operation a1[] * 3 without destination memory not allowed test.d(5,18): Error: array operation a1[] * 3 without destination memory not allowed Is it a good idea to support something like line 5? Bye, bearophile Why not? Looks fine to me, you've explicitly allocated some new memory for the result to sit in, the lack of which is the motivation for lines 3 an 5 being errors. To clarify: 4 is good, 3 and 5 are not.
dupping to allow vector operation?
Observe: void main() { int[3] a1 = [1, 3, 6]; int[] a2 = a1[] * 3; // line 3, Error int[] a3 = a1.dup[] *= 3; // line 4, OK? int[] a4 = (a1[] * 3).dup; // line 5, Error } Currently the operation in line 4 is accepted: test.d(3,17): Error: array operation a1[] * 3 without destination memory not allowed test.d(5,18): Error: array operation a1[] * 3 without destination memory not allowed Is it a good idea to support something like line 5? Bye, bearophile
Re: dupping to allow vector operation?
On Thursday, 9 October 2014 at 11:29:14 UTC, bearophile wrote: Observe: void main() { int[3] a1 = [1, 3, 6]; int[] a2 = a1[] * 3; // line 3, Error int[] a3 = a1.dup[] *= 3; // line 4, OK? int[] a4 = (a1[] * 3).dup; // line 5, Error } Currently the operation in line 4 is accepted: test.d(3,17): Error: array operation a1[] * 3 without destination memory not allowed test.d(5,18): Error: array operation a1[] * 3 without destination memory not allowed Is it a good idea to support something like line 5? Bye, bearophile Why not? Looks fine to me, you've explicitly allocated some new memory for the result to sit in, the lack of which is the motivation for lines 3 an 5 being errors.
Re: dupping to allow vector operation?
On Thursday, 9 October 2014 at 11:29:14 UTC, bearophile wrote: Observe: void main() { int[3] a1 = [1, 3, 6]; int[] a2 = a1[] * 3; // line 3, Error int[] a3 = a1.dup[] *= 3; // line 4, OK? int[] a4 = (a1[] * 3).dup; // line 5, Error } Currently the operation in line 4 is accepted: test.d(3,17): Error: array operation a1[] * 3 without destination memory not allowed test.d(5,18): Error: array operation a1[] * 3 without destination memory not allowed Is it a good idea to support something like line 5? It's equivalent to: int[] tmp = a1[] * 3; int[] a4 = tmp.dup; The first part is of course identical to line 3, so this should be an error, too. Normal rules for evaluation order require `a1[] * 3` to be evaluated before `(...).dup`, so where is it supposed to store the intermediate result?
Re: dupping to allow vector operation?
Marc Schütz: It's equivalent to: int[] tmp = a1[] * 3; int[] a4 = tmp.dup; The first part is of course identical to line 3, so this should be an error, too. Normal rules for evaluation order require `a1[] * 3` to be evaluated before `(...).dup`, so where is it supposed to store the intermediate result? So do we need a new different syntax to do it? :-) Bye, bearophile