DIP60: @nogc attribute
Michel Fortin via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 23 08:20:28 PDT 2014
On 2014-04-23 04:33:00 +0000, Walter Bright <newshound2 at digitalmars.com> said:
> On 4/22/2014 12:42 PM, Michel Fortin wrote:
>> On 2014-04-22 19:02:05 +0000, Walter Bright <newshound2 at digitalmars.com> said:
>>
>>> Memory safety is not a strawman. It's a critical feature for a modern
>>> language, and will become ever more important.
>>
>> What you don't seem to get is that ARC, by itself, is memory-safe.
>
> I repeatedly said that it is not memory safe because you must employ
> escapes from it to get performance.
It wasn't that clear to me you were saying that, but now it makes sense.
In Objective-C, the performance-sensitive parts are going to be
implemented in C, that's true. But that's rarely going to be more than
5% of your code, and probably only a few isolated parts where you're
using preallocated memory blocks retained by ARC while you're playing
with the content.
If you're writing something that can't tolerate a GC pause, then it
makes perfect sense to make this performance-critical code unsafe so
you can write the remaining 95% of your app in a memory-safe
environment with no GC pause.
D on the other hand forces you to have those GC pauses or have no
memory management at all. It's a different tradeoff and it isn't
suitable everywhere, but I acknowledge it makes it easier to make
performance-sensitive code @safe, something that'd be a shame to lose.
>> Objective-C isn't memory safe because it lets you play with raw
>> pointers too. If
>> you limit yourself to ARC-managed pointers (and avoid undefined behaviours
>> inherited from C) everything is perfectly memory safe.
>
> Allow me to make it clear that IF you never convert an ARC reference to
> a raw pointer in userland, I agree that it is memory safe. But this is
> not practical for high performance code.
Framing the problem this way makes it easier to find a solution.
I wonder, would it be acceptable if ARC was used everywhere by default
but could easily be disabled inside performance-sensitive code by
allowing the user choose between safe GC-based memory management or
unsafe manual memory management? I have an idea that'd permit just
that. Perhaps I should write a DIP about it.
>> I'm pretty confident that had I continued my work on D/Objective-C we'd now be
>> able to interact with Objective-C objects using ARC in @safe code. I was
>> planning for that. Objective-C actually isn't very far from memory safety now
>> that it has ARC, it just lacks the @safe attribute to enable compiler
>> verification.
>
> I wish you would continue that work!
I wish I had the time too.
--
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca
More information about the Digitalmars-d
mailing list