DIP60: @nogc attribute

Michel Fortin via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 18 15:02:45 PDT 2014


On 2014-04-18 20:40:06 +0000, Walter Bright <newshound2 at digitalmars.com> said:

> O-C doesn't use ARC for all pointers, nor is it memory safe.

@safe would be very easy to implement in Objective-C now that ARC is there.

This has got me thinking. Ever heard "C is the new assembly"? I think 
this describes very well the relation between C and Objective-C in most 
Objective-C programs today.

Objective-C enables ARC by default for all pointers to Objective-C 
objects. Since virtually all Objective-C APIs deal with Objective-C 
objects (or integral values), if you limit yourself to Objective-C APIs 
you're pretty much memory-safe.

When most people write Objective-C programs, they use exclusively 
Objective-C APIs (that deal with Objective-C objects and integrals, 
thus memory-safe), except for the few places where performance is 
important (tight loops, specialized data structures) or where 
Objective-C APIs are not available.

You can mix and match C and Objective-C code, so no clear boundary 
separates the two, but that doesn't mean there couldn't be one. Adding 
a @safe function attribute to Objective-C that'd prevent you from 
touching a non-managed pointer is clearly something I'd like to see in 
Objective-C. Most Objective-C code I know could already be labeled 
@safe with no change. Only a small fraction would have to be updated or 
left unsafe.

Silly me, here I am discussing a improvement proposal for Objective-C 
in a D forum!

The point being, D could have managed and unmanaged pointers (like 
Objective-C with ARC has), make managed pointers the default, and let 
people escape pointer management if they want to inside 
@system/@trusted functions. One way it could be done is by tagging 
specific pointers with some attribute to make them explicitly not 
managed (what __unsafe_unretained is for in Objective-C). Perhaps the 
whole function could be tagged too. But you won't need this in general, 
only when optimizing a tight loop or something similar where 
performance really counts.

Whether that's the path D should take, I don't know.


-- 
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca



More information about the Digitalmars-d mailing list