public:it:rust

RUST

  • 了解该语言的出生背景与适用环境:
    • Rust是一个由Mozilla主导开发的实验性跨平台编译型编程语言。它的设计准则为“安全,并发,实用”,支持函数式,并发式,过程式以及面向对象的编程风格。适用于系统编程.
  • 了解输入输入出流,文件流操作:
    • 标准输出: 使用宏 println!(“世界,你好”);, 或 std::io
    • 标准输入: std::io::stdin().read_line()
    • 文件: std::fs
  • 了解程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制:
    • A crate contains a tree of nested module scopes…
    • 一个源文件对应一个或多个modules.文件本身就是一个module.
    • 代码包含:A module without a body is loaded from an external file, by default with the same name as the module, plus the .rs extension.
      mod vec;// Load the `vec` module from `vec.rs`
      mod thread {
          // Load the `local_data` module from `thread/local_data.rs`
          // or `thread/local_data/mod.rs`.
          mod local_data;
      }
    • items 默认都是私有(除了一点:pub enum里的项默认也是pub),公开需要显式声明pub.visibility and privacy
    • 标准库依赖: rust 默认加载std标准库, 详见文档.
    • 外部库: 编译为.rlib格式, 用 extern crate 导入. rustc编译时库路径指定与gcc类似
    • use 可以绑定模块接口名到一个新的名字,方便使用,比如use std::sync::Mutex,之后就可以直接用Mutex这个短名字.
    • use,mod都受作用域影响.
    • 可使用官方提供的 Cargo 工具来方便工程依赖.
  • 了解该语言的基本数据类型,基本语法和主要语言构造,主要数学运算符和输入输出函数的使用
    • 变量绑定(variable bindings): let a = b; let mut somevalue = String::new(); 默认为常量(they’re immutable by default), 变量需标明mut
    • 变量绑定支持模板(patten)匹配, 类似erlang;
    • 基本数据类型: primitive-types
    • 条件: match statement, if a==b { } else { }. if也是表达式, 可被变量绑定let a= if b==c {b} else {c};
    • 循环: loop{}, for x in y{}, for( ; ;){}, while, continue, break.
    • expression-based language, 主表达式语言, 表达式始终返回一个值, rust 函数也属于表达式; 但是 let 语句不是表达式(属于声明);
    • enum 比较强大,感觉更类似tuple.
    • char 类型为32位无符号Unicode,UCS-4/UTF-32编码
    • str 类型为8位无符号array, UTF-8编码
    • 支持 type 自定义类型
  • 了解数组和其他集合类的使用:
    • Array: Vec<T>; vec! macro.
    • Slice FIXME
    • Tuple FIXME
  • 了解字符串的处理
    • 不同于老的语言,rust 基础字符串相关类型char,str默认就支持unicode.
    • String(默认utf8编码); 与str的转换 to_string().
    • 由于是utf8编码,所以str支持两种下标:按字节与按文字:
      let hachiko = "忠犬ハチ公";
      for b in hachiko.as_bytes() {
          print!("{}, ", b);
      }
      println!("");
      for c in hachiko.chars() {
          print!("{}, ", c);
      }
      println!("");
       
      // This prints:
      // 229, 191, 160, 231, 138, 172, 227, 131, 143, 227, 131, 129, 229, 133, 172, 
      // 忠, 犬, ハ, チ, 公, 
    • 由于是utf8编码,所以rust的str不需要null结尾,字符串本身也可包含null.
  • 了解该语言在面向对象,函数式编程,泛型,元编程等编程范式的特性
    • 并发:concurrency
    • OO: struct, impl, 没有方法重载,使用builder-pattern来替代重载.
    • OO: Drop接口, 类似c++析构函数
    • 暂时没有继承
    • 支持匿名函数,支持闭包;
    • 函数作为一种类型, 仍需指定参数与返回值, 类似C++函数指针:let mut myfun:fn(i32,i32)→i32;
    • 支持泛型(Generics):包括 函数与struct. 语法类似c++
    • 支持接口 trait 编程, 扩展了OO与泛型: 参数可声明为fn myfun<T:SomeMethod> (a:T){} 其中T:SomeMethod表示拥有接口SomeMethod的任意T.
  • 了解特有的语法糖
  • 了解该语言错误处理,调试方式以及对测试的支持
    • 没有 exception. error hadling
    • 方法调用可返回 Result, 如果未对 Result 进行处理, 编译器会警告;
    • Result 可有ok()等方法来方便进行错误处理.
    • 调试方式: gdb
    • 测试支持: cargo test
  • 了解该语言的内存分配机制或GC,线程,进程等运行时效率相关
    • 8-)不需要手动释放内存, 没有运行时GC,但可在编译期来保证内存安全!
    • Ownership: 所有权唯一;
    • 引用(reference, borrow),可以有多个不变引用,或一个可变引用,但不能有两种引用同时存在;引用生存期不能比所有者长;
    • 生存期(lifetimes), 可显式声明 'a , 'static ;
  • 了解该语言的编译/解释机制
  • 注释:
    // 两斜线为普通注释;  
    
    /// 三斜线支持markdown格式, 
    /// 三个斜线的注释可被 cargo doc 生成文档
  • public/it/rust.txt
  • 最后更改: 2021/07/07 15:17
  • oakfire