我注意到,在执行代码单态化的语言(例如:C++、Rust 等)中实现多态递归类型即使不是不可能,也是非常困难的。这通常是因为编译器需要为该类型的每个可能的实例化生成代码,这通常会导致无限递归。
支持此功能的语言通常使用类型擦除。编译器不会尝试实例化下一个递归调用,因为它已经知道类型的布局。
Julia 执行代码单态化,但它支持多态递归。我的猜测是,它是通过延迟实例化泛型类型或函数直到实际调用它来实现这一点的。但是,我认为这可能最终会使用大量内存,特别是当递归非常深时。所以我的问题是,Julia 是否仍会对多态递归类型执行代码单态化,还是会退回到类型擦除或其他方法?