-vgc Info ok?

Chris via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue May 19 02:02:29 PDT 2015


On Monday, 18 May 2015 at 18:40:15 UTC, ketmar wrote:
> 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.

Yes, that's exactly what was driving at. Accessing is not 
indexing, and yet I get a warning for _indexing_, while the real 
reason is that a wrong access can cause an exception (which 
allocates). I.e. it should be

"accessing an associative array may cause GC allocation on error"

Maybe the message with "indexing" for accessing is merely reusing 
the message for indexing, or all assoc array operations are 
lumped together as "indexing". I dunno. It seems wrong to me, 
because it's inaccurate.

>> 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".



More information about the Digitalmars-d-learn mailing list