Rust语言入门(2)——设计哲学

设计哲学

1 简述

任何一门语言的兴起,都是为了解决一个问题。
自操作系统诞生以来,系统级主流变成语言,从汇编语言到C++, 已经发展了近50年。但仍然存在两个难题:

  • 很难编写内存安全的代码
  • 很难编写线程安全的代码

这两大本质的原因是C/C++属于类型不安全的语言。因此需要一个可以提供高的开发效率、代码容易维护、性能还能与C/C++媲美,同时还得保证安全性的语言。

2 设计哲学

Rust语言遵循三条设计哲学:

  • 内存安全
  • 零成本抽象
  • 实用性

2.1 内存安全(编译器yyds)

类型系统提供的好处:

  • 允许编译器侦测无意义甚至无效的代码,暴露程序中隐含的错误
  • 可以为编译器提供有意义的信息类型,帮助优化代码
  • 可以增强代码的可读性,更直白的阐述开发者的意图
  • 提供了一定程度的高级抽象,提升开发效率

一般来说,一门语言只要保证类型安全,就可以说他是一门安全的语言。简单来说,类型安全是指类型系统可以保证程序的行为是意义明确、不出错的。

Rust想保证内存安全,首先要做的是保证类型安全。
什么是内存安全,简单说就是不会出现内存访问错误。只有当程序访问未定义内存的时候才会产生内存错误,一般来说,一下几种情况就会产生内存错误:

  • 引用空指针
  • 使用未初始化内存
  • 释放后使用
  • 缓冲区溢出
  • 重复释放

为了保证内存安全,Rust语言建立了严格的安全内存管理模型:

  • 所有权系统。 每个被分配的内存都有一个独占其所有权的指针。只有当该指针被销毁时,其对应的内存才能随之被释放
  • 借用和生命周期。每个变量都有生命周期,一旦超出生命周期,变量就会被自动释放。如果是借用,则可以通过标记生命周期参数供编译器检查的方式,防止出现指针释放后再使用的情况

Rust的所有权系统还包括从C++那里借鉴的RAII机制,这是无GC但是可以安全管理内存的基石。

建立安全内存管理模型之后,再用系统类型表达出来即可。 Rust从Haskell的系统类型那里借鉴了以下特性:

  • 没有空指针
  • 默认不可变
  • 表达式
  • 高阶函数
  • 代数数据模型
  • 模式匹配
  • 泛型
  • trait和关联类型
  • 本地类型推导

Rust还具备其他独有的特征:

  • 仿射类型
  • 借用、生命周期

Rust编译器可以在编译器对类型就行检查,看其是否满足安全内存模型,在编译期就能发现内存不安全问题,同时会检测出多线程并发代码中所有的数据竞争问题

2.2 零成本抽象

变成语言做到高效开发,就必须拥有一定的抽象表达能力。对于Ruby这种语言,抽象表达能力是靠性能换来的,Rust不会存在运行时开销,因为这一切都是在编译期完成的。

Rust零成本抽象的基石是泛型和trait。

2.3 实用性

如何评价一门编程语言的实用性,可以从三个方面进行评价:

  • 实践性 首先必须能够应用于开发工业级产品,其次要易于学习和使用
  • 有益性 能够对业界产生积极的效果活影响
  • 稳定性 语言自身稳定。

(注: 本文参考张汉东老师《Rust编程之道》)

你可能感兴趣的:(Rust,rust,开发语言,后端)