use*_*855 8 debugging functional-programming
我听说以下功能降低了可调试性(因为它们是匿名的,调试器无法很好地跟踪它)
这是真的?
关于您提到的特定功能,已经有一些很好的答案.
一般来说,我会说一些FP功能,以及更多FP风格的编程方面,至少与调试体验"互动".例如,使用高阶函数,可以采用无点样式编程.当您这样做时,这会留下更少的标识符,这意味着在调试器的"本地"窗口中可以轻松检查的内容更少.在你进入他们的身体之前,闭包通常是不透明的.
FP还使用了大量的控制反转构造(懒惰评估只是一个,'地图'或'iter'而不是'foreach'是另一个),这改变了控制流程并且可以影响"单步"的方式作品.
随着FP变得越来越普遍,我希望调试工具能够继续改进.我不清楚某些FP是否"固有地"更难以调试,但即使这是真的,也不要忘记FP会让你的代码首先不太可能需要调试.:)
我想说这绝对是不真实的。是的,如果没有额外的调试支持,这些构造可能会更难以调试。在许多语言中,它们并不是真正的匿名,因为调试器不理解语言语义。相反,它理解程序的最终形式(.exe 和 PDB 组合)。大多数匿名构造最终在最终程序中采用具体形式(对于 .Net 实现来说非常如此)。
此外,实现这些功能的语言通常需要时间来为它们实现更好的调试支持。以C#和VB为例
DebuggerDisplay
属性并覆盖生成的匿名类型上的 .ToString 以增加调试支持。实现略有不同,但结果几乎相同。