<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=""><div class="">Just chiming in with you two: deinit for a struct doesn't really work because structs are copied and destroyed all the time. Putting a file descriptor in a struct (along with destruction logic) would fail pretty hard without C++-like copy/move semantics.</div><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Lucida Grande';  font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: 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; ">Félix</span>
</div>

<br class=""><div><blockquote type="cite" class=""><div class="">Le 23 déc. 2015 à 16:21:42, David Owens II via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</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=""><div class="">This is something I asked for before, then I realized it wouldn’t work.</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Menlo" class="">func helper(rs: ResourceHandle) {</font><span style="font-family: Menlo;" class="">}</span></div><div class=""><span style="font-family: Menlo;" class=""><br class=""></span></div><div class=""><span style="font-family: Menlo;" class="">let resource = ResourceHandle()</span></div><div class=""><span style="font-family: Menlo;" class="">helper(resource)</span></div><div class=""><span style="font-family: Menlo;" class=""><br class=""></span></div><div class=""><span style="font-family: Menlo;" class="">result.doSomething() // error</span></div></blockquote><div class=""><br class=""></div><div class="">Another example:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><span style="font-family: Menlo;" class="">let x = Handle()</span></div></div><div class=""><span style="font-family: Menlo;" class=""><br class=""></span></div><div class=""><font face="Menlo" class="">do {</font></div><div class=""><font face="Menlo" class="">&nbsp; let y = x</font></div><div class=""><font face="Menlo" class="">} // resources are freed here as deinit is called</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">// x is not safe to use, and freed again when x goes out of scope</font></div></blockquote><div class=""><br class=""></div><div class="">Everytime the struct value goes out of scope, the <i class="">deinit</i>&nbsp;would be called. The other option is to create move and copy semantics, as both would be required.</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class="">Given Swift’s emphasis on value types</blockquote><br class=""></div><div class="">I think this is a mischaracterization, and one that I’ve made in the past. Swift’s emphasis in on clarity and providing you the mechanism to create things that are value-types for APIs that should behave like a value. However, that doesn’t mean that everything should a struct first.</div><div class=""><br class=""></div><div class="">-David</div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Dec 23, 2015, at 1:07 PM, Charles Srstka 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="">Introduction:<br class=""><br class="">This is a rather simple proposal, requesting that structs allow the ‘deinit’ destructor, as classes currently do.<br class=""><br class="">Motivation:<br class=""><br class="">Sometimes it is necessary to create an object that wraps a network connection (that needs to be closed when the object is destroyed), or that writes to a file on the disk (that has to be closed when the object is destroyed). Often these objects will implement a close() method, but in the case that the user forgets to call this before the object is disposed of, it is good to call it in deinit just in case. However, deinit currently is available only to classes and not to structs. This means that value types currently cannot be used for network and file-backed constructs. Given Swift’s emphasis on value types, it seems that it would be good to add this functionality to value types.<br class=""><br class="">Proposed Solution:<br class=""><br class="">Allow the deinit destructor in structs.<br class=""><br class="">Impact on Existing Code:<br class=""><br class="">Should be no impact on existing code.<br class=""><br class="">Charles<br class=""><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=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></div></blockquote></div><br class="">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=iRI3beHTe3UxYAHTlV3lA38zIPfHMhyuRzgTmGKV6k67mvZNDFMR6B4W3W2ekXHTfAo1D5Y43wISf5LJSj-2BoH2CNXF2wQlrAQMW-2B0iV1Cin2pXIEanNe1-2F-2B1Fxrut9KFL8d-2FLwh0XWHJgsfJ1LOiPUJCqokvflEmrxYwU454sCfCz2SkMX6Ppwmj78rzxrWES99B8QTSUknm2B8iwLJ-2FfyfM8pnghNYElgepCwI8CQc-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>
_______________________________________________<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></blockquote></div><br class=""></body></html>