《Rust 下沉三部曲》序章 · 从 C++ 互调,到内核,到裸机
我翻了最近三个月的 Rust 招聘岗位,发现一个规律:写 Web 后端、写 CLI 工具、写 WebAssembly 的候选人,简历长得几乎一模一样——axum + tokio + sqlx,再加一个"用 Rust 重写了某某服务,性能提升 30%"。
这些人不是不优秀。而是太像了。这种简历到了 HR 那里就只能靠学历和公司背景来筛,没有亮点或特色的简历很难被 HR选中。
如果你真正想让面试官眼睛一亮、让自己的薪资直接跳一档的,是简历上出现这几个词:
FFI、内核模块、no_std、裸机、embassy。
主要原因是因为会这些的人,稀缺。
Rust 的学习曲线有个奇怪的现象:大家都在山脚下拼命卷所有权、生命周期、trait,好不容易翻过语法这座山,然后……就停在"能写业务"这个舒适区了。
再往下走一步,是三块公认的硬骨头:
这三件事,恰恰是 90% 的 Rust 教程绝口不提的。不是因为不重要,而是因为难写、难教、难懂。但现在有了 AI的帮助,会让你学起来更加快,针对性更快,这块的瓶颈将越来越小。
而"别人不愿意碰的地方",就是你的护城河。
很多人以为这三件事是三门互不相干的学问。其实不是。
我把它们画成一张能力地图,你一眼就能看懂它们的关系——同一条 unsafe 主线,从用户态一路下沉到裸机:
用户态互操作 内核态开发 裸机嵌入式
FFI / bindgen / cxx Rust for Linux no_std / embassy
───────────── ───────────── ────────────────
跨语言 ABI unsafe 安全抽象 裸机启动 & 链接脚本
所有权跨边界 内核内存/并发原语 中断 & 静态分配
安全桥接 cxx 字符设备驱动 async 运行时
└──── 公共底座:unsafe / #[repr(C)] / 内存布局 / 无 panic 越界 ────┘看到最底下那行了吗?
不管你是在调 C++ 库、写内核驱动,还是点亮一颗 LED,你都在跟同一组东西打交道:unsafe 边界怎么划、内存布局怎么对齐、panic 为什么不能乱飞、所有权跨过边界后归谁管。
学会第一块,后两块的地基就打好了。 这就是为什么我要把它们做成一个系列,而不是三篇孤立的文章。
从下一篇开始,每周一篇,我们按"用户态 → 内核态 → 裸机"的顺序往下沉:
篇 | 主题 | 你将亲手跑通 |
|---|---|---|
1 | bindgen 复用 C 生态 | 30 行 build.rs 把 SQLite 塞进 Rust |
2 | cxx 安全双向桥 | Rust ↔ C++ 双向调用 + 反向导出 |
3 | 第一个 Rust 内核模块 | QEMU 里 insmod 跑通 hello_rust |
4 | 字符设备驱动 | 手写一个可读写的 /dev/rustdev |
5 | no_std 裸机启动 | Blinky:点亮开发板第一颗 LED |
6 | embassy 异步固件 | 多任务并发 + 传感器 async 上报 |
7 | 三部曲复盘 | 一条主线,串起用户态/内核/裸机 |
7 周之后,你的简历上会多出那几个让面试官眼睛发亮的词。更重要的是,你会真正理解一件事——
语法人人会写,能跨过 unsafe 边界的人才值钱。
这个系列不追求"大而全",追求"跟着做就能会"。三块硬骨头啃下来,你对 Rust 的理解会和留在舒适区的人彻底拉开差距。
下一篇:《30 行 build.rs,我把整个 SQLite 塞进了 Rust》,我们正式开始下沉。