我经常听说,subtyping破坏了一些重要而有用的特性:许多由纯编程语言开发的优秀创新,由于子类型的存在,无法应用到Java或C++中。他们说,因为这个原因,Rust语言避免了子类型。
这样的说法正确吗?
有哪些很酷的东西不能应用到带有子类型的语言中?
是否有任何提供子类型的语言被完全诅咒,并且与许多酷特性不兼容?还是只有使用子类型的代码片段是不兼容的?
你能解释一下这对来自C++的人意味着什么吗?
我寻找解释,发现:
发布于 2021-01-18 02:34:12
这样的说法正确吗?
不是不对吗?我的意思是,子类型确实意味着你不知道操作的确切类型--你只知道它是“至少”一种类型。这限制了在编译时可以进行的一些分析和优化。
是否有任何提供子类型的语言被完全诅咒,并且与许多酷特性不兼容?
是的,一旦类型系统有子类型,您就需要像密封或最终类型这样的东西来做出非子类型的假设。即使如此,一旦你点击接口或非最终类型,所有的赌注都会被关闭。在实践中,这意味着你不能利用这些东西。
有哪些很酷的东西不能应用到带有子类型的语言中?
可能还有更多,但是像相依类型这样的东西在一个也有子类型的系统中变得更难了。
https://softwareengineering.stackexchange.com/questions/421152
复制相似问题