[swift-evolution] [Review] SE-0073: Marking closures as executing exactly once

Dave Abrahams dabrahams at apple.com
Fri May 6 21:37:08 CDT 2016


on Fri May 06 2016, Andrew Bennett <swift-evolution at swift.org> wrote:

> Hi Dave,
>
> Sorry, Dave, sending a second time as I forgot to Reply-All.
>
> I agree, this proposal doesn't allow multiple closures where only one of them
> should be run, and it should only be run once. I personally don't think lacking
> that functionality is worth blocking this proposal for, another proposal can be
> built on top of this if it is desired.
>
> These cases can also be handled by a more meaningful if/switch statement, using
> @noescape(once), for example:
> let x: Int
> functionThatCallsAClosure(someTest()) { x = $0 ? 1 : 2 }

Why is this better than 

    let x = functionThatCallsAClosure(someTest()) { $0 ? 1 : 2 }

?

IMO separating initialization from declaration is *very* rarely needed
and very much better avoided altogether, because it leads to code that's
less clear.  Just because we *can* do this doesn't mean we should.

> On Sat, May 7, 2016 at 6:24 AM, Dave Abrahams via swift-evolution
> <swift-evolution at swift.org> wrote:
>
>     on Tue May 03 2016, Chris Lattner
>     <swift-evolution at swift.org> wrote:
>
>     > Hello Swift community,
>     >
>     > The review of "SE-0073: Marking closures as executing exactly once"
>     > begins now and runs through May 9. The proposal is available here:
>     >
>     >
>     https://github.com/apple/swift-evolution/blob/master/proposals/0073-noescape-once.md
>
>     >
>     > Reviews are an important part of the Swift evolution process. All reviews
>     should be sent to the swift-evolution mailing list at
>     >
>     > https://lists.swift.org/mailman/listinfo/swift-evolution
>     >
>     > or, if you would like to keep your feedback private, directly to the
>     review manager.
>     >
>     > What goes into a review?
>     >
>     > The goal of the review process is to improve the proposal under review
>     > through constructive criticism and contribute to the direction of
>     > Swift. When writing your review, here are some questions you might
>     > want to answer in your review:
>     >
>     > * What is your evaluation of the proposal?
>
>     I think it's of questionable importance and doesn't generalize well.
>     For example, you can't use this to construct something like
>
>     var x: Int
>     functionThatActsLikeIf( someTest(), then: { x = 1 }, else: { x = 2} )
>
>     If you need to initialize something in an outer scope with something
>     computed by a closure, it's much better to arrange something like this:
>
>     var x = functionThatActsLikeIf( someTest(), then: { 1 }, else: { 2 } )
>
>     --
>     Dave
>
>     _______________________________________________
>     swift-evolution mailing list
>     swift-evolution at swift.org
>     https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-- 
Dave



More information about the swift-evolution mailing list