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
相关推荐
烂蜻蜓1 小时前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
2601_962055978 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
Lost of 程序猿9 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
q平面人10 小时前
【总工笔记】mindoc平板、桌面端笔记软件,发布到mindoc服务端
rust·tauri·华为平板·mindoc·总工笔记