《Rust编程之道》学习笔记一序Rust语言的主要特点系统级语言无GC基于LLVM内存安全强类型+静态类型混合编程范式零成本抽象线程安全程序员的快乐何谓快乐?真正的快乐不仅仅是写代码时的“酸爽”,更应该是代码部署到生产环境之后的“安稳”。程序的三大定律程序必须正确
何谓快乐?真正的快乐不仅仅是写代码时的“酸爽”,更应该是代码部署到生产环境之后的“安稳”。
Rust语言对程序的三定律支持的恰到好处。
目前Rust被陆续应用在区块链、游戏、WebAssembly 技术、机器学习,分布式数据库、网络服务基础设施、Web框架、操作系统和嵌入式等领域。
Rust 学习曲线陡的根本原因在于 Rust 语言融合了多种语言特性和多种编程范式。
从Rust 的设计哲学出发,牢牢把握它的设计一致性,就可以把它的所有特性都串起来,从而达到掌握它的目的。
第一章 新时代的语言
第二章 语言精要
第三章 类型系统
第四章 内存管理
第五章 所有权系统
第六章 函数、闭包和迭代器
第七章 结构化编程
第八章 字符串与集合类型
第九章 构建健壮的程序
第十章 模块化编程
第十一章 安全并发
第十二章 元编程
第十三章 超越安全的边界
不谋全局者,不足谋一域。
一门好的语言是有内涵哲学的语言,它表里如一,有所想,有所为。
Ada 语言
2006 年,自称 “职业编程语言工程师” 的 Graydon Hoare(简称为 GH),开始开发一门名为 Rust 的编程语言。
什么是 “职业编程语言工程师”?用 GH 自己的话说,职业编程语言工程师的日常工作就是给其他语言开发编译器和工具集,但并未参与这些语言本身的设计。
Rust 是一门同时追求安全、并发和性能的现代系统级编程语言。
有些事现在不做,一辈子都没机会再做了。 -- 练习曲[2006]
“程序即类型证明”
简单来说,类型安全是指类型系统可以保证程序的行为是意义明确、不出错的。
未定义行为(Undefined Behavior):发生了语言规范规定之外的行为。
Rust语言如果想保证内存安全,首先要做的就是保证类型安全。
类型安全的语言:OCaml、Haskell
类型系统的作用是定义编程语言中值和表达式的类型,将它们归类,赋予它们不同的行为,指导它们如何相互作用。
什么是内存安全?简单来说,就是不会出现内存访问错误。
只有当程序访问未定义内存的时候才会产生内存错误。
一般来说,发生以下几种情况就会产生内存错误:
Rust 编译器可以在编译期对类型进行检查,看其是否满足安全内存模型,在编译器就能发现内存不安全问题,有效地阻止未定义行为的发生。
Rust 编译器会通过静态检查分析,在编译器就检查出多线程并发代码中所有的数据竞争问题。
Rust 的抽象并不会存在运行时性能开销,这一切都是在编译期完成的。
Rust 中零成本抽象的基石就是泛型和Trait。
如何评价一门编程语言的实用性?
日常开发中一般有三类非正常情况:失败、错误和异常。
Rust 语言针对这三类非正常情况分别提供了专门的处理方式,让开发者可以分情况去选择。
Safe Rust 表示开发者将信任编译器能够在编译时保证安全,而 Unsafe Rust 表示让编译器信任开发者有能力保证安全。
Rust 代码是以包(crate)为编译和分发单位的
2015年,Rust发布1.0版本
2018年,Rust团队推出了新的大版本(edition)计划
Rust 2015 版本
Rust 2018 版本
Rust 2021 版本
Rust的编译器可以方便地管理版本的兼容性
![Rust 中概念层次结构梳理图](../../../../../Documents/Rust 中概念层次结构梳理图.png)
Rust 团队维护三个发行分支:稳定版(Stable)、测试版(Beta)和开发版(Nightly)。
其中稳定版和测试版每6周发布一次。
标记为不稳定(Unstable)和特性开关(Feature Gate)的语言特性或标准库特性只能在开发版中使用。
Rust 编译器是一个编译前端,它的工作是对代码进行词法分析、语法分析、类型检查、生成中间代码、进行独立于目标机器的优化等工作。
使用 LLVM 作为编译器后端代码生成框架,则可以利用 LLVM 兼容多个目标机器的特性,实现跨平台编译和优化等工作。
在用户使用Rust时,大多数时候无须考虑各个目标机器平台的特有性质,基本上可以做到一次编写,到处运行。
Rust 源码经过分词和解析,生成AST(抽象语法树)。
然后把 AST 进一步简化处理为 HIR(High-level IR),目的是让编译器更方便地做类型检查。
HIR 会进一步被编译为 MIR(Middle IR),这是一种中间表示。
最终,MIR 会被翻译为 LLVM IR,然后被 LLVM 的处理编译为能在各个平台上运行的目标机器码。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!