00.Rust 语言实战笔记 —— Rust 基本概念

3,246 阅读3分钟

从现在开始,我们正式踏入了 Rust 大陆,这篇广袤而神秘的世界,在这个世界中,将接触到很多之前都没有听过的概念:

  • 所有权、借用、生命周期
  • 宏编程
  • 模式匹配

Rust 语言特点

  • 高性能 - Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
  • 可靠性 - Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
  • 生产力 - Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

Rust 应用

Rust 语言可以用于开发:

  • 传统命令行程序 - Rust 编译器可以直接生成目标可执行程序,不需要任何解释程序。
  • Web 应用 - Rust 可以被编译成 WebAssembly,WebAssembly 是一种 JavaScript 的高效替代品。
  • 网络服务器 - Rust 用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序。
  • 嵌入式设备 - Rust 同时具有 JavaScript 一般的高效开发语法和 C 语言的执行效率,支持底层平台的开发。

Rust 语言初印象

// Rust 程序入口函数,跟其它语言一样,都是 main,该函数目前无返回值
fn main() {
   // 使用let来声明变量,进行绑定,a是不可变的
   // 此处没有指定a的类型,编译器会默认根据a的值为a推断类型:i32,有符号32位整数
   // 语句的末尾必须以分号结尾
   let a = 10;
   // 主动指定b的类型为i32
   let b: i32 = 20;
   // 这里有两点值得注意:
   // 1. 可以在数值中带上类型:30i32表示数值是30,类型是i32
   // 2. c是可变的,mut是mutable的缩写
   let mut c = 30i32;
   // 还能在数值和类型中间添加一个下划线,让可读性更好
   let d = 30_i32;
   // 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
   let e = add(add(a, b), add(c, d));

   // println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
   // 该函数将指定的格式化字符串输出到标准输出中(控制台)
   // {}是占位符,在具体执行过程中,会把e的值代入进来
   println!("( a + b ) + ( c + d ) = {}", e);
 }

 // 定义一个函数,输入两个i32类型的32位有符号整数,返回它们的和
 fn add(i: i32, j: i32) -> i32 {
   // 返回相加值,这里可以省略return
   i + j  // 不要为 i+j 添加 ;,这会改变语法导致函数返回 () 而不是 i32
 }

输出结果

( a + b ) + ( c + d ) = 90

有几点可以留意下:

  • 字符串使用双引号  ""  而不是单引号  '',Rust 中单引号是留给单个字符类型(char)使用的
  • Rust 使用  {}  来作为格式化输出占位符,其它语言可能使用的是  %s%d%p  等,由于  println!  会自动推导出具体的类型, 因此无需手动指定