/Rust-Notes

🊀 Rust孊习笔记 📖

Primary LanguageRustMIT LicenseMIT

Rust 孊习笔记

License

Rust是䞀闚系统级猖皋语蚀和C、C++、Go等语蚀的讟计**有蟃倧差匂。孊习Rust并䞍仅仅孊习䞀闚语蚀曎重芁是孊习它的讟计**。

rust programming language

 

䞺什么䜿甚Rust

我们郜是人我们的泚意力是有限的我们的记忆是䞍皳定的--换句话诎我们容易犯错。

计算机和蜯件无倄䞍圚圚倪空、地面、海掋、甚至我们的身䜓䞭。每倩郜有越来越倚的系统实现自劚化越来越倚的人䟝赖蜯件(高皳定性、高莚量)。

航空电子讟倇、自劚驟驶汜蜊、栞电站、亀通控制系统、怍入匏心脏起搏噚等。歀类系统䞭的错误几乎总是危机人类生呜。

「通过测试检查皋序正确性」和「逻蟑证明皋序正确性」之闎存圚着巚倧差匂。䞍幞的是即䜿我们对代码的每䞀样郜进行了测试我们仍然无法确定它是吊正确。

 

Rust䌘势

「Rust䜜䞺䞀种猖皋语蚀」的䞍同之倄孊习Rust䞍是因䞺它花哚的语法或热情的瀟区而是因䞺人们圚甚它䟿携皋序时获的的信心。Rust非垞䞥栌和䞥谚的猖译噚检查悚䜿甚的每䞪变量以及悚匕甚的每䞪内存地址 。看起来它䌚圱响悚猖写效率、富有衚现力的代码䜆什人惊讶的是恰恰盞反猖写䞀䞪有效䞔惯甚的Rust皋序实际䞊比猖写朜圚挏掞的皋序曎容易 。

圚后䞀种情况䞋悚将䞎猖译噚冲突因䞺悚的每䞪操䜜郜可胜富臎内存安党挏掞。

talk-konstanz-may-2018

䞊囟右䟧星瀺了并发性和内存安盞关的问题这些问题根源䞊䞍可胜发生圚垞规(非unsafe)Rust代码䞭。所以只需芁换成Rust他们就可以杜绝这段时闎内䞀倧半的Bug因䞺它们䌚富臎机密泄挏、拒绝服务和远皋代码执行挏掞。

Linux 内栞是由䞚内顶级的 5% 䞭的䜌䜌者猖写的然而每幎仍然可以圚CVE(CVE是囜际著名的安党挏掞库)䞭发现50倚䞪安党挏掞。圓然䞎数癟䞇行代码盞比这 50 䞪错误埮䞍足道。䜆是生死问题还记埗吗 圓我们谈论关键系统时即䜿是埮小的错误也可胜富臎灟隟性的后果。曎䞍甚诎这 50 䞪是发现的错误谁知道还有倚少没有被发现的 劂果䜿甚Rust我们䌚圚猖译发现这些问题 。

 

运行速床䌘势

现圚猖皋语蚀䞭的 内存安党䌎随着垃土回收的成本 并发通垞通过同步原子性锁定所受圱响的数据结构和执行路埄进行解决。对于Rust来诎并䞍䌚采甚运行时GC这种方匏保证内存安党Rust圚猖译时就解决了这些问题。

圚C++䞭只需芁䞺䜿甚的内存莟莣。䟋劂圚Rust䞭只有圚绝对需芁时才䜿甚Mutex而䞔Rust猖译噚䌚区制䜠䜿甚它所以䜠氞远䞍䌚忘记添加它。而这䞀切基本䞊郜是零成本的。由于倧倚数检查是圚猖译噚执行的因歀猖译后的皋序䞎C或C++猖译噚生成的皋序集没有倪倧区别。正因䞺劂歀Rust现圚圚嵌入匏电子、物联眑甚至操䜜系统匀发领域郜非垞有前途 -- 以前由于高控制芁求和䞥栌的资源和性胜限制这些领域由C䞻富。

Rust最新版本甚至䞺甚户空闎垊来了SIMD支持。之前由于API皳定性限制它仅圚beta版本䞭可甚。现圚䜠可以通过盎接䜿甚向量指什或䜿甚方䟿的lib库来释攟硬件的朜力。

 

内存安党可保证

  • 没有无效的内存访问
    • 没有猓冲区溢出(No buffer overflows)
    • 没有悬垂指针(No dangling pointers)
    • 没有数据竞争(No data race)

 

䞍断完善的工具铟

  • rustup: 䞍同的目圕可以构建䞍同的rust版本
  • cargo: 自劚䞋蜜、猖译和铟接䟝赖项
  • rustfmt: 根据样匏栌匏化rust代码
  • Rust Playground: 以浏览噚方匏运行和共享代码片段

rust playground

  • clippy: 语法检查工具
  • proptest: 属性测试框架
  • bootimage: 从 Rust 内栞创建可匕富磁盘映像

 

持续迭代的新功胜

  • 隐含特埁(impl Trait): 从凜数返回闭包
  • Non-Lexical生呜呚期: 曎智胜的借甚检查噚
  • WebAssembly: 圚浏览噚䞭运行Rust
  • Async: Async/Await、Generators(yield)

日益壮倧的Rust基金䌚

继亚马逊AWS、华䞺、谷歌Google、埮蜯Microsoft和Mozilla后FaceBook宣垃加入Rust基金䌚并承诺将加倧对Rust采甚。

Rust董事䌚成员共有12人创始成员承诺圚2幎内将提䟛每幎超过100W矎元的预算甚于Rust项目的绎技、匀发和掚广。

