Sent from my iPhone

> On Jul 16, 2016, at 8:45 PM, Andrew Trick <atr...@apple.com> wrote:
> 
> 
>> On Jul 16, 2016, at 8:36 PM, Arnold <aschwaigho...@apple.com> wrote:
>> 
>> Thank you for the feedback. Answers online.
>> 
>> Sent from my iPhone
>> 
>>> On Jul 16, 2016, at 7:38 PM, Andrew Trick <atr...@apple.com> wrote:
>>> 
>>> 
>>>> On Jul 16, 2016, at 6:46 PM, Arnold Schwaighofer via swift-evolution 
>>>> <swift-evolution@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.

The unsafe version would allow us to emit more efficient code (in the future) 
for a static unknown object type but we know it is a native type (but not which 
so we can't just cast it, this is public API so we can't cast to 
Builtin.NativeObject).

  var self: AnyObject // really: AnyNativeObject
  ...
  if (!unsafeIsUniquelyReferenced(&self))
    self = self.copy()
  }

I admit this is somewhat contrived and am happy to just nuke the API if we 
agree there is no value in the use case above.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to