<div dir="ltr">Where are the guiding documents for swift&#39;s concurrency support? I have an unrelated idea for the language that I think would be a sizable win for concurrency. (I won&#39;t cross post it here.)<div><br></div><div>RE Error syntax: </div><div>Syntactic sugar that makes it easier to ignore errors is a miss-step, I think. Errors differ from optionals in how you handle the un-happy path. </div><div><br></div><div>With optionals: if the data isn&#39;t there you either O1) abort, or O2) follow an alternative, acceptable path. </div><div>With errors: if the data isn&#39;t there you either E1) log-and-abort or E2) present the error, either directly or via propagation. </div><div><br></div><div>That is to say – with errors the programmer has a greater responsibly to honor the _content_ of the error, not just its presence. </div><div>To merely ignore the error (which is possible to do with the `try?` syntax, is almost always an anti-pattern. </div><div><br></div><div>TL;DR. Error handling bares a greater responsibly than optional handling. Responsible code is safer code. </div><div><br></div><div>I support the introduction of a `Result` type into the language (perhaps as a core-lib like Dispatch), because it follows the principle of responsibility. </div><div><br></div><div>RE Async syntax:</div><div>In like manner, I don&#39;t think it&#39;s a good idea to make the _call site_ of asynchronous functions the same as the call site of synchronous functions.</div><div>If this were the case it would be very easy to confuse asynchronous functions as synchronous and accidentally make your own function asynchronous. </div><div><br></div><div>If there is any change to the language to add syntactic wrappers around async methods, I think they should be lexically demarcated just like throwing functions are. For example:</div><div><br></div><div>```</div><div>try someThrowingFunction() </div><div><br></div><div>async someAsyncFunction() // the natural call signature here would have been someAsyncFunction(callback: {} )</div><div>```</div><div><br></div><div>Just like `try` is not for the compiler, but is a flag for the programmer to pay attention, so – I think – there should be a similar flag that causes the programmer to pay attention to async functions. </div><div><br></div><div>EPILOG :</div><div>But the above example actually takes us directly into the topic of promises/futures. (What is _actually_ returned if we call an asynchronous function with synchronous syntax?)</div><div>I have lot of thoughts on promises, safely-implemented async functions, and the general practice of concurrent programming in swift. But maybe this isn&#39;t the best thread for that broader discussion. ???</div><div><br></div><div>Thoughts? </div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 12:16 PM, Benjamin G via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Except | is commutative, so you would except Int | Error to be equivalent to Error | Int, which isn&#39;t the semantic of the Result type. <div> <br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 4:04 PM, Elia Cereda <span dir="ltr">&lt;<a href="mailto:eliacereda@gmail.com" target="_blank">eliacereda@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space">I&#39;d say that this syntax would be even more coherent with protocol composition, given that x is effectively an Int <b>or</b> an Error: <div><br><div><blockquote type="cite"><div dir="ltr"><div>var x: Int | Error</div></div></blockquote></div><div><br></div><div>But aside from the specific syntax, I&#39;m pretty sure it isn&#39;t the first time this request comes up and there were good reasons for rejecting it. </div><div><span class="m_5579547658500364080HOEnZb"><font color="#888888"><br><div>
<div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Elia Cereda</div>

