On Sat, 1 Nov 2014 12:01:04 +0000 Iain Buclaw via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
> On 1 November 2014 11:56, ketmar via Digitalmars-d > <digitalmars-d@puremagic.com> wrote: > > On Sat, 01 Nov 2014 11:31:51 +0000 > > anonymous via Digitalmars-d <digitalmars-d@puremagic.com> wrote: > > > >> I don't know how D defines this, and I couldn't find anything but > >> a forum discussion [1] (which I didn't read all of). But unless > >> it's explicitly stated that the right-hand side is evaluated > >> first, there is no bug. > > there is. compiler generates code that modifies random memory > > addresses. this is absolutely unacceptable. and this is just illogical > > if we want dynamic arrays to look and work like "normal" arrays. > > besides, it's easily fixable without any changes in evaluation order. > > I'm not *entire* sure on that. :) > > If the evaluation of LHS[IDX] has a side effect, you've broken LTR. > > Think: > Left => Index => Right > > vs > > Index => Right => Left so forbid that. this kind of bugs are VERY hard to find, especially when dynamic arrays looks like ordinary static arrays in the source. compiler should emit error on the "assign code" with possible side effects for dynamic arrays, or this hole will pop again and again. a simple change in the unrelated part of code and... KABOOM! everything goes wrong.
signature.asc
Description: PGP signature