[swift-evolution] [Pitch] make @noescape the default
Chris Lattner
clattner at apple.com
Mon Dec 21 18:43:28 CST 2015
> On Dec 19, 2015, at 4:38 PM, Dmitri Gribenko via swift-evolution <swift-evolution at swift.org> wrote:
>
> On Sat, Dec 19, 2015 at 12:10 PM, Matthew Johnson via swift-evolution
> <swift-evolution at swift.org> wrote:
>> @noescape is safer because it does not require thinking about lifetime issues for captured objects. My hunch was that @noescape (or @autoclosure with implies @noescape) is also more common. I had a look through the standard library and this is definitely the case there.
>>
>> What does everyone think about making @noescape the default and introducing @escaping (or something similar) to annotate function arguments that do escape the call stack?
>
> @noescape provides additional guarantees and the optimizer can learn
> to rely on it in future. Thus, it effectively becomes ABI, and you
> can't remove in future versions of the library without breaking the
> ABI. I think adding it should be an explicit decision because of
> that.
I agree. This is a very significant API restriction that should be opted-into intentionally. It affects subtyping relationships in protocol conformances and overrides as well.
A different objection to @noescape-by-default is that it makes closures second citizens by default, which makes teaching and learning higher-order functional programming significantly less awesome.
-Chris
More information about the swift-evolution
mailing list