</div></font></span><div><div class="m_5579547658500364080h5">
<div><br><blockquote type="cite"><div>Il giorno 03 nov 2017, alle ore 13:10, Benjamin G via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; ha scritto:</div><br class="m_5579547658500364080m_4346162235656936450Apple-interchange-newline"><div><div dir="ltr">Actually i&#39;d even prefer :<div>var x: Int ?? Error</div><div><br></div><div>the spaces makes it more readable, it looks like what you&#39;d do with the ?? operator already, and it seems coherent with the syntax for protocol composition.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 12:12 PM, Benjamin G <span dir="ltr">&lt;<a href="mailto:benjamin.garrigues@gmail.com" target="_blank">benjamin.garrigues@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Just an idea for the type declaration : <div><br></div><div>Why not use the same ? as Optional, but with the type of the error behind :</div><div><br></div><div>Such as</div><div><br></div><div>var x: Int?Error </div><div><br></div><div>Optional Int (Int?) would be seen a special case of Result where the error type is nil.</div><div><br></div><div>The advantage of this syntax is that it would let us specify the type of the error if we want it. </div><div><br></div></div><div class="m_5579547658500364080m_4346162235656936450HOEnZb"><div class="m_5579547658500364080m_4346162235656936450h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 11:45 AM, Nick Keets via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Right, to me there is not a lot of value in adding Result as it exists in AlamoFire. We will (eventually) use the Swift Package Manager for things like this. The value would be in integrating it like Optionals. e.g. (using a strawman symbol)</div><div><br></div><div>    var x: Int‽ = 5</div><div>    var y: Int‽ = anErrorValue</div><div><br></div><div>    func foo() -&gt; Int‽ { ... }</div><div><br></div><div>    if let x = foo() {</div><div>        // x is Int</div><div>    } else {</div><div>        // somehow access the error</div><div>    }</div><div><br></div><div>    guard let x = foo() else {</div><div>        // Again somehow access the error</div><div>    }</div><div><br></div><div>    func bar() throws -&gt; String { ... }</div><div>    let x = try‽ bar()   // x is String‽</div><div>    let y = x!  // y is String</div><div><br></div><div>    // Possibly even make it throw? (just using a random symbol again)</div><div>    let z = try x¡</div><div><br></div></div><div class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376HOEnZb"><div class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 2:02 AM, Xiaodi Wu via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">This is clearly a fine addition to the standard library; even Swift&#39;s Error Handling Rationale (<a href="https://github.com/apple/swift/blob/master/docs/ErrorHandlingRationale.rst" target="_blank">https://github.com/apple/swif<wbr>t/blob/master/docs/ErrorHandli<wbr>ngRationale.rst</a>) mentions such an addition<br><br>What separates standard library types from other types is that they have language level support, and the wrapping and unwrapping syntax here could definitely benefit from it (`.unwrap()`--which should be `.unwrapped()` incidentally--is so much less elegant in comparison to `?` and `!` for optionals (not that `Result` should use the exact such syntax for a distinct operation)). It would be a shame to transpose a third-party `Result` to the standard library without considering if any such tweaks would substantially improve ergonomics, interconversion with Optional and throws, etc.<br><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376m_-3581290411674590963h5">On Thu, Nov 2, 2017 at 1:08 PM, Jon Shier via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376m_-3581290411674590963h5"><div style="word-wrap:break-word;line-break:after-white-space">Swift-Evolution:<div><span class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376m_-3581290411674590963m_3914425453574025374m_-4434525584991225668Apple-tab-span" style="white-space:pre-wrap">        </span>I’ve written a first draft of a proposal to add Result&lt;T&gt; to the standard library by directly porting the Result&lt;T&gt; type used in Alamofire to the standard library. I’d be happy to implement it (type and tests for free!) if someone could point me to the right place to do so. I’m not including it directly in this email, since it includes the full implementation and is therefore quite long. (Discourse, please!) </div><div><br></div><div><a href="https://github.com/jshier/swift-evolution/blob/master/proposals/0187-add-result-to-the-standard-library.md" target="_blank">https://github.com/jshier/swif<wbr>t-evolution/blob/master/propos<wbr>als/0187-add-result-to-the-sta<wbr>ndard-library.md</a></div><div><br></div><div><br></div><div>Thanks, </div><span class="m_5579547658500364080m_4346162235656936450m_-8664348124982569376m_-3581290411674590963m_3914425453574025374HOEnZb"><font color="#888888"><div><br></div><div>Jon Shier</div><div><br></div><div><br></div></font></span></div><br></div></div><span>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
<br></span></blockquote></div><br></div></div>
<br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
______________________________<wbr>_________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br></div></blockquote></div><br></div></div></div></div></div></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br></blockquote></div><br></div>