什么是 `ANY`,它与 `Any` 有何不同?

What is `ANY`, and how does it differ from `Any` ?

在最近的 0.5 版本的 Julia 中,我开始注意到名为 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 是一种提示编译器它不应该专注于参数的技巧。否则,编译器将考虑在调用它们时使用的所有参数的特定类型上专门化函数,这在某些情况下最终可能会生成大量不必要的代码。这是一种肮脏的 hack,更通用的机制会更好,但它完成了工作。