什么是"任何",它与"任何"有什么不同?

Lyn*_*ite 7 generics jit types julia

在最近的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
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?这是一种鼓励编译器生成JITs专用函数的技巧吗?

Ste*_*ski 8

ANY是一个黑客,暗示编译器不应该专注于一个参数.否则,编译器将考虑对它们被调用的所有参数的特定类型进行特殊处理,这在某些情况下最终可能会产生大量不必要的代码.这是一种肮脏的黑客攻击,更普遍的机制会更好,但它可以完成工作.