[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。