什么是“ANY”,它与“ANY”有何不同



在Julia最近的0.5夜中,我开始注意到名为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是一种向编译器暗示它不应该专门化参数的方法。否则,编译器会考虑将函数专门化为调用时使用的所有参数的特定类型,在某些情况下,这可能会导致大量不必要的代码生成。这是一种肮脏的黑客攻击,更通用的机制会更好,但它能完成任务。

最新更新