<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 1, 2016, at 1:43 PM, Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" class="">matthew@anandabits.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 1, 2016, at 3:25 PM, Chris Lattner &lt;<a href="mailto:clattner@apple.com" class="">clattner@apple.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">On Feb 1, 2016, at 1:02 PM, Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com" class="">matthew@anandabits.com</a>&gt; wrote:<br class=""><div class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><br class=""></div><div class="">I’m glad to see an @autoclosure func in this thread. &nbsp;We will want to be able to use this feature with @autoclosure in addition to @noescape.</div><div class=""><br class=""></div></div></div></blockquote><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="">As far as exiting without calling the closure, I suggest `@noescape(once?)`. &nbsp;The `?` indicates the closure may or may not be called, but<span class="Apple-converted-space">&nbsp;</span><b class="">will not</b>&nbsp;be called more than once.</div></div></div></blockquote><div class=""><br class=""></div><div class="">I don’t see how this is useful. &nbsp;You wouldn’t be able to initialize a value with this semantic, so it isn’t any more powerful than @noescape on the caller side.</div></div></div></blockquote><div class=""><br class=""></div><div class="">Right, you would not be able to use it for initialization.</div><div class=""><br class=""></div>It gives a guarantee that the closure will not be executed twice. &nbsp;This semantic guarantee could be useful, especially if the closure has side-effects. &nbsp;It adds the clarity of a guarantee &nbsp;to APIs where the zero-or-one-times semantic is implicit with @noescape alone.</div></div></div></blockquote><br class=""></div><div class="">Right, but unless the compiler is going to enforce it somehow, it doesn’t add any value above a comment. &nbsp;Particularly given that we want to keep the language simple where possible, I think that a comment would be perfectly fine for this. &nbsp;We don’t want to be in the business of providing a "documentation hook” in the language for every theoretical invariant someone might want to express.</div></div></div></blockquote><div class=""><br class=""></div><div class="">I agree if the compiler isn’t going to enforce it. &nbsp;The value is in the guarantee. &nbsp;</div><div class=""><br class=""></div><div class="">Why wouldn’t the compiler enforce it in this case? &nbsp;Is it hard to implement? &nbsp;It doesn’t seem like it should be any harder than guaranteeing exactly once.</div></div></div></div></blockquote></div><br class=""><div class="">You’re right, the caller could enforce this, so it does provide marginal value beyond a comment. &nbsp;I think the rest of my point stands though.</div><div class=""><br class=""></div><div class="">-Chris</div><div class=""><br class=""></div></body></html>