> On Feb 20, 2017, at 9:09 AM, David Hart via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On 20 Feb 2017, at 12:22, Lauri Lehmijoki via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> I'm developing an application where we use RxSwift heavily. RxSwift is a 
>> stream library. Consequently, closures that we pass to its combinators often 
>> live infinitely (this is because one can use RxSwift to represent infinitely 
>> long sequences in time). 
> 
> I used RxSwift extensively and that’s not what I have experienced. I have 
> streams with lifetimes dependent on the lifetime of the DisposeBag they are 
> added to, which is itself linked to the lifetime of the current View 
> Controller or View Model. And that very closely resembles the way closures 
> work in the Cocoa APIs (UIAlertAction handlers, etc…). I don’t think RxSwift 
> is at odds.
> 
>> Closures with infinite lifespan have implications for the question "what is 
>> the best reference capture mode for closures". My experience is that in 
>> RxSwift applications, the current default (strong) is almost always 
>> suboptimal. It leads to difficult-to-detect memory leaks and introduces a 
>> "gotcha" factor to programmers who are new to Swift. I'd prefer the default 
>> to be weak capture.
>> 
>> So, I'd like to ask you two things:
>> 
>> A) By default, why the Swift closure captures values strongly?
> 
> If the default were weak, it would litter closures with ?
> If the default were unowned, your programs would crash without you 
> understanding.
> I think its a sensible default.
> 
>> B) Should we add a compiler option that, when turned on, would emit a 
>> warning if a closure strongly captures a class instance?
> 
> Perhaps we can improve the situation, but I’m not sure that is the solution. 
> Sometimes I want my references to be strongly captured and I don’t want a 
> warning to pollute by build output.
> 

In general, these should not be warnings as Swift tries to avoid effective 
language dialects through warnings. But, this would be an awesome lint rule!

>> Regards
>> Lauri
>> _______________________________________________
>> 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

Reply via email to