MCPcopy Index your code
hub / github.com/daheige/rust-bible

github.com/daheige/rust-bible @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
559 symbols 808 edges 114 files 147 documented · 26%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

rust学习笔记

运行本实战的约束: - rust edition:基于rust edition = "2021" - rust版本要求:需要安装rust v1.58.0 以上版本 - 操作系统:建议使用linux系统(例如:ubuntu24.04或centos7.9+版本)或macOS系统。 - 如果使用的是windows系统,建议使用WSL方式安装ubuntu系统。

rust从入门到实战

  • part1 rust基础,thread concurrent编程初体验
  • part2 serde json序列化处理,yaml文件读取,log日志库基础操作
  • part3 redis,mysql,kafka和pulsar mq基本使用
  • part4 rust异步编程基础--tokio和async-std两种不同的异步操作库使用
  • part5 axum,actix-web,tide框架使用
  • part6 rust 依赖注入和clap命令终端使用
  • part7 rust实战(rust web/job/grpc)综合使用
  • part8 rust ffi调用

rust install

参考文档: - https://www.rust-lang.org/zh-CN/tools/install - https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html

安装步骤:(以linux系统为例,这里我使用的是ubuntu系统)

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

如果上述安装过程中比较慢,还可以使用如下方式安装rust。也就是说,第一次安装 rustup 的时候,如果按照官网教程 https://sh.rustup.rs 链接可能无法下载,可以先执行如下命令下载sh文件:

wget https://mirrors.ustc.edu.cn/misc/rustup-install.sh

然后把脚本中的 RUSTUP_UPDATE_ROOT 变量改为 https://mirrors.ustc.edu.cn/rust-static/rustup 接着再执行sh rustup-install.sh即可快速安装rust

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
sh rustup-install.sh

为了后续rust组件或工具快速升级,建议设置环境变量: vim ~/.bashrc (这里需要根据实际情况设置,对于centos系统来说执行 vim ~/.bash_profile)

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
export PATH="$HOME/.cargo/bin:$PATH"

执行source ~/.bashrc或者 source ~/.bash_profile 生效

rustup升级rust

rustup update

rust版本查看

rustc --version
cargo --version

rust 1.70.x以上版本的crates发布

需要添加--registry参数

cargo publish --registry crates-io

设置rust国内镜像

参考文档 - https://mirrors.ustc.edu.cn/help/rust-static.html - https://mirrors.ustc.edu.cn/help/crates.io-index.html

为了提高访问速度,建议设置环境变量: vim ~/.bash_profile 或者vim ~/.bashrc

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
export PATH="$HOME/.cargo/bin:$PATH"

执行source ~/.bash_profile生效

在用户目录.cargo目录目录中创建config.toml

cd ~/.cargo/
touch config.toml

添加如下内容:

# 源码地址
[source.crates-io]
#registry = "https://github.com/rust-lang/crates.io-index"
# 指定镜像,可以根据实际情况选择不同的镜像
replace-with = 'ustc'

# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 中国科学技术大学
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"

[source.aliyun]
registry = "https://code.aliyun.com/rustcc/crates.io-index"
[net]
git-fetch-with-cli=true
[http]
check-revoke = false

或者直接使用如下配置:

[source.crates-io]
replace-with = 'mirror' # 直接替换为mirror为tuna镜像

[source.mirror]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

[net]
git-fetch-with-cli=true
[http]
check-revoke = false

使用rsproxy代理安装rust更快

步骤一:设置 Rustup 镜像, 修改配置 ~/.zshrc 或者 ~/.bashrc 或者 ~/.bash_profile 文件

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"

步骤二:安装 Rust(请先完成步骤一的环境变量导入并 source rc 文件或重启终端生效)

curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh

步骤三:设置 crates.io 镜像, 修改配置 ~/.cargo/config.toml,已支持git协议和sparse协议,Rust >=1.68 版本建议使用 sparse-index,速度更快。

# 使用rsproxy
[source.crates-io]
replace-with = 'rsproxy-sparse'

[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli=true
[http]
check-revoke = false

docker环境搭建参考

  • https://github.com/rust-lang/docker-rust/tree/master/1.77.2
  • https://github.com/daheige/pyo3-in-action/blob/main/Dockerfile

rust编辑器选择

可以使用vscode,clion都可以

vscode配置

需要安装好 rust-analyzer 插件,然后配置setting.json

{
    "files.eol": "\n",
    "editor.formatOnSave": true,
    "editor.fontSize": 13,
    "workbench.colorTheme": "Monokai",
    "rust.all_features": true,
    "editor.formatOnPaste": true,
    "editor.multiCursorModifier": "ctrlCmd",
    "editor.snippetSuggestions": "top",
    "[rust]": {
        "editor.defaultFormatter": "rust-lang.rust-analyzer"
    }
}

rust语言程序设计

  • rust程序设计第二版 https://kaisery.github.io/trpl-zh-cn/title-page.html
  • 配套代码 https://github.com/daheige/myrust

rust package发布方法

https://zhuanlan.zhihu.com/p/477390034

rust crates官网

https://crates.io/ 可以搜到很多有用的第三方包,比如axum,actix-web,tide,serde等等

rust std库

  • https://rustwiki.org/zh-CN/std/
  • https://doc.rust-lang.org/std

Extension points exported contracts — how you extend this code

Summary (Interface)
定义trait特征 [2 implementers]
part1/trait_demo/src/main.rs
Area (Interface)
这里定义的Area trait继承了Debug特征,然后接着定义了一个方法get_area [2 implementers]
part1/trait_object/src/main.rs
Playable (Interface)
定义特征trait 对于Playable必须用pub公开来修饰,这样别的地方use media 才可以使用Playable trait 在默认情况下,特征是私有的。要能够被其他模块或其他软件包调用,它们需要被声明为公有的。 [2 implementers]
part1/super_player/src/media.rs
Loadable (Interface)
定义trait [2 implementers]
part1/trait_bound/src/intro.rs
Summarizable (Interface)
trait 定义,定义一组方法行为 也可以给出默认实现的某个方法 [2 implementers]
part1/generics_trait_lifetime/src/main.rs
Logger (Interface)
定义接口 其实 pub Interface = Any + Send + Sync [1 implementers]
part6/shaku-inject-demo/src/main.rs
Logger (Interface)
手动处理依赖问题 [1 implementers]
part6/inject-demo/src/main.rs
IntoMapTrait (Interface)
定义IntoMap trait
part1/macro/into_map_demo/into_map/src/lib.rs

Core symbols most depended-on inside this repo

clone
called by 18
part7/grpc/grpc-demo/src/rust_grpc/hello.rs
open
called by 17
part1/compound_type/src/main.rs
write
called by 10
part6/inject-demo/src/main.rs
next
called by 8
part1/iterators/src/main.rs
append
called by 7
part1/link_demo/src/main.rs
get_unknown_fields
called by 4
part7/grpc/grpc-hello/src/rust_grpc/hello.rs
into_response
called by 3
part5/axum-demo/src/main.rs
clear
called by 3
part7/grpc/grpc-hello/src/rust_grpc/hello.rs

Shape

Function 275
Method 141
Class 101
Interface 22
Enum 20

Languages

Rust99%
C1%
C++1%

Modules by API surface

part1/generics_trait_lifetime/src/main.rs39 symbols
part7/grpc/grpc-hello/src/rust_grpc/hello.rs35 symbols
part1/trait_bound/src/intro.rs25 symbols
part7/grpc/grpc-demo/src/rust_grpc/hello.rs18 symbols
part7/grpc/grpc-demo/src/rust_grpc/app.grpc.hello.rs18 symbols
part5/axum-demo/src/main.rs16 symbols
part1/compound_type/src/main.rs15 symbols
part5/tide-demo/src/main.rs13 symbols
part1/memory/lifetime/src/main.rs13 symbols
part4/async-future-demo/src/main.rs11 symbols
part1/async_await/src/main.rs11 symbols
part1/advanced_concept/src/main.rs11 symbols

Datastores touched

(mysql)Database · 1 repos

For agents

$ claude mcp add rust-bible \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact