[swift-evolution] [Pitch] Move @noescape

Jacob Bandes-Storch jtbandes at gmail.com
Thu Mar 3 16:23:32 CST 2016


My enthusiasm got the better of me... of course I meant (@noescape () ->
Void) -> Void.

On Thu, Mar 3, 2016 at 2:14 PM, Jacob Bandes-Storch <jtbandes at gmail.com>
wrote:

> Will this allow me to write "let myDispatchSync = dispatch_sync as!
> @noescape () -> Void"  ? :-D
>
> Sounds good to me, the old syntax is not necessary anymore.
>
> Jacob
>
> On Thu, Mar 3, 2016 at 2:01 PM, Chris Lattner via swift-evolution <
> swift-evolution at swift.org> wrote:
>
>> Chris Eidhof noticed an emergent result of removing our currying syntax:
>> it broke some useful code using @noescape, because we only allowed it on
>> parameter declarations, not on general things-of-function-type.  This meant
>> that manually curried code like this:
>>
>> func curriedFlatMap<A, B>(x: [A]) -> (@noescape A -> [B]) -> [B] {
>>     return { f in
>>         x.flatMap(f)
>>     }
>> }
>>
>> Was rejected.  Fixing this was straight-forward (
>> https://github.com/apple/swift/commit/c3c6beac72bc0368030f06d52c46b6444fc48dbd),
>> but required @noescape being allowed on arbitrary function types.  Now that
>> we have that, these two declarations are equivalent:
>>
>>         func f(@noescape fn : () -> ()) {}
>>         func f(fn : @noescape () -> ()) {}
>>
>> I propose that we remove the former syntax, migrating code to the later
>> form.  This leads to better consistency between our declarations and types,
>> and follows the precedent of inout.  @autoclosure should also probably move
>> as well.
>>
>> Thoughts?
>>
>> -Chris
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160303/1a44c595/attachment.html>


More information about the swift-evolution mailing list