Issues with array expressions
Robert Jacques
sandford at jhu.edu
Sat Jun 26 09:19:25 PDT 2010
On Sat, 26 Jun 2010 08:47:04 -0400, Norbert Nemec
<Norbert at nemec-online.de> wrote:
> Hi there,
>
> I just encountered a few issues with array expressions (2.047)
>
> * Implicit type conversion does not work. On the snippet
> -------------------------
> auto a = [1,2,3];
> auto b = [2.5,3.5,4.5];
> auto d = new real[2];
> d[] = a[]+d[];
> -------------------------
> the compiler first complains that int[] and double[] do not mix. When
> replacing the integers by floating points, the compiler still complains
> that double[] cannot be converted to real[]. Writing a loop, which is
> supposed to be equivalent to the expression, everything is fine. Is this
> a known bug?
I have the vague memory that this used to cause segfaults or ICEs. A lot
of those bugs have been fixed. Long term, Don's been talking about
generalizing / fixing array ops to allow function calls, etc. ( This may
be based off of bug 3760
http://d.puremagic.com/issues/show_bug.cgi?id=3760)
Essentially,
a[] = b[] + sin(c[]);
would be lowered into (a.k.a. syntactic sugar for)
foreach(i, ref __a; a)
__a = b[i] + sin(c[i]);
This would also solve implicit conversion issues.
> * According to TDPL, the length of the rhs arrays may be larger than the
> lhs array. Indeed, the following code compiles and works:
> -------------------------
> auto a = [1,2,3];
> auto b = [2,3,4];
> auto d = new int[2];
> d[] = a[]+d[];
> -------------------------
> I have the feeling that this should be explicitly restricted by the
> language. Both sides of the expression should be demanded to have the
> same length. At the moment, the code already needs a run-time check to
> make sure that the RHS is not shorter then the LHS. Changing this check
> to force equal length would not cost anything more.
>
> Using array expressions every day in Python/NumPy, the exact shape
> checking has helped me find many bugs.
>
> What to others think?
>
> Greetings,
> Norbert
I agree. This is bug 2547: Array Ops should check length, at least when
bounds checking is on (http://d.puremagic.com/issues/show_bug.cgi?id=2547)
More information about the Digitalmars-d
mailing list