Rust Learning
References
- Julia、Rust、F#、Go编程语言游览和感想
- Rust, Julia, and Go_ Disruptive New Programming Languages Changing the Face of C
- 新兴的函数式编程语言(如 Elixir 或 Elm)
- 从实际应用角度来看,Rust更偏向于底层,旨在替换C语言与C++,Golang旨在替换Java与C#。
- Rust语言本身不依赖于虚拟机与GC,没有运行时,跨平台,主要靠一套所有权、生命周期、类型系统维护着语言的本身,语言高度抽象。
- Golang 语言需要依赖于GC,自动垃圾回收,自带协程,快速编译,跨平台。
- Rust 是一门入门门槛较高的语言,所有权与生命周期阻碍了不知多少的编程者。而go语言,入门较容易,学过类C语言同学,基本看一下语法就能入手写代码。
- Rust Book
- Rust by Example
- Rustlings Small exercises to get you used to reading and writing Rust code!
- The Rust Programming Language
- The Cargo Book
- The Rust Playground
- Rust.cc Rust语言中文社区
- Rust Force CN
- Rust in Motion Need to buy $39.99
Web
- Rocket is a web framework for Rust with flexibility, usability, or type safety.
- IRON extensible web framework for rust
GUI
- conrod An easy-to-use, 2D GUI library written entirely in Rust.
- druid Data-oriented Rust UI design toolkit.
- libui-rs Rust bindings to the minimalist, native, cross-platform UI toolkit
libui
- Are we GUI Yet?
Other
- [oeasy]教您玩转rust编程视频教程
- 使用Rust编写操作系统(一):独立式可执行程序
- 不能使用线程、文件、堆内存、网络、随机数、标准输出,或其它任何需要操作系统抽象和特定硬件的特性;
- 可以使用迭代器、闭包、模式匹配、Option、Result、字符串格式化,当然还有所有权系统。
- 需要创建一个独立于操作系统的可执行程序,被称作独立式可执行程序(freestanding executable)或裸机程序(bare-metal executable)。
- 独立式可执行程序并不能访问Rust运行时或crt0库,需要定义自己的入口点,即重写整个crt0库和它定义的入口点。
- Rust与go在网上吵的比较大区别是,Rust有泛型,而Go没有。
- 做网络服务选Go, 上手比较简单。做系统用Rust, 它就是未来的系统语言。
- 将Rust编译成库
- Rust初步(六):在C#中使用Rust组件
- Rust vs. C++:性能大比拼
- 如何利用科大源提速Cargo和Rust
- Writing an OS in Rust
- CS140E: Operating Systems Design and Implementation
- 一个Rust OS的专栏
- Julia 是新晋发布1.0版本的科学计算类语言,号称兼具C++、python、matlab的优点。
- 孩子的编程语言
- V 语言强势登顶 GitHub TOP1,难道要取 Go 而代之?
- vlang
Learn web
Key points
- 理解所有权:What is Ownership
- Copy
- Move
- Clone
- 理解引用和借用:References and Borrowing
- & 引用
- (&) 借用
We call having references as function parameters borrowing
- 我们称“将引用作为函数参数”为“借用”
- 解引用
数据竞争
对于所有的类型T和任意的生命周期参数‘a,都能衍生出两种类型:&’a T 和 &mut ‘a T。
&’a T 相当于T的读取器,持有T的读锁, &mut ‘a T 相当于T的写入器,持有T的写锁。
编译器里有一个工具borrowck,在编译时会自动检查这两种类型的使用情况,如果有非法的使用,就报错,不让你编译通过。同样地,当你手中还持有着对一个值的引用时,编译器不允许将其移动或者销毁。这样,就杜绝了野指针现象和数据竞争问题。
1 | let rb0 = &b; |
值传递
Rust 的默认的值的传递是:转移。不管是赋值还是函数调用时的参数和返回值,都是这样。
分类体系(taxonomy)
开放的分类,使用泛型;封闭的分类,使用枚举(ADT)。