Rust的一些零碎笔记

发布于 2017-11-01 17:39:23

(有待整理和更新)

这几天看了通过例子学 Rust,在Google Keep上记了一些零碎的笔记,现在把它们都整理到这里。虽然不想看中文版的,但是确实看起来比较快啊,也不影响理解的正确性。

Rust消除警告

先了解rust的“属性”概念,再要知道感叹号表示crate范围的全局属性。属性表示有三种不同的格式。

遇到的警告相关属性(虽然在编译的时候会有提示,还是做下记录吧):

#![allow(dead_code)]
#![allow(unused_variables)]
#![allow(overflowing_literals)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(unused_imports)]

Rust各种省略号

  • 两个点
    • 解构省略
    • 生成器省略
  • 三个点
    • 表示闭区间范围

Rust模块及库相关的关键字

use:释放路径到当前作用域;或者使用路径别名
pub:向外部开放
mod:既是定义又是使用声明;根据查找规则链接起了多个文件
extern crate:导入库

Rust编译的一些常见参数

rustc --crate-type=lib/bin --crate-name=<name>  --extern <lib-name>=<lib-file>

Rust属性的作用

  • 代码的条件编译[cfg]
  • 设置 crate 名称、版本和类型(二进制文件或库)[crate]
  • 禁用 [lint] (警告)
  • 启用编译器的特性[宏、全局导入(glob import))等]
  • 链接到一个非 Rust 语言的库
  • 标记函数作为单元测试(unit test)
  • 标记作为基准某个部分的函数

Rust测试

// 将一个函数标记为一个单元测试。该函数不能接受参数且返回空。
#[test]
// 将一个函数标记为 panic 测试。
#[should_panic]
// 忽略耗时的测试
#[test]
#[ignore]

// 当且仅当测试套件没有运行时,才条件编译
#[cfg(not(test))]
// 当且仅当测试套件运行时,才条件编译
#[cfg(test)]

Rust不安全代码

在 Rust 中,不安全代码块是用于避开编译器的保护策略;具体地说,不安全代码块主要有 4 方面内容:

  • 解引用裸指针
    • 原始指针(裸指针) * 和引用 &T 有类似的功能;但引用总是安全的,因为它们保证指向一个有效的数据,这得益于借用检查器(borrow checker)。
    • 解引用一个裸指针只能通过不安全代码块中来完成。
  • 通过 FFI 调用函数
  • 使用 std::mem::transmute 来强制转型(change type)
    • 从一种类型变到另一种类型的允许简单转换,但是两种类型必须拥有相同的大小和排列
  • 内联汇编(inline assembly)
comments powered by Disqus