rust缘起和目标
rust的英文是锈菌,是一种真菌,这种真菌的生命力非常顽强,其
在生命周期内可以产生多达5种孢子类型,这5种生命形态还可以相互转
化。“Rust”也有“铁锈”的意思,暗合“裸金属”之意,代表了Rust的系
统级编程语言属性,有直接操作底层硬件的能力。此外,“Rust”在字形
组合上也糅合了“Trust”和“Robust”,暗示了“信任”与“鲁棒性”。
未来的互联网除了关注性能,还一定会高度关注安全性和并发性。整个世界对C和C++的设计方式的青睐在不断地发生改变。
其实20世纪七八十年代涌现了很多优秀的语言,拥有很多优秀的特性,
但它们的内存模型非常简易,不能保证足够的安全。比如Ada语言(军方会用)的动态内存管理虽然是高规格的安全设计,但还是引起了非常重大的安全事故。
rust目标:更安全,更高效,更可维护。被视为可以替代C++的语言
必须是更加安全、不易崩溃的,尤其在操作内存时,这一点更为
重要。
· 不需要有垃圾回收这样的系统,不能为了内存安全而引入性能负
担。
· 不是一门仅仅拥有一个主要特性的语言,而应该拥有一系列的广
泛特性,这些特性之间又不乏一致性。这些特性可以很好地相互协作,
从而使该语言更容易编写、维护和调试,让程序员写出更安全、更高效
的代码。(Rust涉及的知识范围非常广泛,涵盖了面向对象、函数式、泛型、底层内存管理、类型系统、设计模式等知识)
Rust的诞生为业界提供了一个除C和C++之外的更好的选择。
因为Rust是对安全、并发和性能都很看重的语言,它可以用于嵌入式系
统、操作系统、网络服务等底层系统,但它并不局限于此,它还可以用
于开发上层Web应用、游戏引擎和机器学习,甚至基于WebAssembly 技
术还可以开发前端组件。因为高的安全性和不逊于C/C++的性能,Rust
也被应用于新的前沿领域,比如区块链技术
rust设计哲学
为了达成目标,Rust语言遵循了三条设计哲学:
· 内存安全
· 零成本抽象
· 实用性 健壮性,对错误处理有更好的机制
也就是说,Rust语言中所有语法特性都围绕这三条哲学而设计,这也是Rust语言一致性的基础。
内存安全:Rust语言如果想保证内存安全,首先要做的就是保证类型安全。
只有当程序访问未定义内存的时候才会产生内存错误。一般来说,
发生以下几种情况就会产生内存错误:
· 引用空指针。
· 使用未初始化内存。
· 释放后使用,也就是使用悬垂指针。
· 缓冲区溢出,比如数组越界。
· 非法释放已经释放过的指针或未分配的指针,也就是重复释放。
这些情况之所以会产生内存错误,是因为它们都访问了未定义内存。为了保证内存安全,Rust语言建立了严格的安全内存管理模型,然后用类型系统表示出来。
安全内存管理模型:所有权系统。每个被分配的内存都有一个独占其所有权的指针。只有当该指针被销毁时,其对应的内存才能随之被释放。每个变量都有其生命周期,一旦超出生命周期,变量就会被自动释放。还包括了从现代C++那里借鉴的RAII机制,这是Rust无GC但是可以安全管理内存的基石。
(C++其实也没有GC机制,需要手动malloc,free。但是C++11的智能指针应该算是基于引用计数的GC机制)
Rust从 Haskell 的类型系统那里借鉴了以下特性:
· 没有空指针
· 默认不可变
· 表达式
· 高阶函数
· 代数数据类型
· 模式匹配
· 泛型
· trait和关联类型
· 本地类型推导
内存安全的Bug和并发安全的Bug产生的内在原因是相同的,都是因为内存的不正当访问而造成的。同样,利用装载了所有权的强大类型系统,Rust还解决了并发安全的问题。Rust编译器会通过静态检查分析,在编译期就检查出多线程并发代码中所有的数据竞争问题。
零成本抽象