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.
Félix > Le 23 déc. 2015 à 16:21:42, David Owens II via swift-evolution > <swift-evolution@swift.org> a écrit : > > This is something I asked for before, then I realized it wouldn’t work. > > func helper(rs: ResourceHandle) {} > > let resource = ResourceHandle() > helper(resource) > > result.doSomething() // error > > Another example: > > let x = Handle() > > do { > let y = x > } // resources are freed here as deinit is called > > // x is not safe to use, and freed again when x goes out of scope > > Everytime the struct value goes out of scope, the deinit would be called. The > other option is to create move and copy semantics, as both would be required. > >> Given Swift’s emphasis on value types > > 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. > > -David > >> On Dec 23, 2015, at 1:07 PM, Charles Srstka via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> Introduction: >> >> This is a rather simple proposal, requesting that structs allow the ‘deinit’ >> destructor, as classes currently do. >> >> Motivation: >> >> 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. >> >> Proposed Solution: >> >> Allow the deinit destructor in structs. >> >> Impact on Existing Code: >> >> Should be no impact on existing code. >> >> Charles >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution > > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution