1. Rust环境准备:从零搭建高效开发环境
作为一门系统级编程语言,Rust凭借其内存安全性和高性能特性,近年来在开发者社区中迅速崛起。无论是开发操作系统、游戏引擎,还是构建Web后端服务,Rust都能提供卓越的表现。但在开始Rust编程之前,一个正确配置的开发环境是必不可少的。本文将详细介绍如何在Windows、macOS和Linux三大主流操作系统上安装和配置Rust开发环境,并解决常见问题。
1.1 Rust安装的核心工具链
Rust的官方安装工具rustup是管理Rust版本和相关工具链的核心组件。它类似于Python的pyenv或Node.js的nvm,但专为Rust设计。rustup的主要功能包括:
- 安装和管理多个Rust版本(stable, beta, nightly)
- 管理不同平台的工具链(如交叉编译目标)
- 自动配置环境变量和路径
- 提供简单的更新机制
安装rustup时,它会自动安装以下关键组件:
rustc:Rust编译器,将Rust代码编译为机器码cargo:Rust的包管理器和构建系统rustdoc:Rust文档生成工具rust-lldb和rust-gdb:调试工具- 标准库文档
1.2 跨平台安装指南
Windows系统安装
在Windows上安装Rust时,最常见的问题是遇到"linker link.exe not found"错误。这是因为Rust需要Microsoft Visual C++构建工具才能正常工作。以下是完整的安装步骤:
- 首先安装Visual Studio 2019或更高版本,选择"使用C++的桌面开发"工作负载
- 从Rust官网下载并运行
rustup-init.exe - 在安装过程中选择默认选项(按回车键)
- 安装完成后,打开新的命令提示符窗口,验证安装:
bash复制
rustc --version cargo --version
注意:如果遇到链接器错误,请确保已安装Windows 10 SDK和英文语言包。可以通过Visual Studio Installer添加这些组件。
macOS/Linux系统安装
在Unix-like系统上安装更为简单,只需在终端中运行:
bash复制curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装完成后,按照提示将cargo的bin目录添加到PATH环境变量中。通常需要执行:
bash复制source $HOME/.cargo/env
1.3 配置国内镜像源
由于网络原因,国内用户可能需要配置镜像源以加速包下载和更新。常用的国内镜像源包括:
- 清华大学TUNA镜像源
- 中国科学技术大学USTC镜像源
- 上海交通大学SJTUG镜像源
配置方法如下:
- 创建或编辑
~/.cargo/config文件(Windows在%USERPROFILE%\.cargo\config) - 添加以下内容(以清华源为例):
toml复制[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
[net]
git-fetch-with-cli = true
1.4 IDE与编辑器配置
VS Code配置
VS Code是Rust开发的热门选择,推荐安装以下扩展:
rust-analyzer:提供代码补全、跳转定义等高级功能Better TOML:用于编辑Cargo.toml配置文件crates:帮助管理依赖版本CodeLLDB:提供调试支持
配置步骤:
- 安装VS Code和上述扩展
- 创建项目目录并初始化:
bash复制cargo new my_project cd my_project code . - VS Code会自动检测Rust环境并提示安装必要组件
JetBrains系列IDE
CLion和IntelliJ IDEA(安装Rust插件)也提供优秀的Rust支持:
- 安装IDE和Rust插件
- 配置工具链路径(通常自动检测)
- 启用
org.rust.cargo.evaluate.build.scripts实验性功能以获得更好的宏支持
1.5 项目结构与Cargo基础
Rust使用Cargo作为项目管理和构建工具。一个标准的Rust项目结构如下:
code复制my_project/
├── Cargo.toml # 项目配置和依赖声明
├── src/
│ ├── main.rs # 程序入口(二进制项目)
│ └── lib.rs # 库入口(库项目)
└── target/ # 构建输出目录
Cargo.toml示例:
toml复制[package]
name = "my_project"
version = "0.1.0"
edition = "2021" # Rust版本
[dependencies]
serde = "1.0" # 依赖声明
常用Cargo命令:
cargo new:创建新项目cargo build:编译项目cargo run:编译并运行cargo test:运行测试cargo check:快速检查代码(不生成可执行文件)cargo update:更新依赖cargo doc --open:生成并打开文档
1.6 交叉编译配置
Rust支持交叉编译到不同目标平台。例如,在x86_64 Linux上编译ARM Linux程序:
- 安装目标工具链:
bash复制
rustup target add armv7-unknown-linux-gnueabihf - 安装对应的链接器(各平台不同)
- 创建
.cargo/config文件配置链接器路径 - 使用
--target参数编译:bash复制
cargo build --target=armv7-unknown-linux-gnueabihf
1.7 调试与性能分析工具
调试工具
- LLDB:Rust官方推荐的调试器
- 安装:通常随Rust一起安装
- VS Code配置:使用CodeLLDB扩展
- GDB:传统Unix调试器
- 安装:
rustup component add rust-gdb - 使用:
rust-gdb target/debug/my_program
- 安装:
性能分析
- perf(Linux):
bash复制
cargo build --release perf record ./target/release/my_program perf report - flamegraph:
bash复制
cargo install flamegraph cargo flamegraph - criterion:基准测试库
toml复制[dev-dependencies] criterion = "0.3"
1.8 常见问题与解决方案
链接器问题
错误:error: linker link.exe not found
解决方案:
- 安装Visual Studio构建工具
- 确保英文语言包已安装
- 或使用GNU工具链:
rustup toolchain install stable-gnu
更新问题
错误:更新rustup时卡住或失败
解决方案:
- 设置镜像源
- 使用命令行强制更新:
bash复制
rustup self update rustup update
路径问题
错误:命令找不到
解决方案:
- 确保
~/.cargo/bin在PATH中 - 重新加载shell配置:
source ~/.bashrc或重启终端
版本兼容性
错误:使用了新版Rust特性但工具链版本过低
解决方案:
- 更新工具链:
rustup update - 或指定版本:
rustup override set nightly-2023-01-01
1.9 高级配置与优化
构建优化
- 并行编译:在
~/.cargo/config中设置:toml复制[build] jobs = 8 # 根据CPU核心数调整 - 链接时优化(LTO):
toml复制[profile.release] lto = true codegen-units = 1
自定义工具链
- 安装特定版本:
bash复制
rustup toolchain install nightly-2023-01-01 - 设置默认工具链:
bash复制
rustup default nightly - 项目级覆盖:
bash复制rustup override set nightly
1.10 Rust生态系统工具
- rustfmt:代码格式化工具
bash复制rustup component add rustfmt cargo fmt - clippy:代码检查工具
bash复制
rustup component add clippy cargo clippy - cargo-audit:安全漏洞检查
bash复制
cargo install cargo-audit cargo audit - cargo-watch:文件变更自动重建
bash复制
cargo install cargo-watch cargo watch -x check
1.11 容器化开发环境
对于团队项目或需要隔离的环境,可以使用Docker:
dockerfile复制FROM rust:latest
WORKDIR /usr/src/app
# 预装常用工具
RUN apt-get update && \
apt-get install -y lldb gdb && \
rustup component add rust-src rust-analysis clippy rustfmt
COPY . .
CMD ["cargo", "watch", "-x", "run"]
构建并运行:
bash复制docker build -t rust-dev .
docker run -it --rm -v $(pwd):/usr/src/app rust-dev
1.12 多项目管理与工作区
对于大型项目,可以使用Cargo工作区:
- 创建顶级
Cargo.toml:toml复制[workspace] members = [ "crate1", "crate2", "examples/*", ] - 每个子目录都是一个独立的crate
- 在根目录运行命令会影响所有成员
1.13 文档与学习资源
- 官方文档:
rustup doc --std:本地标准库文档rustup doc --book:本地《Rust程序设计语言》
- 在线资源:
- 社区:
1.14 持续集成配置
GitHub Actions示例:
yaml复制name: Rust CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- run: cargo check
- run: cargo test
- run: cargo clippy -- -D warnings
- run: cargo fmt -- --check
1.15 性能优化技巧
- 使用
jemalloc替代系统分配器:toml复制[dependencies] jemallocator = "0.3"rust复制use jemallocator::Jemalloc; #[global_allocator] static GLOBAL: Jemalloc = Jemalloc; - 避免不必要的拷贝,使用引用
- 使用
#[inline]提示编译器内联小函数 - 使用
slice::sort_unstable代替slice::sort(不需要稳定排序时) - 使用
capacity预分配集合大小
1.16 宏和构建脚本
构建脚本(build.rs)
在项目根目录创建build.rs可以执行自定义构建步骤:
rust复制fn main() {
// 设置环境变量
println!("cargo:rustc-env=BUILD_DATE={}", chrono::Local::now().to_rfc3339());
// 链接系统库
println!("cargo:rustc-link-lib=dylib=z");
}
过程宏
创建过程宏crate:
- 新建库项目:
bash复制
cargo new my_macros --lib - 修改
Cargo.toml:toml复制[lib] proc-macro = true [dependencies] syn = "1.0" quote = "1.0" - 实现宏:
rust复制use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, DeriveInput}; #[proc_macro_derive(HelloMacro)] pub fn hello_macro_derive(input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = input.ident; let expanded = quote! { impl HelloMacro for #name { fn hello_macro() { println!("Hello, Macro! My name is {}!", stringify!(#name)); } } }; TokenStream::from(expanded) }
1.17 异步编程环境
配置异步运行时(以tokio为例):
- 添加依赖:
toml复制[dependencies] tokio = { version = "1.0", features = ["full"] } - 基本使用:
rust复制#[tokio::main] async fn main() { let result = fetch_data().await; println!("Got: {:?}", result); } async fn fetch_data() -> Result<String, reqwest::Error> { reqwest::get("https://example.com") .await? .text() .await }
1.18 Web开发环境
使用axum框架搭建Web服务:
- 添加依赖:
toml复制[dependencies] axum = "0.6" tokio = { version = "1.0", features = ["full"] } - 基本示例:
rust复制use axum::{Router, routing::get, response::Html}; #[tokio::main] async fn main() { let app = Router::new() .route("/", get(|| async { Html("<h1>Hello, Rust!</h1>") })); axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()) .serve(app.into_make_service()) .await .unwrap(); }
1.19 GUI开发环境
使用egui创建即时模式GUI:
- 添加依赖:
toml复制[dependencies] eframe = "0.21" egui = "0.21" - 基本示例:
rust复制use eframe::egui; struct MyApp { name: String, } impl Default for MyApp { fn default() -> Self { Self { name: "Rust".into() } } } impl eframe::App for MyApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { ui.heading("My Egui App"); ui.horizontal(|ui| { ui.label("Your name: "); ui.text_edit_singleline(&mut self.name); }); ui.label(format!("Hello, {}!", self.name)); }); } } fn main() { let options = eframe::NativeOptions::default(); eframe::run_native( "My App", options, Box::new(|_cc| Box::new(MyApp::default())), ); }
1.20 嵌入式开发环境
配置嵌入式Rust开发:
- 安装目标工具链:
bash复制
rustup target add thumbv7em-none-eabihf - 添加依赖:
toml复制[dependencies] cortex-m = "0.7" cortex-m-rt = "0.7" panic-halt = "0.2" - 基本示例:
rust复制#![no_std] #![no_main] use cortex_m_rt::entry; use panic_halt as _; #[entry] fn main() -> ! { loop { // 嵌入式代码 } } - 使用
cargo-binutils进行嵌入式调试:bash复制
cargo install cargo-binutils rustup component add llvm-tools-preview cargo objdump --target thumbv7em-none-eabihf -- -disassemble -no-show-raw-insn
1.21 测试环境配置
Rust内置强大的测试支持:
- 单元测试(与代码同文件):
rust复制#[cfg(test)] mod tests { use super::*; #[test] fn test_add() { assert_eq!(add(2, 2), 4); } #[test] #[should_panic] fn test_fail() { panic!("This test should fail"); } } - 集成测试(在
tests/目录):rust复制use my_lib; #[test] fn integration_test() { assert_eq!(my_lib::add(3, 4), 7); } - 基准测试(使用
criterion):rust复制use criterion::{black_box, criterion_group, criterion_main, Criterion}; fn fibonacci(n: u64) -> u64 { match n { 0 => 1, 1 => 1, n => fibonacci(n-1) + fibonacci(n-2), } } fn criterion_benchmark(c: &mut Criterion) { c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20)))); } criterion_group!(benches, criterion_benchmark); criterion_main!(benches);
1.22 发布与打包
发布到crates.io
- 创建账号并获取API token
- 登录:
bash复制
cargo login <your-api-token> - 发布:
bash复制
cargo publish
构建可执行文件
- 静态链接(Linux):
bash复制
cargo build --release --target x86_64-unknown-linux-musl - Windows可执行文件:
bash复制
cargo build --release --target x86_64-pc-windows-gnu
构建Docker镜像
dockerfile复制FROM rust:1.67 as builder
WORKDIR /usr/src/app
COPY . .
RUN cargo install --path .
FROM debian:bullseye-slim
COPY --from=builder /usr/local/cargo/bin/my_app /usr/local/bin/my_app
CMD ["my_app"]
1.23 性能监控与日志
日志配置
使用env_logger:
toml复制[dependencies]
log = "0.4"
env_logger = "0.9"
rust复制use log::{info, warn};
fn main() {
env_logger::init();
info!("Starting up");
warn!("Something might be wrong");
}
运行:
bash复制RUST_LOG=info cargo run
性能监控
使用metrics库:
toml复制[dependencies]
metrics = "0.20"
metrics-exporter-prometheus = "0.10"
rust复制use metrics::{counter, histogram};
use metrics_exporter_prometheus::PrometheusBuilder;
fn main() {
let builder = PrometheusBuilder::new();
builder.install().expect("failed to install recorder");
counter!("requests", 1);
histogram!("request_time", 2.5);
}
1.24 安全配置
安全审计
- 使用
cargo-audit:bash复制
cargo install cargo-audit cargo audit - 检查不安全代码:
bash复制
cargo install cargo-geiger cargo geiger
安全编译选项
在Cargo.toml中:
toml复制[profile.release]
panic = "abort" # 减少二进制大小,提高安全性
codegen-units = 1 # 更好的优化
lto = true # 链接时优化
1.25 多语言交互
FFI(C接口)
- 创建
lib.rs:rust复制#[no_mangle] pub extern "C" fn add(a: i32, b: i32) -> i32 { a + b } - 构建静态库:
toml复制[lib] name = "mylib" crate-type = ["cdylib", "staticlib"] - C头文件:
c复制#ifndef MYLIB_H #define MYLIB_H int add(int a, int b); #endif
Python绑定
使用PyO3:
toml复制[lib]
name = "myrustlib"
crate-type = ["cdylib"]
[dependencies.pyo3]
version = "0.18"
features = ["extension-module"]
rust复制use pyo3::prelude::*;
#[pyfunction]
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[pymodule]
fn myrustlib(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(add, m)?)?;
Ok(())
}
构建:
bash复制maturin develop
1.26 云原生开发
Kubernetes Operator
使用kube-rs:
toml复制[dependencies]
kube = { version = "0.75", features = ["runtime", "derive"] }
k8s-openapi = { version = "0.16", features = ["v1_25"] }
tokio = { version = "1.0", features = ["full"] }
rust复制use kube::{Client, CustomResource};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(CustomResource, Debug, Serialize, Deserialize, Default, Clone, JsonSchema)]
#[kube(group = "example.com", version = "v1", kind = "MyResource")]
pub struct MyResourceSpec {
name: String,
replicas: i32,
}
#[tokio::main]
async fn main() -> Result<(), kube::Error> {
let client = Client::try_default().await?;
let crds = vec![MyResource::crd()];
kube::runtime::wait_for_ready_kinds(&client, crds).await?;
Ok(())
}
1.27 移动开发
Android开发
- 安装目标:
bash复制
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android - 创建NDK工具链
- 配置
build.rs处理JNI接口
iOS开发
- 安装目标:
bash复制
rustup target add aarch64-apple-ios x86_64-apple-ios - 构建静态库:
toml复制[lib] name = "myrustlib" crate-type = ["staticlib"] - 在Xcode中链接
.a文件
1.28 游戏开发
使用bevy引擎:
toml复制[dependencies]
bevy = "0.9"
rust复制use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_startup_system(setup)
.add_system(hello_world)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
fn hello_world() {
println!("Hello, Bevy!");
}
1.29 机器学习环境
使用tch-rs(PyTorch绑定):
toml复制[dependencies]
tch = "0.13"
rust复制use tch::{nn, Device, Tensor};
fn main() {
let device = Device::cuda_if_available();
let vs = nn::VarStore::new(device);
let mut net = nn::seq()
.add(nn::linear(&vs.root(), 784, 100, Default::default()))
.add_fn(|xs| xs.relu())
.add(nn::linear(&vs.root(), 100, 10, Default::default()));
let xs = Tensor::randn(&[64, 784], (tch::Kind::Float, device));
let ys = net.forward(&xs);
println!("{:?}", ys.size());
}
1.30 区块链开发
使用parity-scale-codec和substrate:
toml复制[dependencies]
parity-scale-codec = { version = "3.0", features = ["derive"] }
sp-core = { version = "6.0", default-features = false }
rust复制use parity_scale_codec::{Encode, Decode};
#[derive(Debug, Encode, Decode)]
struct MyStruct {
field1: u32,
field2: String,
}
fn main() {
let my_struct = MyStruct {
field1: 42,
field2: "Hello".into(),
};
let encoded = my_struct.encode();
println!("{:?}", encoded);
}
1.31 量化交易环境
使用ta(技术分析库):
toml复制[dependencies]
ta = "0.15"
rust复制use ta::{
indicators::MovingAverageConvergenceDivergence as Macd,
Next,
};
fn main() {
let mut macd = Macd::new(12, 26, 9).unwrap();
let data = vec![1.0, 2.0, 1.5, 3.0, 2.5, 4.0];
for close in data {
let value = macd.next(close);
println!("MACD: {:?}", value);
}
}
1.32 自动化测试环境
使用mockall进行模拟测试:
toml复制[dev-dependencies]
mockall = "0.11"
rust复制use mockall::automock;
#[automock]
trait MyTrait {
fn foo(&self, x: u32) -> u32;
}
#[test]
fn test_mock() {
let mut mock = MockMyTrait::new();
mock.expect_foo()
.with(predicate::eq(42))
.times(1)
.returning(|x| x + 1);
assert_eq!(43, mock.foo(42));
}
1.33 代码生成与元编程
使用quote和syn:
rust复制use quote::quote;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(Hello)]
pub fn hello_macro(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let name = input.ident;
let expanded = quote! {
impl #name {
fn hello(&self) {
println!("Hello, {}!", stringify!(#name));
}
}
};
proc_macro::TokenStream::from(expanded)
}
1.34 嵌入式数据库
使用rusqlite:
toml复制[dependencies]
rusqlite = { version = "0.28", features = ["bundled"] }
rust复制use rusqlite::{Connection, Result};
fn main() -> Result<()> {
let conn = Connection::open_in_memory()?;
conn.execute(
"CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL)",
[],
)?;
conn.execute(
"INSERT INTO users (name) VALUES (?1), (?2), (?3)",
["Alice", "Bob", "Charlie"],
)?;
let mut stmt = conn.prepare("SELECT id, name FROM users")?;
let rows = stmt.query_map([], |row| {
Ok((row.get::<_, i32>(0)?, row.get::<_, String>(1)?))
})?;
for row in rows {
let (id, name) = row?;
println!("User {}: {}", id, name);
}
Ok(())
}
1.35 网络编程
使用tokio进行异步网络编程:
toml复制[dependencies]
tokio = { version = "1.0", features = ["full"] }
rust复制use tokio::net::TcpListener;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (mut socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buf = [0; 1024];
loop {
let n = match socket.read(&mut buf).await {
Ok(n) if n == 0 => return,
Ok(n) => n,
Err(e) => {
eprintln!("failed to read from socket; err = {:?}", e);
return;
}
};
if let Err(e) = socket.write_all(&buf[0..n]).await {
eprintln!("failed to write to socket; err = {:?}", e);
return;
}
}
});
}
}
1.36 密码学与安全
使用ring进行加密:
toml复制[dependencies]
ring = "0.16"
rust复制use ring::{rand, signature};
use ring::signature::KeyPair;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rng = rand::SystemRandom::new();
let pkcs8_bytes = signature::Ed25519KeyPair::generate_pkcs8(&rng)?;
let key_pair = signature::Ed25519KeyPair::from_pkcs8(pkcs8_bytes.as_ref())?;
let message = "Hello, world!";
let sig = key_pair.sign(message.as_bytes());
let peer_public_key = key_pair.public_key().as_ref();
let peer_public_key = signature::UnparsedPublicKey::new(
&signature::ED25519,
peer_public_key,
);
peer_public_key.verify(message.as_bytes(), sig.as_ref())?;
println!("Signature verified!");
Ok(())
}
1.37 并发与并行编程
使用rayon进行数据并行:
toml复制[dependencies]
rayon = "1.5"
rust复制use rayon::prelude::*;
fn main() {
let mut vec = vec![0; 1_000_000];
// 并行初始化
vec.par_iter_mut().enumerate().for_each(|(i, v)| {
*v = i as i32;
});
// 并行计算
let sum: i64 = vec.par_iter().map(|&x| x as i64).sum();
println!("Sum: {}", sum);
}
1.38 系统编程
使用nix进行Unix系统调用:
toml复制[dependencies]
nix = "0.24"
rust复制use nix::unistd::{fork, ForkResult};
use nix::sys::wait::wait;
fn main() {
match fork() {
Ok(ForkResult::Parent { child, .. }) => {
println!("Parent process, child pid: {}", child);
wait().unwrap();
}
Ok(ForkResult::Child) => {
println!("Child process");
}
Err(e) => eprintln!("Fork failed: {}", e),
}
}
1.39 科学计算
使用ndarray进行数值计算:
toml复制[dependencies]
ndarray = "0.15"
rust复制use ndarray::prelude::*;
fn main() {
let a = array![[1., 2.], [3., 4.]];
let b = array![[5., 6.], [7., 8.]];
let sum = &a + &b;
let dot = a.dot(&b);
println!("Sum:\n{}", sum);
println!("Dot product:\n{}", dot);
}
1.40 编译时计算
使用const fn:
rust复制const fn factorial(n: u32) -> u32 {
match n {
0 | 1 => 1,
_ => n * factorial(n - 1),
}
}
const FACTORIAL_5: u32 = factorial(5);
fn main() {
println!("5! = {}", FACTORIAL_5);
}
1.41 嵌入式脚本
使用rlua嵌入Lua:
toml复制[dependencies]
rlua = "0.19"
rust复制use rlua::{Lua, Result};
fn main() -> Result<()> {
let lua = Lua::new();
lua.context(|lua_ctx| {
let globals = lua_ctx.globals();
globals.set("x", 42)?;
let result: i32 = lua_ctx.load("return x + 1").eval()?;
println!("result = {}", result);
Ok(())
})
}
1.42 硬件交互
使用linux-embedded-hal与GPIO交互:
toml复制[dependencies]
linux-embedded-hal = "0.3"
rust复制use linux_embedded_hal::{Pin, Direction};
fn main() {
let mut pin = Pin::new(17).unwrap();
pin.set_direction(Direction::Out).unwrap();
pin.set_value(1).unwrap();
println!("GPIO 17 set to high");
}
1.43 音频处理
使用cpal进行音频I/O:
toml复制[dependencies]
cpal = "0.15"
rust复制use cpal::traits::{HostTrait, DeviceTrait, StreamTrait};
fn main() -> Result<(), anyhow::Error> {
let host = cpal::default_host();
