On Mon, 18 May 2015 14:41:19 +0000, Chris wrote: > On Monday, 18 May 2015 at 14:34:38 UTC, ketmar wrote: >> On Mon, 18 May 2015 14:30:42 +0000, Chris wrote: >> >>> The following >>> >>> string[string] myarray = ["key":"value"]; >>> string entry; >>> entry = myarray["key"]; // => vgc: indexing an associative array may >>> cause GC allocation >>> >>> Why is _accessing_ an assoc treated as indexing it? >> >> it can throw "out of range" error, which is `new`ed. > > But shouldn't it read "accessing an associative array may cause GC > allocation"?
not any access may cause allocation. `auto e = "key" in myarray;` will not allocate, for example. yet it's still accessing the array. it's *indexing* which may end in allocation. > And maybe a hint to the exception that may be thrown. i believe that such explanation is a work for lint-like tool. burden compiler with special cases can lead too far. ;-) > It's not the same as > > myarray["key1] = "some value"; > myarray["key2] = "some other value"; > > A bit confusing. yes, it requires some knowledge of language and libraries. "-vgc" is not a linter, though, it was made with some assumptions about user's knowledge. yet you can open ER in bugzilla, maybe DMD developers will implement it. i'm not a developer, and i can be wrong in reasons behind "-vgc".
signature.asc
Description: PGP signature