[swift-evolution] Pitch: Remove `NonObjectiveCBase` and replace `isUniquelyReferenced` by `isUniquelyReferencedUnsafe`

Andrew Trick atrick at apple.com
Sat Jul 16 22:45:19 CDT 2016


> On Jul 16, 2016, at 8:36 PM, Arnold <aschwaighofer at apple.com> wrote:
> 
> Thank you for the feedback. Answers online.
> 
> Sent from my iPhone
> 
> On Jul 16, 2016, at 7:38 PM, Andrew Trick <atrick at apple.com <mailto:atrick at apple.com>> wrote:
> 
>> 
>>> On Jul 16, 2016, at 6:46 PM, Arnold Schwaighofer via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> Replace isUniquelyReferenced<T : NonObjectiveCBase> by isUniquelyReferencedUnsafe<T: AnyObject> and remove the NonObjectiveCBase class from the standard library.
>>> 
>>> 
>> 
>> So we’ll have:
>> 
>> - isUniquelyReferencedNonObjC(object): true iff object is uniquely referenced and NonObjC
>> 
>> - isUniquelyReferencedUnsafe(object): true iff object is uniquely reference, assert NonObjC
>> 
>> I’m going to be picky. The “Unsafe” suffix doesn’t make sense to me. If you think this is an unsafe API then it should be:
>> “unsafeIsUniquelyReferenced”.
>> 
>> But I don’t really see how it is unsafe in the usual sense. If you want to convey that the programmer needs to satisfy some precondition, which is not generally associated with unsafety, then it should be:
>> “isUniquelyReferencedAssumingNonObjC”
>> 
> 
> Makes sense to me. I think it is unsafe in the sense if you don't satisfy the precondition the resulting behavior is undefined in modes other than -Onone and not checked by a precondition predicate that traps.
> 
>> unsafeIsUniquelyReferenced
> 
> I find it kind of nice to recognize a predicate by the 'is' prefix. All unsafe APIs start with the word unsafe though. I could not find an unsafe freestanding predicate.
> 
> [As the implementor of the underlying builtin you may remember that it is not actually undefined and will return a implementation defined value (false) for objc classes. But we might not want to guarantee this going forward.]


Oh yeah. I think I only kept the two versions for fear of breaking the API. Since you’re renaming the second one anyway, why not just delete it with a fixit that it's renamed to isUniquelyReferencedNonObjC?

The “assuming” version of the API is extremely confusing in addition to being useless.

-Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160716/b5d9a9fd/attachment.html>


More information about the swift-evolution mailing list