[swift-users] Exclamation mark's in swift parameter listings?

Slava Pestov spestov at apple.com
Thu Jan 19 00:55:36 CST 2017


Boxing usually refers to out-of-line allocation of values on the heap. For example, values of protocol type (as well as Any) will box their payload, depending on size.

Slava

> On Jan 18, 2017, at 10:53 PM, Rien <Rien at Balancingrock.nl> wrote:
> 
> Thanks Slava,
> 
> Then my memory wasn’t that bad. This is indeed what I was thinking of, but I should not have referred to it as ‘boxing’ ?
> 
> Regards,
> Rien
> 
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Swiftrien
> Project: http://swiftfire.nl
> 
> 
> 
> 
>> On 19 Jan 2017, at 05:57, Slava Pestov <spestov at apple.com> wrote:
>> 
>> For what it’s worth, if T is a reference type or Unsafe*Pointer, then T and Optional<T> have the same exact representation in memory.
>> 
>> The compiler is smart enough to know that a non-optional pointer can never be NULL, so a NULL value of the underlying type can be used to unambiguously encode the ‘none’ case. This is not the case with Optional<NSRect> for example, where every bit pattern represents a potentially valid NSRect value, so Optional<NSRect> has to add an extra tag byte to distinguish the two enum cases from each other.
>> 
>> Slava
>> 
>>> On Jan 10, 2017, at 9:52 AM, Rien via swift-users <swift-users at swift.org> wrote:
>>> 
>>> I stand corrected.
>>> 
>>> I do/did think that there is a difference in the way it handles pointers optionals and other optionals, but I now realise that even that could not be the case.
>>> So please ignore the last line in my previous post.
>>> 
>>> The rest still stand ;-)
>>> 
>>> Regards,
>>> Rien
>>> 
>>> Site: http://balancingrock.nl
>>> Blog: http://swiftrien.blogspot.com
>>> Github: http://github.com/Swiftrien
>>> Project: http://swiftfire.nl
>>> 
>>> 
>>> 
>>> 
>>>> On 10 Jan 2017, at 18:14, Joe Groff <jgroff at apple.com> wrote:
>>>> 
>>>> 
>>>>> On Jan 9, 2017, at 11:19 PM, Rien via swift-users <swift-users at swift.org> wrote:
>>>>> 
>>>>> It means that a call to that function with an optional will unwrap the optional before it is used.
>>>>> 
>>>>> That is quite neat when dealing with C-API’s because often you will receive a pointer from a C-function which is optional to account for the fact that it can be NULL (= nil).
>>>>> By using a forced unwrapped input parameter you are saved the trouble of unwrapping all these pointers when using them as input for other C-APIs.
>>>>> 
>>>>> In short, it makes it easier to interface with C-API’s.
>>>>> 
>>>>> Note that there is some under-the-hood magic going on because a C-pointer is an unboxed value, while a ‘normal’ optional is a boxed value.
>>>> 
>>>> Optionals are never boxed.
>>>> 
>>>> -Joe
>>> 
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-users
>> 
> 



More information about the swift-users mailing list