近期一篇主题为去泛型导致代码运行速度变慢的文章引起了广泛讨论。因为去开发者对“泛型”这项特性期盼已久,但最后却发现有所落差。
去泛型主要设计者伊恩?兰斯泰勒也留意到了相关的讨论,于是近日他在去官方博客发表了自己2021年的演讲——《当使用泛型》,来介绍使用去泛型的最佳时机。
上文提到的文章指出,从历史上看,c++, D乃至铁锈等系统语言一直采用<强>单态化强方法实现泛型。然而,走1.18的泛型实现并不完全依靠单态化(Monomorphization),而是采用了一种被称为“GCShape喷码字典”的部分单态化技术。这种方法的好处是可以大幅减少代码量,但在特定情况下,会导致代码速度变慢。
伊恩?兰斯泰勒表示,走的通用开发准则有要求:开发者应通过编写代码而不是定义类型来编写去程序。当涉及到泛型时,如果通过定义类型参数约束来编写程序,那一开始就走错了路。正解应该是从编写函数开始,当明确了类型参数的作用后,再添加类型参数就很容易了。
接着,伊恩·列举了4种类型参数能有效发挥作用的情况:
<李>使用语言定义的特殊容器类型李 <李>通用数据结构李 <李>类型参数首选是函数,而非方法的情况李 <李>不同类型需要实现通用方法同时也提醒了不适合使用类型参数的情况:
<李>不要使用类型参数替换接口类型(接口类型) <李>如果方法实现不同,不要使用类型参数 <李>在适当的地方使用反射(反射)最后,伊恩给出了简要的泛型使用方针,当开发者发现自己多次编写完全相同的代码,而这些副本之间的唯一区别仅在于使用了不同类型,这时候便可以考虑使用类型参数。换句话说,即开发者应避免使用类型参数,直到发现自己要多次编写完全相同的代码。
延伸阅读:去语言之父介绍泛型
0 留言