首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >亚型有什么问题?

亚型有什么问题?
EN

Software Engineering用户
提问于 2021-01-17 10:11:32
回答 1查看 236关注 0票数 1

我经常听说,subtyping破坏了一些重要而有用的特性:许多由纯编程语言开发的优秀创新,由于子类型的存在,无法应用到Java或C++中。他们说,因为这个原因,Rust语言避免了子类型。

这样的说法正确吗?

有哪些很酷的东西不能应用到带有子类型的语言中?

是否有任何提供子类型的语言被完全诅咒,并且与许多酷特性不兼容?还是只有使用子类型的代码片段是不兼容的?

你能解释一下这对来自C++的人意味着什么吗?

我寻找解释,发现:

  • 堆栈上的为什么要避免子类型溢出,但最上面的答案使用了一些概念和一种我无法理解的语言。
  • 为什么有一个继承和子类型的机制是不好的呢?。他们解释了为什么只有一个接口继承+实现继承的机制是不好的。而不是为什么亚型本身是不好的。
  • 子类、子类和OOP的问题。他们误用继承的例子IMHO: CSet应该由CBag组成,而不是继承它。但我认为,在其他任务中正确地使用Subtyping/Subclassing是可能的。
EN

回答 1

Software Engineering用户

发布于 2021-01-18 02:34:12

这样的说法正确吗?

不是不对吗?我的意思是,子类型确实意味着你不知道操作的确切类型--你只知道它是“至少”一种类型。这限制了在编译时可以进行的一些分析和优化。

是否有任何提供子类型的语言被完全诅咒,并且与许多酷特性不兼容?

是的,一旦类型系统有子类型,您就需要像密封或最终类型这样的东西来做出非子类型的假设。即使如此,一旦你点击接口或非最终类型,所有的赌注都会被关闭。在实践中,这意味着你不能利用这些东西。

有哪些很酷的东西不能应用到带有子类型的语言中?

可能还有更多,但是像相依类型这样的东西在一个也有子类型的系统中变得更难了。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/421152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档