Hasty Briefsbeta

双语

PHP compile time generics: yay or nay?

9 months ago
  • #PHP
  • #Programming
  • #Generics
  • PHP中的泛型功能备受期待但由于PHP是解释型语言而难以实现
  • PHP基金会开发团队建议在接口和抽象类上实现泛型,以20%的精力获得80%的收益
  • 编译时泛型将允许接口和抽象类声明所需类型,由实现类具体指定
  • 运行时泛型(如`new Exporter<Foo>()`)仍不可行,但编译时泛型能规避大多数问题
  • Arnaud Le Blanc和Gina Banyard的实验探索了泛型和关联类型,主要聚焦编译时解决方案
  • 关联类型允许接口指定继承者必须定义类型,提供了比完整泛型更简单的替代方案
  • 手动单态化可实现编译时类型强制,由类为泛型接口指定具体类型
  • 潜在扩展包括允许抽象类成为泛型,以及支持方法签名中的类型声明
  • 泛型的常见用途(如类型化集合)可通过`Sequence<T>`、`Set<T>`和`Dict<K, V>`等接口实现
  • 未来可能支持泛型类型的变体注解(`in`和`out`),但这些功能复杂可能后期实现
  • 特性(trait)和函数的泛型存在额外挑战,初期版本不太可能支持
  • 运行时泛型、联合类型与泛型的结合、类型推断等难题尚未解决且可能永远不可行
  • PHP基金会正征求社区意见:仅支持编译时泛型是否值得继续开发