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

Yang 770

Go和Rust都是现代编程语言,因为继承会导致代码的复杂性增加,而且继承的实现也会影响代码的性能。 它们的设计目标是简单、高效、安全和可靠。因此,它们都舍弃了传统面向对象语言中的继承特性,因为这种特性会引入很多复杂性和潜在的安全隐患。

一、继承

1、什么是继承

继承是一种面向对象编程的重要特性,它可以让子类继承父类的属性和方法,并在此基础上进行扩展。

2、继承的问题

继承层次复杂:当类之间存在多层继承关系时,会形成复杂的继承层次,难以维护和理解。

耦合性高:子类与父类之间的关系是紧密耦合的,一旦父类发生变化,子类的实现也可能受到影响。

安全隐患:继承会导致子类继承了父类的所有属性和方法,包括那些可能对子类来说是不安全或不必要的属性和方法。

3、解决方法

因此,为了简化设计、提高安全性和可靠性,Go和Rust语言都采用了其他的方法来实现代码重用和扩展:Go语言通过接口(interface)实现代码重用和扩展。接口定义了一组方法,不关心实现方式,只关心方法的签名和返回值类型。任何类型只要实现了接口定义的方法,就可以被当做该接口类型使用,这样可以避免了复杂的继承层次和耦合性高的问题。Rust语言通过组合和trait(类似于接口)实现代码重用和扩展。Rust使用组合(composition)代替继承,将多个结构体(struct)组合在一起,实现代码的复用。同时,通过trait定义一组方法的行为,来实现代码的扩展。综上所述,Go和Rust语言都舍弃了继承,采用了其他的方式来实现代码重用和扩展,以简化设计、提高安全性和可靠性。

二、Go和Rust的相似之处

Rust和Go有很多共同点,这也是经常听到它们一起被提及的原因之一。两种语言的共同目标是什么呢?

Rust是一种低级静态类型的多范式编程语言,专注于安全和性能。

Go是一种开源的编程语言,可以轻松构建简单、可靠、高效的软件。

1、内存安全

Go和Rust都属于现代编程语言,它们的首要任务是内存安全。经过几十年对C和C++等旧语言的使用,我们可以清楚地看到,导致错误和安全漏洞的最大原因之一是不安全地或不正确地访问内存。

Rust和Go以不同的方式处理这个问题,但它们的目标都是在管理内存方面比其他语言更聪明、更安全,并帮助你写出正确和高性能的程序。

2、快速、紧凑的可执行文件

Go和Rust都是编译型语言,这意味着你的程序被直接翻译成可执行的机器码,因此你可以以单一二进制文件形式来部署你的程序;与Python和Ruby等解释型语言不同,你不需要将解释器和大量的库和依赖关系与你的程序一起分发,这是一个很大的优点。这也使得Rust和Go的程序与解释型语言相比都非常快。

3、通用语言

Rust和Go都是强大的、可扩展的通用编程语言,你可以用它们来开发各种现代软件,从网络应用到分布式微服务,或者从嵌入式微控制器到移动应用程序。

两者都有优异的标准库、繁荣的第三方生态系统以及巨大的商业支持和庞大的用户基础。它们都已经存在了很多年,并将在未来几年内继续被广泛使用。

4、务实的编程风格

Go和Rust都不是以函数式编程为主的语言(例如像Scala或Elixir),也不是完全面向对象的语言(像Java和C#)。相反,虽然Go和Rust都有与函数式和面向对象编程相关的特性,但它们是务实的语言,旨在以最合适的方式解决问题,而不是强迫你采用特定的做事方式。

如果你喜欢函数式编程风格,你会在Rust中发现更多对这种风格的支持,因为Rust在语法特性数量上要比Go更多。

5、规模化的开发

Rust和Go都有一些有用的特性,使它们适合于大规模的编程,不管是指大型团队,还是大型代码库,或者两者兼具。

例如,C语言的程序员们多年来一直在争论将括号放在哪里,以及代码应该用制表符还是空格缩进,而Rust和Go通过使用标准的格式化工具(Go为gofmt,Rust为rustfmt)使用规范的风格自动重写你的代码,完全消除了这些问题。

这并不是说这种特殊的风格本身有多好,而是Rust和Go的程序员都喜欢这种标准化。

两种语言的另一个高分领域是**构建管道(pipeline)**。两种语言都有优异的、内置的、高性能的标准构建和依赖管理工具;不再需要与复杂的第三方构建系统搏斗,也不再需要每隔几年就学习一个新的系统。

回复

我来回复
  • 暂无回复内容

站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部