DIP60: @nogc attribute
via Digitalmars-d
digitalmars-d at puremagic.com
Thu Apr 17 06:17:25 PDT 2014
On Thursday, 17 April 2014 at 12:20:06 UTC, Manu via
Digitalmars-d wrote:
> See, I just don't find managed memory incompatible with 'low
> level' realtime or embedded code, even on tiny microcontrollers
> in principle.
RC isn't incompatible with realtime, since the overhead is O(1).
But it is slower than the alternatives where you want maximum
performance. E.g. raytracing.
And it is slower and less more "safe" than GC for long running
servers that have uneven loads. E.g. web services.
I think it would be useful to discuss real scenarios when
discussing performance:
1. Web server request that can be handled instantly (no database
lookup): small memory requirements and everything is released
immediately.
Best strategy might be to use a release pool (allocate
incrementally and free all upon return in one go).
2. Web server, cached content-objects: lots of cycles, shared
across threads.
Best strategy is global GC.
3. Non-maskable interrupt: can cut into any running code at any
time. No deallocation must happen and can only touch code that is
consistent after atomic single instruction CPU operations.
Best strategy is preallocation and single instruction atomic
communication.
> ARC would be fine in low level code, assuming the language
> supported it to
> the fullest of it's abilities.
Yes, but that requires whole program optimization, since function
calls cross compilation unit boundaries frequently.
> No. It misses basically everything that compels the change.
> Strings, '~',
> closures. D largely depends on it's memory management.
And that is the problem. Strings can usually be owned objects.
What benefits most from GC are the big complex objects that have
lots of links to other objects, so you get many circular
references.
You usually have fewer of those.
If you somehow can limit GC to precise collection of those big
objects, and forbid foreign references to those, then the
collection cycle could complete quickly and you could use GC for
soft real time. Which most code application code is.
I don't know how to do it, but global-GC-everything only works
for batch programming or servers with downtime.
> Take this seriously. I want to see ARC absolutely killed dead
> rather than dismissed.
Why is that? I can see ARC in D3 with whole program optimization.
I cannot see how D2 could be extended with ARC given all the
other challenges.
Ola.
More information about the Digitalmars-d
mailing list