> On Jun 27, 2016, at 11:52 PM, Charlie Monroe via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On Jun 27, 2016, at 9:10 PM, Christopher Kornher <ckorn...@me.com 
>> <mailto:ckorn...@me.com>> wrote:
>> 
>> 
>>> On Jun 26, 2016, at 11:22 PM, Charlie Monroe via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>>> All object references used within a closure must unwrap successfully for 
>>>> the closure to execute.
>>> I agree with the logic of this proposal, but this is the confusing part or 
>>> a part that I slightly disagree with.
>>> 
>>> By this logic, the block won't be invoked if all captured variables can't 
>>> be unwrapped, which is definitely confusing to the newcomer (to whom this 
>>> is partially targetted as you've mentioned) if he puts a breakpoint in it 
>>> and doesn't get executed even when he's explicitely invoking it somewhere.
>>> 
>>> On the other hand, when it crashes, it gives him some idea that something's 
>>> wrong.
>> 
>> Tooling could alleviate some of this mystery. For example:
>> 
>> 1) In Xcode and other GUIs, closures that will not be executed could be 
>> greyed-out, perhaps with the reason overlaid on the closure perhaps this 
>> would only happen when a breakpoint was set within the closure. Perhaps the 
>> app could break on the on breakpoints within non-executing closures and 
>> notify the user that the closure did not execute.
>> 
>> 2) Debugger console commands could be added to describe the execution state 
>> of closures in scope and closure variables.
>> 
>> 3) Debug apps could bottleneck all closures through a function that that can 
>> be break-pointed. Breakpoints could be edited to filter on specific 
>> closures. 
>> 
>> 4) Some runtime switches could be added to enable verbose login modes for 
>> closures.
> 
> This can solve issues that you may have with a 2KLOC project that does 
> nothing but waits for the user to click on something. When you have a project 
> of 100KLOC, running at 100% CPU on a background thread, I don't think you'd 
> debug anything since console would be flooded by thousands of log messages…

This technique is used with CoreData, OS X Bindings, and probably other 
frameworks and yes, it is often a tool of last resort. Tools like grep and 
spunk are often needed to make use of the output, but this is an effective 
technique, if not a very efficient one. I much prefer interactive debugger 
support. One advantage of global logging options is that they can be to used 
over long periods, on remote machines to capture infrequent errors. 

> 
>> 
>> I don’t think that this is an insurmountable problem. There are many 
>> features of modern applications that are difficult to debug.
>> 
>>> 
>>> 
>>>> 
>>>> I believe that these are safe, sensible and understandable rules that will 
>>>> eliminate the need for capture lists for many closures. What do you think?
>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <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