为什么go和rust语言都舍弃了继承?

舍弃了 Class

舍弃或弱化子类型

类的继承是一段儿弯路

OO 发明了继承,然后发现真正有意义的是 interface 的组合(更准确的说,是 Product type of interfaces or abstract classes),语义上相当于组合,但在 Cpp,Java 等语言中,还是使用继承来实现),具体类的继承于人的认知充满矛盾。

比如说,我们有一个类叫 “马”,可以构造除马的实例,这个类是具体的。然后,我们定义一个新的类 “白马 extends 马”,说明我们的程序世界里要开始考虑颜色了,此时,“马” 这个类实质上已经不再具体,因为不存在一批马,它的颜色是未定义。

进一步理解,马也好、白马也好,其实描述的是一种集合,后者是前者的子集。集合的唯一行为,是任给一个对象,可以判定它们是否在集合中。所以,白马,马这样的类型可以用做函数调用时的类型检查,并不能用作构造实例。它们就是 OO 中的 interface。

那么我们用什么来构造实例呢?一般我们称为构造型,或者许多 OO 语言里的构造函数,用以构造复合特定接口的对象,比如下面这一段代码

class 白马 implements 有毛色 {
public 白马 (String id) { ... }
public Color 毛色() { return 白色; }
}

表达的就是

interface 马  { ... }
interface 白马 extends 马, 有毛色 {...} class 某具体马甲 implements 白马{
public 具体马甲(String id) { ... }
public Color 毛色() { return 白色;}
}

如果未来又有 “白色蒙古马”

完全可以定义为:

interface 马  { ... }
interface 白马 extends 马, 有毛色 {...}
interface 白色蒙古马 extends 白马, 有产地 { ... } class 某具体马乙 implements 白色蒙古马{
public 某具体马乙(String id) { ... }
public Color 毛色() { return 白色; }
public String 产地() { return 蒙古; }
}

有小伙伴可能会问,你这里马甲,马乙不还是一个没具体产地,一个有具体产地马?是的,但它两是完全无关的构造型,不存在马甲 isa 马乙,或者马乙 isa 马甲的关系,谁都不比谁更具体,也就谁不比谁更抽象,马乙有产地,并不会让马甲更抽象。我们完全还可以定义

class 某具体马丙 implements 马, 有产地{
public 某具体马丙(String id) { ... }
public String 产地() { return 蒙古; }
}

这大概就是我们不需要类的继承的原因吧。

至于接口的继承,本质上就是已有接口和新定义的行为构成的匿名接口的组合。两个接口的组合,其实就是两者行为的并集,表达两大接口约束对象的交集。

