[Rust编程之道笔记]通用概念

Rust编程之道一书 3.1 节通用概念

内容出处: Rust编程之道一书,第3章类型系统,3.1 通用概念

3.1 通用概念

所谓类型,其实就是对表示信息的值进行细粒度的区分。不同的类型占用的内存不同。与直接操作比特位相比,直接操作类型可以更安全、更有效的利用内存。

类型系统是编程语言的基础和核心。

**在类型系统中,一切皆类型。**基于类型定义的一系列组合、运算和转换,可以看做类型的行为。

3.1.1 类型系统的作用

  • 排查错误:在编译期或者运行期进行类型检查。静态语言能在编译期排查出错误。
  • 抽象:类型容许开发者在更高层面上进行思考。
  • 文档:明确的类型声明可以表明程序的行为
  • 优化效率:对于静态编译语言,在编译期可以通过类型检查来优化操作,节省运行时时间
  • 类型安全
    • 类型安全的语言可以便面类型间的无效计算
    • 类型安全的语言还可以保证内存安全:避免空指针、悬垂指针和缓存区溢出等导致的内存安全问题
    • 类型安全的语言可以避免语义上的逻辑错误

3.1.2 类型系统的分类

  • 静态类型:在编译期进行类型检查
  • 动态类型:在运行期进行类型检查

编程语言:

  • 强类型:不容许类型的自动隐式转换,在强制转换前不同类型无法进行计算
  • 弱类型:容许类型的自动隐式转换

3.1.3 类型系统与多态性

多态类型系统的定义:容许一段代码在不同的上下文中具有不同类型的类型系统。对于静态类型的语言而言,多态性的好处是可以在不影响类型丰富的前提下,为不同的类型编写通用的代码。

按照多态发生的时机来划分:

  • 静多态(Static Polymorphism) :发生在编译期,静多态牺牲灵活性获取性能
  • 动多态(Dynamic Polymorphism):发生在运行时,动多态牺牲性能获取灵活性。

动多态在运行时需要查表,占用较多空间,所以一般情况下都使用静多态。

Rust 语言同时支持静多态和动多态,其中静多态是一种零成本抽象。

现代编程语言包含三种多态形式:

  • 参数化多态(Parametric polymorphism)

    一般是静多态,实际就是指泛型。泛型使得语言极具表达力,同时也保证了静态类型安全。

  • Ad-hoc 多态(ad-hoc polymorphism)

    也叫特定多态。

    Ad-hoc 多态是指同一种行为定义,在不同的上下文中会有不同的行为实现。

    Rust 受 Haskell 启发,使用 trait 来支持 Ad-hoc 多态。

  • 子类型多态(subtype polymorphism)

    一般是动多态,常用于面向对象的语言中,如Java。子类型多态代表一种包含关系:父类型的值包含了子类型的值,所以子类型的值可以看成父类型的值。

    Rust 中没有类型Java的继承概念,因此不存在子类型多态。

总结:Rust 的类型系统目前只支持参数化多态和Ad-hoc多态,即泛型和trait。