The "no gc" crowd

Don x at nospam.com
Wed Oct 9 00:37:46 PDT 2013


On Tuesday, 8 October 2013 at 17:47:54 UTC, Brad Anderson wrote:
> On Tuesday, 8 October 2013 at 16:29:38 UTC, ponce wrote:
>> On Tuesday, 8 October 2013 at 16:22:25 UTC, Dicebot wrote:
>>> It is not overblown. It is simply "@nogc" which is lacking 
>>> but absolutely mandatory. Amount of hidden language 
>>> allocations makes manually cleaning code of those via runtime 
>>> asserts completely unreasonable for real project.
>>
>> Hidden language allocations:
>> - concatenation operator   ~
>> - homogeneous arguments   void (T[]... args)
>> - "real" closures that escapes
>> - array literals
>> - some phobos calls
>>
>> What else am I missing?
>> I don't see the big problem, and a small frac
tion of projects
>> will require a complete ban on GC allocation, right?
>
> Johannes Pfau's -vgc pull request[1] had a list of ones he was 
> able to find. It's all allocations, not just hidden allocations:
>
> COV         // Code coverage enabled
> NEW         // User called new (and it's not placement new)
> ASSERT_USER // A call to assert. This usually throws, but can 
> be overwritten
>             // by user
> SWITCH_USER // Called on switch error. This usually throws, but 
> can be
>             // overwritten by user
> HIDDEN_USER // Called on hidden function error. This usually 
> throws, but can
>             // be overwritten by user
> CONCAT      // a ~ b
> ARRAY       // array.length = value, literal, .dup, .idup, .sort
> APPEND      // a~= b
> AALITERAL   // ["a":1]
> CLOSURE
>
> 1. https://github.com/D-Programming-Language/dmd/pull/1886

The closure one is a problem. I think that returning a closure 
should use a different syntax from using a normal delegate. I 
doubt it's something you _ever_ want to do by accident.

It's a problem because you can't see at a glance if a function 
uses a closure or not. You have to inspect the entire function 
very carefully, checking all
code paths.







More information about the Digitalmars-d mailing list