[swift-evolution] Contiguous Memory and the Effect of Borrowing on Safety

Dave Abrahams dabrahams at apple.com
Fri Nov 18 11:22:22 CST 2016

on Fri Nov 18 2016, Karl <razielim-AT-gmail.com> wrote:

>> On 16 Nov 2016, at 18:06, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
>>> On Nov 12, 2016, at 4:19 PM, David Sweeris via swift-evolution <swift-evolution at swift.org> wrote:
>>>> On Nov 10, 2016, at 12:39 PM, Stephen Canon via swift-evolution <swift-evolution at swift.org> wrote:
>>>>> On Nov 10, 2016, at 1:30 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>>> What worries me is that if systems programmers are trying to get static
>>>>> guarantees that there's no ARC traffic, they won't be willing to handle
>>>>> a copyable thing that carries ownership.
>>>> FWIW, we (frequently) only need a static guarantee of no ARC
>>>> traffic *within a critical section*. If we can guarantee that
>>>> whatever ARC operations need to be done happen in a
>>>> precisely-controlled manner at a known interface boundary, that’s
>>>> often good enough.
>>> “Critical section” is a phrase I normally associate with multi-threaded code… Do we need to start talking about concurrency to move this topic forward?
>> In a sense, yeah, ARC traffic is concurrent to the
>> explicitly-written behavior of the program, since the compiler does
>> not make strong guarantees about when exactly retains and releases
>> occur. Releases in particular can trigger arbitrary code execution
>> through deinitializers. The analogy to a critical section for not
>> wanting an arbitrary deinitializer to run within a region seems apt.
>> -Joe
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> This seems similar to the reasoning for _fixLifetime, isn’t it?
> (there’s no documentation about what _fixLifetime does or when you
> need it, but when I use it it’s to basically create a barrier, before
> which deinitialisers aren’t allowed to run)

You never need it; things beginning with underscores are not for public
consumption and only exposed publicly for internal reasons (e.g. for
testing because the standard library can't use @testable).  The public
facility is called withExtendedLifetime.



More information about the swift-evolution mailing list