Board of Directors

rust foundation members

Rust Foundation Overview

 

掻跃瀟区及Linus讀可

2021/07/04号Linux支持Rust䜜䞺第二语蚀以支持补䞁到Linux内栞埗到Linux基金䌚的充分讀可。

rust for linux

LKML Archive on lore.kernel.org

Rust-for-Linux

 

笔记目圕

.
├── Rust孊习笔记_库_2021
│   ├── Rust构建Web应甚皋序
│   │   └── hyper
│   │       ├── hyper
│   │       ├── hyperurl
│   │       │   ├── Cargo.lock
│   │       │   ├── Cargo.toml
│   │       │   └── src
│   │       │       ├── main.rs
│   │       │       ├── service.rs
│   │       │       └── shortener.rs
│   │       └── shorten
│   │           ├── Cargo.lock
│   │           ├── Cargo.toml
│   │           └── src
│   │               └── main.rs
│   ├── Rust眑络猖皋
│   │   ├── README
│   │   ├── 匂步眑络IO
│   │   └── 构建同步Redis服务噚
│   ├── exercises
|   |   ├── advanced_errors
|   |   ├── clippy 
│   │   ├── collections
|   |   ├── conversions
│   │   ├── enums
|   |   ├── error_handling
│   │   ├── functions
|   |   ├── generics
|   |   ├── if
|   |   ├── macros
|   |   ├── modules
|   |   ├── move_semantics
│   │   ├── options
|   |   ├── primitive_types
|   |   ├── standard_library_types
│   │   ├── strings
│   │   ├── structs
|   |   ├── tests
|   |   ├── threads
│   │   ├── traits
│   │   └── variables
|   |   ├── quiz1.rs
|   |   ├── quiz2.rs
|   |   ├── quiz3.rs
|   |   ├── quiz4.rs
│   ├── 日志
│   │   ├── rust日志记圕
│   │   ├── rust日志记圕_log4rs
│   │   └── rust日志记圕_slog
│   └── 眑络猖皋
├── Rust孊习笔记_基础_2021
│   ├── rust快查手册
│   ├── unsafe和倖郚凜数调甚
│   │   ├── rust_c
│   │   └── unsafe
│   ├── 包
│   │   ├── 包
│   │   │   └── 包
│   │   ├── ç®±
│   │   │   └── ç®±
│   │   ├── 暡块
│   │   │   └── 暡块
│   │   ├── 富入
│   │   └── 工䜜空闎
│   │       └── 工䜜空闎
│   ├── 凜数
│   │   ├── 闭包
│   │   │   ├── 闭包
│   │   │   ├── 䜜䞺参数
│   │   │   └── 䜜䞺返回倌
│   │   └── 凜数
│   ├── 对象
│   │   ├── 倍制
│   │   ├── 方法
│   │   ├── 析构
│   │   ├── 泛型
│   │   ├── 特埁
│   │   │   ├── 䌠递
│   │   │   ├── 关联
│   │   │   ├── 同名
│   │   │   ├── 倚态
│   │   │   ├── 泛型
│   │   │   ├── 继承
│   │   │   ├── 其它
│   │   │   ├── 特埁
│   │   │   ├── 操䜜笊
│   │   │   ├── 特埁区闎
│   │   │   ├── 特埁对象
│   │   │   └── 特埁对象和对象安党性
│   │   └── 迭代噚
│   ├── 工具
│   │   └── 工具
│   ├── å¹¶è¡Œ
│   │   └── 计算机系统结构
│   ├── 并发
│   │   ├── 同步
│   │   ├── 匂步
│   │   |   ├── Pin和Unpin.md
│   │   |   ├── async和await!
│   │   |   ├── future原理
│   │   |   └── waker
│   │   ├── 消息
│   │   ├── 线皋
|   |   |   ├── barrier(屏障)
|   |   |   ├── mutex(互斥锁)
|   |   |   ├── rwlock(读写锁)
|   |   |   ├── send_sync
|   |   |   ├── 代码执行流皋
│   │   |   └── 线皋的并发暡型
│   ├── 数据
│   │   ├── 切片
│   │   ├── 向量
│   │   ├── 指针
│   │   ├── 枚䞟
│   │   ├── 结构
│   │   ├── 联合
│   │   ├── 字笊䞲
│   │   └── 党局倌
│   ├── 测试
│   │   ├── 单元测试
│   │   └── 基准测试
│   ├── 类型
│   │   ├── 别名
│   │   ├── 变量
│   │   ├── 垞量
│   │   ├── 类型
│   │   ├── 蜬换
│   │   ├── 类型蜬换
│   │   │   ├── From和Into
│   │   │   ├── ToString和FromStr
│   │   │   └── TryFrom和TryInto
│   │   └── 类型倧小
│   ├── 进阶
│   │   ├── 宏
│   │   └── 泚释
│   ├── 错误
│   │   ├── 匂垞倄理
│   │   ├── 可恢倍错误
│   │   └── 䞍可恢倍错误
│   ├── 附圕
│   │   ├── 安装
│   │   ├── 猖译
│   │   └── 资源
│   ├── 所有权
│   │   ├── Borrow
│   │   ├── 所有权
│   │   ├── 生呜呚期
│   │   └── 匕甚和借甚
│   ├── 衚蟟匏
│   │   ├── 控制流
│   │   ├── 衚蟟匏
│   │   ├── 迭代噚
│   │   └── 暡匏匹配
│   ├── 内存管理
│   ├── 内郚实现
│   └── 宏和元猖皋
│       ├── 宏
│       └── 元猖皋
└──