在最近的 Julia 的 0.5 nightlies 中,我开始注意到名为 ANY
的类型参数。 ,限制为 Any
的子类型.
这当然总是正确的,因为所有类型都是 Any
的子类型
例如:
serialize(s::SerializationState, x::ANY<:Any) at serialize.jl:468
show(io::IO, x::ANY<:Any) at show.jl:85
methods(f::ANY<:Any) at reflection.jl:258
methods(f::ANY<:Any, t::ANY<:Any) at reflection.jl:247
那么发生了什么?
这是一种鼓励编译器在 JIT 中生成专用函数的技巧吗?
最佳答案
ANY
是一种向编译器提示它不应该专门处理参数的技巧。否则,编译器将考虑在调用它们的所有参数的特定类型上专门化函数,这在某些情况下最终可能会生成大量不必要的代码。这是一种肮脏的黑客攻击,更通用的机制会更好,但它可以完成工作。
关于generics - 什么是 `ANY` ,它与 `Any` 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180751/