编程开发需要掌握的基本概念
栈:因为所有的原生类型大小都是固定的,因此他们可以被分配到栈上。(字符串,数字,布尔类型,数组,元组,指针,引用,函数,闭包等)
编程语言的接口概念:
- java:interface
- swift 、objective-c:protocol
-
Rust 的编程风格
Rust 整体语法偏 C/C++ 风格:
函数体用花括号 {} 包裹
- 表达式之间用分号分割
- 访问结构体函数或者变量用点操作符:
.
- 访问命名空间或者对象的静态函数用双冒号运算符:
::
- 可执行体的函数入口是 main()
- Rust 支持宏编程,如
println!()
,派生宏:#[derive(Debug)]
实现了 Debug trait - Rust 变量默认是不可变的,如果需要修改变量的值,需要 mut 关键字
- Rust 支持死循环:loop
- Rust 的 for..in 循环支持迭代器
- Rust 支持模式匹配:
match
- Rust 通过
Result<T, E>
来处理错误(借鉴 Heskell)组织管理
箱(Crate)
“箱”是二进制程序文件或者库文件,存在于”包”中。
“箱”是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。
一个Rust项目也被成为一个 Crate包 (Package)
通过cargo new
命令创建一个 Rust 工程时,工程的实质就是一个包。
包必须由Cargo.toml
文件来管理,该文件描述了包的基本信息和依赖项。
Cargo 默认 src 目录下的 main.rs 文件为二进制箱(Crate)的根,编译后二进制箱与包名相同。模块 (Module)
通过mod
命令声明,Rust 的路径分隔符是::
。
所有权和生命周期
对于堆内存多次引用其他编程语言的处理:
- C/C++:需要开发者手动处理
- Java 等语言使用追踪式GC:有 STW 的问题
- Objective-C/Swift:ARC
所有权的游戏规则:
- 一个值只能被一个变量所拥有,这个变量被成为所有者
- 一个值同一时刻只能有一个所有者
- 当所有者离开作用域,其拥有的值将被丢弃
Rust 所有权的语义:
- Move:值或者传参会导致值 Move,所有权被转移,一旦所有权转移,之前的变量就不能访问。
- Copy:如果值实现了 Copy trait,那么赋值或传参会使用 Copy 语义,相应的值会被按位拷贝(浅拷贝),产生新的值。
- Borrow:(在Rust中借用或引用是一个概念)