目录
- [一、Binary 项目(可执行程序)](#一、Binary 项目(可执行程序))
-
- [1. 什么是 Binary](#1. 什么是 Binary)
- [2. 创建 Binary 项目](#2. 创建 Binary 项目)
- [3. 项目结构](#3. 项目结构)
- [4. 示例代码](#4. 示例代码)
- [5. 编译结果](#5. 编译结果)
- [6. 使用场景](#6. 使用场景)
- [二、Library 项目(库)](#二、Library 项目(库))
-
- [1. 什么是 Library](#1. 什么是 Library)
- [2. 创建 Library](#2. 创建 Library)
- [3. 项目结构](#3. 项目结构)
- [4. 示例代码](#4. 示例代码)
- [5. 在 Binary 项目中使用](#5. 在 Binary 项目中使用)
- [6. 编译结果](#6. 编译结果)
- [7. 使用场景](#7. 使用场景)
- [三、Procedural Macro 项目](#三、Procedural Macro 项目)
-
- [1. 什么是 Procedural Macro](#1. 什么是 Procedural Macro)
- [2. 创建 Procedural Macro](#2. 创建 Procedural Macro)
- [3. 项目结构](#3. 项目结构)
- [4. 示例宏](#4. 示例宏)
- [5. 使用方式](#5. 使用方式)
- [6. 使用场景](#6. 使用场景)
- [四、WebAssembly 项目](#四、WebAssembly 项目)
-
- [1. 什么是 WebAssembly](#1. 什么是 WebAssembly)
- [2. Rust Wasm 架构](#2. Rust Wasm 架构)
- [3. 示例代码](#3. 示例代码)
- [4. 编译](#4. 编译)
- [5. 前端调用](#5. 前端调用)
- [6. 使用场景](#6. 使用场景)
- 五、四种模板对比
- 六、如何选择
- [七、真实 Rust 项目结构](#七、真实 Rust 项目结构)
- 总结
开始玩玩 Rust 开发。
在 Rust 开发中,创建项目通常使用:
bash
cargo new project_name
或者使用 IDE(如 RustRover / VSCode Rust 插件)。
很多 IDE 在创建项目时会提供四种模板:
BinaryLibraryProcedural MacroWebAssembly

本文将详细介绍 Rust 四种项目模板的区别、项目结构、编译结果和使用场景。
一、Binary 项目(可执行程序)
1. 什么是 Binary
Binary 项目是 可执行程序项目。
编译后会生成 可以直接运行的二进制文件。
类似于:
| 语言 | 入口 |
|---|---|
| Go | main() |
| Java | main class |
| Python | 脚本入口 |
Rust Binary 项目必须包含:
rust
fn main() {
}
2. 创建 Binary 项目
bash
cargo new hello-rust
或者
bash
cargo new hello-rust --bin
3. 项目结构
hello-rust
│
├── Cargo.toml
│
└── src
└── main.rs
关键文件:
src/main.rs
4. 示例代码
rust
fn main() {
println!("Hello Rust!");
}
运行:
bash
cargo run
输出:
Hello Rust!
5. 编译结果
执行:
bash
cargo build
生成:
target/debug/hello-rust
Windows:
hello-rust.exe
6. 使用场景
Binary 项目通常用于:
- CLI 工具
- Web Server
- 爬虫
- DevOps 工具
- AI 推理服务
- 系统工具
例如很多著名 Rust 工具:
- ripgrep
- fd
- bat
二、Library 项目(库)
1. 什么是 Library
Library 项目是 Rust 库项目。
不会生成可执行程序,而是生成 供其他项目使用的代码库。
类似:
| 语言 | 库 |
|---|---|
| Java | jar |
| Python | package |
| Go | module |
2. 创建 Library
bash
cargo new my-lib --lib
3. 项目结构
my-lib
│
├── Cargo.toml
│
└── src
└── lib.rs
入口文件:
src/lib.rs
4. 示例代码
rust
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
5. 在 Binary 项目中使用
Binary 项目 Cargo.toml
toml
[dependencies]
my-lib = { path = "../my-lib" }
调用:
rust
use my_lib::add;
fn main() {
println!("{}", add(1,2));
}
6. 编译结果
target/debug/libmy_lib.rlib
或者
libmy_lib.so
libmy_lib.dylib
7. 使用场景
Library 项目适用于:
- 工具库
- SDK
- 数据库客户端
- Web 框架
- 通用算法库
Rust 生态很多核心库都是 Library:
- Tokio
- Serde
- Reqwest
- Axum
三、Procedural Macro 项目
1. 什么是 Procedural Macro
Procedural Macro 是 Rust 编译器宏扩展。
用于 在编译时生成代码。
常见形式:
#[derive(...)]
#[attribute]
macro!
2. 创建 Procedural Macro
首先创建 library:
bash
cargo new my-macro --lib
然后修改 Cargo.toml:
toml
[lib]
proc-macro = true
3. 项目结构
my-macro
│
├── Cargo.toml
│
└── src
└── lib.rs
4. 示例宏
Cargo.toml
toml
[dependencies]
syn = "2"
quote = "1"
proc-macro2 = "1"
src/lib.rs
rust
use proc_macro::TokenStream;
#[proc_macro_derive(Hello)]
pub fn hello_macro(_input: TokenStream) -> TokenStream {
let code = r#"
impl Hello {
fn hello() {
println!("Hello from macro");
}
}
"#;
code.parse().unwrap()
}
5. 使用方式
rust
#[derive(Hello)]
struct Test;
编译时自动生成代码。
6. 使用场景
Procedural Macro 常用于:
- 自动生成代码
- ORM
- Web 框架
- 序列化
例如:
- Serde 的
Serialize - Diesel 的
Queryable - Actix Web 的
#[get()]
四、WebAssembly 项目
1. 什么是 WebAssembly
WebAssembly(Wasm)是一种 浏览器运行的二进制格式。
Rust 可以编译为:
.wasm
并在浏览器执行。
2. Rust Wasm 架构
Rust
↓
wasm-pack
↓
WebAssembly
↓
Browser / Node.js
3. 示例代码
lib.rs
rust
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
4. 编译
bash
wasm-pack build
生成:
pkg/
├── wasm_demo_bg.wasm
└── wasm_demo.js
5. 前端调用
javascript
import init, { add } from "./pkg/wasm_demo.js";
await init();
console.log(add(1,2));
6. 使用场景
Rust Wasm 常用于:
- 浏览器高性能计算
- 图像处理
- 视频编辑
- 加密算法
- Web 游戏
例如:
- Figma
- Deno
- Cloudflare Workers
五、四种模板对比
| 类型 | 是否可执行 | 入口文件 | 用途 |
|---|---|---|---|
| Binary | 是 | main.rs | CLI、服务端、系统工具 |
| Library | 否 | lib.rs | 公共库、业务逻辑模块化 |
| Procedural Macro | 否 | lib.rs | 编译器宏,derive/attribute 宏 |
| WebAssembly | 否 | lib.rs | 浏览器 / Node / WASI |
六、如何选择
选择规则:
写程序:
Binary
写工具库:
Library
写编译宏:
Procedural Macro
浏览器运行 Rust:
WebAssembly
七、真实 Rust 项目结构
很多大型 Rust 项目会组合使用多个 crate:
project
│
├── cli
├── core
├── macros
└── web
例如:
- Bevy
就是典型的多 crate 架构。
总结
Rust 四种项目模板本质区别:
| 类型 | 作用 |
|---|---|
| Binary | 运行程序 |
| Library | 代码复用 |
| Procedural Macro | 编译期代码生成 |
| WebAssembly | 浏览器运行 |
简单理解:
bash
Binary = 程序
Library = 工具库
Macro = 编译器插件
Wasm = 浏览器Rust