Rust 入门 - RustRover 新建项目时四种项目模板对比

目录

  • [一、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 在创建项目时会提供四种模板:

  • Binary
  • Library
  • Procedural Macro
  • WebAssembly

    本文将详细介绍 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
相关推荐
故事和你911 小时前
sdut-程序设计基础Ⅰ-实验三while循环(1-10)
开发语言·数据结构·c++·算法·类和对象
直有两条腿1 小时前
【Spring Boot】原理
java·spring boot·后端
前端小D1 小时前
面向对象编程
开发语言·javascript
艾莉丝努力练剑1 小时前
静态地址重定位与动态地址重定位:Linux操作系统的视角
java·linux·运维·服务器·c语言·开发语言·c++
阿鑫_9962 小时前
后端-Python基础知识
后端
江湖十年2 小时前
MCP 官方 Go SDK v1.0.0 正式发布:Go 生态的模型上下文协议步入稳定时代
人工智能·后端·go
newbe365242 小时前
ImgBin CLI 工具设计:HagiCode 图片资产管理方案
前端·后端
茶杯梦轩2 小时前
HTTP核心:协议、状态码与请求方法详解
后端·网络协议·面试
咸蛋超超人2 小时前
下订单重复提交问题递进式解决方案案例
java·后端