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基金会正征求社区意见:仅支持编译时泛型是否值得继续开发