[swift-evolution] Pitch: Deinit for structs

Matthew Johnson matthew at anandabits.com
Wed Dec 23 17:16:12 CST 2015



Sent from my iPad

> On Dec 23, 2015, at 3:15 PM, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
>> On Dec 23, 2015, at 1:07 PM, Charles Srstka via swift-evolution <swift-evolution at 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.
> 
> Network and file-backed constructs naturally have identity, so classes are appropriate. What benefit would you get from making them structs? What does it mean to copy a socket?
> 

I wonder if the goal is to avoid a heap allocation.  Under what circumstances can stack promotion be guaranteed for a final class?

> -Joe
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list