Rust
- S:在学习和实践“Rust”时,需要建立统一的概念和问题边界。
- C:相关概念、实现机制和工程取舍容易混在一起,导致只记住结论而无法判断适用条件。
- Q:“Rust”要解决什么问题?它的核心抽象、工作机制和边界分别是什么?
- A:本文围绕“Rust”整理核心概念、关键机制和工程实践,并明确其适用边界。
初识rust
- 性能:没有运行时、没有垃圾回收器
- 可靠性:富类型系统、所有权模型,保证内存安全、线程安全,在编译器发现许多问题
- 生产力:文档、友好报错信息的编译器、一流的工具
- 没有运行时?所有特性都是零成本抽象,不会有额外的运行时操作
- 没有垃圾回收器?RAII,初始化对象即申请内存,对象结束使用则释放内存
- 所有权模型:保证一个值只能被一个变量拥有(负责释放)
- 借用:把引用看作借用,分只读、可写,读写互斥;编译期进行引用有效期分析(生命周期)
- 富类型系统:编译器通过许多trait表达的语义严格检查类型可以做什么
- 错误处理:Option、Result
- 函数式特性:迭代器(惰性求值、链式组合)、闭包、高阶函数、默认不可变
类型(数据是什么)、所有权(谁负责资源)、借用(怎么访问数据)、生命周期(数据活多久)、trait(能做什么)
the book: https://doc.rust-lang.org/book the std lib: https://doc.rust-lang.org/std/index.html
错误处理
错误是值。
错误是类型系统的一部分,不可被静默忽略。
错误通过enum实现(库类型Result<T,E>):
- 穷举:
match模式匹配穷举所有错误 - 传播:
?向上传播给调用方 - 组合:错误集之间需手动转换(
From/thiserror/anyhow) - 信息:E可以是任意类型,携带丰富错误信息
- 恢复:就地降级(
unwrap_or/unwrap_or_default)
评论