为什么 Go 和 Rust 语言都舍弃了继承?的更多相关文章

  1. 5分钟APIG实战: 使用Rust语言快速构建API能力开放

    序言:Rust语言简介 参与过C/C++大型项目的同学可能都经历过因为Null Pointer.Memory Leak等问题“被” 加班了不知道多少个晚上.别沮丧,你不是一个人,Mozilla Fir ...

  2. Rust语言:安全地并发

    http://www.csdn.net/article/2014-02-26/2818556-Rust http://www.zhihu.com/question/20032903 Rust是近两年M ...

  3. D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

    不要管我的地位和 D 语言创造者之一的身份.我会坦诚的回答这个问题.我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里.我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点 ...

  4. 【转】对 Rust 语言的分析

    对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...

  5. 半个月使用rust语言的体验

    从第一次下载rust语言的编译器到今天刚好第14天. 简单说一下对这个语言的感觉吧. 一.性能 把以前用java写的一个中文地址切分的算法,用rust重新实现了一下(https://github.co ...

  6. 我持续推动Rust语言支持Windows XP系统

    前言 Rust好像长期以来不支持Windows XP系统.有不少用户发帖提议官方支持XP,基本上都被Rust官方开发人员明白的拒绝了.他们的对话大致上是以这种形式開始和结束的(当中乙方代表官方及其拥趸 ...

  7. 微软看上的Rust 语言,安全性真的很可靠吗

    摘要:近几年,Rust语言以极快的增长速度获得了大量关注.其特点是在保证高安全性的同时,获得不输C/C++的性能.在Rust被很多项目使用以后,其实际安全性表现到底如何呢? 近几年,Rust语言以极快 ...

  8. Rust语言开发

    Rust开发 第一个程序 fn main() { println!("Hello, world!"); // 带!号的都是宏 并不是函数 } fn main() { let nam ...

  9. Apache Dubbo 多语言体系再添新员:首个 Rust 语言版本正式发布

    Dubbo Rust 定位为 Dubbo 多语言体系的重要实现,提供高性能.易用.可扩展的 RPC 框架,同时通过接入 Dubbo Mesh 体系提供丰富的服务治理能力.本文主要为大家介绍 Dubbo ...

  10. Rust语言之HelloWorld Web版

    Rust语言之HelloWorld Web版 下面这篇文章值得仔细研读: http://arthurtw.github.io/2014/12/21/rust-anti-sloppy-programmi ...

随机推荐

  1. 畅捷通T+与道一云对接集成报销信息列表连通凭证创建

    畅捷通T+与道一云对接集成获取报销信息列表连通凭证创建 数据源系统:道一云 在道一云坚实的技术基础上,道一云推出全新升级的2.0产品矩阵,分别是低码平台.智能门户.场景应用.基于云原生底座,为企业提供 ...

  2. AutoCAD ObjectARX 二次开发(2020版)--1,下载和部署开发环境--

    教程说明: 本教程为2019年10月开始编撰,使用CAD官方最新版本的软件和库.对旧版本仍有参考价值. 本教程中使用的各种软件版本为官方指定匹配版本. 本教程需要你拥有编程基础,对于普通编程常识不再敷 ...

  3. BI到底是什么,是否所有企业都适合上BI?

    商业智能(Business Intelligence)的概念 商业智能(BI)是一种综合性的数据分析和决策支持系统,旨在帮助企业从海量的数据中提取有价值的信息,并将其转化为洞察力.报告和可视化呈现,以 ...

  4. Mysql不同数据库之间表结构同步

    开发环境的Mysql表结构做了修改,要同步到其他环境数据库中使用数据库管理工具JookDB的表结构同步功能就很方便.虽然Navicat也有这个功能但是有免费的当然是用免费的. 用JookDB添加数据库 ...

  5. Cplex学术版申请及Python API环境配置

    当使用Cplex时弹出下面错误: CPLEX Error 1016: Community Edition. Problem size limits exceeded. Purchase at http ...

  6. 构建一个语音转文字的WebApi服务

    构建一个语音转文字的WebApi服务 简介 由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装 ...

  7. Spingboot整合Dubbo+zookeeper

    前言: 2023-12-26 19:38:05 最近学习分布式技术:Dubbo+zookeeper,准备写一个demo用springboot整合dubbo和zookeeper.但是看了网上一些教程都是 ...

  8. pytest框架学习-pytest_addoption钩子函数

    适用场景:一套自动化代码,多套环境. pytest_addoption 允许用户自定义注册一个命令行参数,方便用户通过命令行参数的形式给 pytest 传递不同的参数进行不同测试场景的切换. pyte ...

  9. 大四jsp实训项目技术总结

    crm项目总结 ①静态资源疯狂报错?很有可能是后端的问题,后端出了问题,服务器取不出来资源. 记住:只要服务器取不到某个资源,很有可能导致所有资源都取不出来. 一个经典案例:某个数据库映射文件 ICu ...

  10. 热闹的人工智能VS酷寒的资本寒冬,2023年AI Agent项目盘点与融资分析

    2023年国内AI Agent下项目大盘点,科技大厂与创业公司齐头并进 热闹人工智能VS酷寒资本寒冬,2023年AI Agent项目盘点与融资分析 资本寒冬下的AIGC,为什么这些AI Agent项目 ...