Pra*_*eep 6 generics type-systems covariance dart
http://www.dartlang.org/docs/spec/dartLangSpec.pdf
Dart的语言规范如下所述
Dart支持基于接口类型的可选输入.由于泛型类型的协方差,类型系统是不健全的.这是一个深思熟虑的选择(毫无疑问是有争议的).经验表明, 泛型的声音类型规则在程序员直觉面前飞行.它是 ..
来自Gilad Bracha [1]:
你可以写一个工具来尖叫关于这些东西的血腥谋杀,但你不能做的是阻止人们运行他们的程序.
或者,换句话说[2]:
问题在于,对于大多数程序员来说,完全明确地表达类型流比编写传递值的代码更困难,并且当它们发生时处理运行时类型错误.选择这种难度差异的词是后者比前者更"直观" - 我不认为这是一个特别糟糕的词语选择.这种现象是近年来动态语言变得越来越受欢迎的最大原因之一,即拒绝指定静态类型的复杂性.
这就像是另一个三角形权衡:表达,声音,简单:为你的类型系统选择任意两个.几乎每个人都不愿意放弃表达性 - 现代软件编织的对象图形确实非常纠结 - 而任何希望获得大规模成功的语言都不能开始变得简单.因此,他们放弃了一些(静态类型)健全性,并期望在调试和测试期间出现大量运行时类型错误.
[1] http://blog.sethladd.com/2011/11/transcription-of-quick-tour-of-dart-by.html
[2] http://lambda-the-ultimate.org/node/4377#comment-67589
什么是Dart lang spec作者在他们说仿制品的声音类型规则在直觉面前飞行时的想法?
看一下这个问题右侧的相关问题.我知道了:
List<Number>
不是一个子类型List<Object>
?List<Derived>
一个List<Base>
?list<MyClass>
转变为List<object>
?Animals[] animals = new Cat[5]
编译,但List<Animal> animals = new List<Cat>()
不是?虽然协方差不合适(对于许多可变类型),但许多程序员在第一次开始使用泛型类型时会直观地预期这种行为.