1.1 Rust语言简介
Rust语言诞生于2006年,原本是Mozilla员工Graydon Hoare的私人项目。Mozilla于2009年开始赞助这个项目,并于2010年对外公布。Graydon Hoare认为,未来的互联网除了需要关注性能,更需要关注安全性和并发性。因此,他对Rust语言的期望是:必须更加安全、不易崩溃;不需要垃圾回收机制,不能为了内存安全而引入性能负担;拥有一系列相互协作的特性,使得程序更容易编写、维护和调试。总之,一切都是为了让开发者写出更安全、更高效的代码。在Stack Overflow 2020开发者调查报告中,Rust获得“最受喜爱编程语言”第一名,如图1-1所示。这是Rust连续五年蝉联“最受喜爱编程语言”的殊荣。
图1-1 Stack Overflow 2020开发者“最受喜爱编程语言”评选
计算机编程语言经历了从机器语言到汇编语言再到高级语言的演进,但一直以来始终有一个难题存在,那就是如何编写出内存安全的代码。近年来,由内存安全以及内存缓冲区溢出所导致的密钥泄露、拒绝服务和远程代码执行漏洞等相关问题频发。
简单来说,内存安全是不出现内存访问的错误。使用未初始化内存、引用空指针、释放指针后再次使用、重复释放指针、缓冲区溢出等都会导致内存访问错误。Rust语言的独到之处就是为了保证内存安全,建立了严格的内存管理模型——所有权系统和类型系统,通过其严格的编译器来检查代码中的每个变量和引用的每个内存指针,为每个变量建立了清晰的生命周期。一旦超出生命周期,变量就会被自动释放,从而不需要垃圾回收机制。每个被分配的内存都有一个独占其所有权的指针。当该指针被销毁时,其对应的内存才会被释放。这样,Rust从语言层面保证了程序的正确性,让开发者在编译阶段就能识别出内存不安全的错误。
除了安全性,Rust还追求高效开发。泛型和trait系统使其具备了强大的抽象表达能力。同时,为了保证程序的健壮性,Rust还设计了简单又精致的错误处理机制,让开发者可以从更细的粒度对非正常情况进行合理处理。后面的章节会逐步探索Rust这些独有的特性。