I got bit again by a sneaky memory leak concerning local functions and would like to discuss a small language change. I vaguely remember this being discussed in the past, but can’t find the thread (if anybody could point me to it, I’d appreciate it). Basically, here’s an example of the leak:
class A { func foo() { func local() { bar() } methodWithEscapingClosure { [unowned self] _ in self.bar() local() // this leaks because local captures self } } func bar() { } } Its sneaky because local’s capturing of self is not obvious if you’ve trained your brain to watch out for calls prefixed with self. I would suggest having the compiler force users to make self capturing explicit, the same way it does for closures: class A { func foo() { func local() { bar() // error: Call to method ‘bar' in function ‘local' requires explicit 'self.' to make capture semantics explicit } // ... } } What do you think? David.
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution