编程开发需要掌握的基本概念

Rust 语言特性 - 图1
栈:因为所有的原生类型大小都是固定的,因此他们可以被分配到栈上。(字符串,数字,布尔类型,数组,元组,指针,引用,函数,闭包等)

编程语言的接口概念:

  • java:interface
  • swift 、objective-c:protocol
  • rust:trait

    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中借用或引用是一个概念)