当尝试编写类型稳定的代码,使用@code_warntype
进行检查时,我应该只担心变量部分中没有任何Any
或Union
,或者我也应该检查正文部?
答案 0 :(得分:8)
根据您的julia版本,@code_warntype
有时会标记某些无害的表达式。通过一些练习,您可以轻松识别这些表达式(例如,它们通常与模块/名称查找有关。)
Reza说,简单的路径是查看变量部分和函数的返回类型;如果您没有看到任何类型不确定的数量(Any
或Union
),您可能无需担心。如果你想深入挖掘,开始尝试理解它标记的身体表情。对于学习,一个有用的事情是将结果与使用track-allocation
获得的结果进行比较,因为真正的类型不稳定性与内存分配有关。
但是,我认为@code_warntype
的问题已在当前的主人身上得到修复,因此无论如何,julia的下一版本应该更容易解释。
答案 1 :(得分:4)
通常,没有必要搜索 body 部分以获取更多所谓的非叶类型,因为code_warntype
主要任务是为你做这份工作,(check source)。但是身体部分有关于非叶的使用位置和方式的更多信息。
参考文献:
code_warntype(f, types)
。code_warntype(f, types)
来源。 答案 2 :(得分:0)
@code_warntype还针对某些变量报告“ Core.NewVarNode”对象。我相信,如果不采取任何措施,这些有关额外内存分配的信息就不会在内部循环中受到欢迎,因为内部循环会频繁地产生内存分配。