<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I evaluated the effects of this proposal on five projects written in Swift against Foundation and other well-audited OS X and iOS Objective-C APIs. The only changes that had to be made were the result of Objective-C API in the project itself that had not yet been annotated with nullability information. In addition, it ended up revealing a programming error in one project where a property had been unintentionally inferred to have IUO type.&nbsp;I presented these results at the Swift core team review meeting.<div class=""><br class=""></div><div class="">Jordan Rose expressed some concern that this sampling of projects didn’t really say anything about the effect of these changes on projects that depend on unaudited API, especially the Linux case. So I investigated the effect of this proposal on building swiftpm, which makes extensive use of POSIX C API. It ended up requiring ten new uses of the ! operator (out of 14k lines of Swift) to get building again; they were all return values from C API (ctime_r, getcwd, getenv, strerror, realpath) that had been saved to intermediate variables. Jordan observes that most of the cases are better expressed with “if let” or “guard let” statements anyway.</div><div class=""><br class=""></div><div class="">We have concluded that we should move forward with implementing&nbsp;the proposal.</div><div class="">&nbsp;&nbsp;</div><div class=""><div class=""><div class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; line-height: normal; border-spacing: 0px;"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; " class=""><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; " class="">-- Chris Willmore</div></span></div></span></span>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Mar 31, 2016, at 9:43 AM, Chris Lattner via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Proposal Link: <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md</a><br class=""><br class="">The review of SE-0054 "Abolish ImplicitlyUnwrappedOptional type" ran from Mar 25…30, 2016. The proposal has been *accepted, pending implementation experience*:<br class=""><br class="">There is generally positive feedback on the proposal, as it keeps the good behaviors of the existing T! type syntax (including support for importing un-nullability-audited APIs, support for 2-phase initialization patterns, etc) while dramatically reducing the confusion and surprise that they introduce as they trickle through type inference. &nbsp;The core team sees significant value in having a simple and predictable model that can be explained concisely. <br class=""><br class="">That said, this is the sort of proposal that can have a profound impact on the actual experience using unaudited APIs. &nbsp;The core team believes that the experience will be good, but we would like to get some experience moving a couple of existing projects (both low-level code that interacts with C, and an “App” project working with high level frameworks) to see what the impact is in practice. &nbsp;If something unexpected comes up, we will revisit this, and potentially reject it later. &nbsp;Chris Willmore is working on an implementation of this now, so we should know in the next week or two.<br class=""><br class="">Thank you to Chris Willmore for driving this forward!<br class=""><br class="">-Chris Lattner<br class="">Review Manager<br class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></div></blockquote></div><br class=""></div></div></div></body></html>