正式开始
宏编程
宏编程主要的工作就是把一棵语法树转换成另一颗语法树
一句话总结:宏编程的主要流程就是实现若干 From和 TryFrom
简单步骤
- 用 cargo new 库名 --lib 生成一个库
- cargo run --example 样例名字
给其他语言使用
- 创建一个 workspace
- 编辑Cargo.toml,添加workspace和memebers
Python
-
在workspace下使用 cargo new queryer-py --lib ,生成一个新的 crate
-
编辑它的Cargo.toml,如下
[package] name = "queryer_py" # Python 模块需要用下划线 version = "0.1.0" edition = "2021" [lib] crate-type = ["cdylib"] # 使用 cdylib 类型 [dependencies] queryer = { path = "../queryer" } # 引入 queryer tokio = { version = "1", features = ["full"] } [dependencies.pyo3] # 引入 pyo3 version = "0.14" features = ["extension-module"] [build-dependencies] pyo3-build-config = "0.14" -
在 src/lib.rs中使用 #[pyfunction]声明方法,使用#[pymodule]声明模块,并把声明的方法添加进去
-
queryer-py 目录下,创建 virtual env,然后用 maturin develop 构建 python 模块
python3 -m venv .env source .env/bin/activate pip install maturin ipython maturin develop
小节
新鲜知识点
格林斯潘第十定律
任何 C 或 Fortran 程序复杂到一定程度之后,都会包含一个临时开发的、不合规范的、充满程序错误的、运行速度很慢的、只有一半功能的 Common Lisp 实现。
关注点分离 概念(控制软件复杂度的法宝)
数据的解构也可以在分支上进行
Deref 和 DerefMut trait 允许类型在解引用时,可以解引用到其它类型
Trait 和实现 Trait 的 Struct 只要其中一个是自己定义的就可以避免孤儿规则