StackSense ← 回到地图
系统基础 / LANG

语言 · C++ / Rust / Go

C++ 是几乎所有基础设施(数据库、浏览器、游戏引擎、推理运行时)的实现语言,Rust 正在数据库、浏览器、操作系统等领域接替它的位置,Go 则主导了云原生、RPC 和 CLI 工具链。这个模块不求三语样样精通,而是把三者的心智模型放在一起看:内存和生命周期怎么管、并发和异步怎么调度、哪套工具链能真正把你的代码送到 CPU 上。

C++ 是几乎所有基础设施(数据库、浏览器、游戏引擎、推理运行时)的实现语言,Rust 正在数据库、浏览器、操作系统等领域接替它的位置,Go 则主导了云原生、RPC 和 CLI 工具链。这个模块不求三语样样精通,而是把三者的心智模型放在一起看:内存和生命周期怎么管、并发和异步怎么调度、哪套工具链能真正把你的代码送到 CPU 上。

学完后你应该能回答

C++

  1. RAII 到底解决了什么问题?为什么说它比 try/finally 或 defer 更彻底?
  2. unique_ptr / shared_ptr / weak_ptr 各自适用场景?shared_ptr 的引用计数是线程安全的,那它指向的对象呢?
  3. 移动语义相比拷贝能带来什么?什么情况下一个看起来该 move 的对象其实发生了拷贝?NRVO / RVO 又什么时候能完全消掉拷贝?
  4. 列举 3 个常见 UB(有符号溢出、越界、严格别名),编译器为什么可以因此删代码?
  5. memory_order_relaxed / acquire / release / seq_cst 区别是什么?什么时候可以放心用 relaxed?
  6. 异常 vs 错误码的工程权衡?为什么 Google、LLVM 和很多嵌入式项目都禁用异常?
  7. 虚函数的 vtable 实现是什么样的?final / override 对编译器去虚化(devirtualization)的实际帮助在哪?
  8. 两个线程分别写各自的计数器还会互相拖慢吗?怎么用 perf c2c 或 cache-miss 事件确认 false sharing?
  9. 模板实例化和 concept(C++20)有什么取舍?为什么很多库开始用 concept 替换 enable_if?
  10. C++20 coroutine 底层长什么样?promise_type、suspend point、coroutine_handle 各做什么?
  11. constexpr / consteval / if consteval 分别在编译期和运行期起什么作用?
  12. pimpl 惯用法解决了 ABI 稳定和编译隔离的哪些问题?代价又是什么?

Rust

  1. ownership + borrow checker 禁止了 C++ 能做的哪些操作?为什么能在编译期消掉 use-after-free?
  2. Lifetime 标注的作用是什么?什么时候要求你显式写 ‘a,什么时候会按 elision 规则自动推导?
  3. 为什么 Rust 不需要 garbage collector?RAII 和 ownership 如何一起保证资源释放?
  4. Send 和 Sync trait 分别说明了什么?为什么 Rc 不是 Sync 但 Arc 是?
  5. async/await + Future 的核心是什么?为什么 Rust async 是 zero-cost 但又需要 executor?Pin 又解决了什么?
  6. Unsafe Rust 开了哪些特权?什么时候不得不用 unsafe?Miri 能帮你发现哪些违规?
  7. Interior mutability(Cell / RefCell / Mutex)背后的类型系统契约是什么?
  8. trait object 的 fat pointer 长什么样?为什么不是所有 trait 都能 dyn(object safety 是什么)?
  9. declarative macro 和 procedural macro 分别适合什么场景?为什么 serde / tokio 离不开 proc-macro?
  10. 为什么错误是 Result<T, E> 而不是异常?? 操作符等价于什么代码,它和 Try trait 的关系?

Go

  1. Goroutine 比 OS 线程轻到什么程度?GMP 调度器怎么决定一次抢占?基于信号的异步抢占(1.14+)解决了什么?
  2. channel 的底层数据结构(hchan)是什么?buffered / unbuffered 在唤醒语义上有什么不同?
  3. GC 是 concurrent mark-and-sweep,write barrier 解决了什么问题?当前 STW 的典型耗时是多少?
  4. error 约定为什么不用异常?errors.Is / errors.As / wrap 机制为什么到 1.13 才引入?
  5. memory model 的 happens-before 是怎么定义的?channel send / receive 的同步语义保证了什么?
  6. context.Context 的正确用法?cancel 信号怎么穿透到底层 syscall?
  7. interface 的 itab 是什么?一次 interface 方法调用比普通函数调用贵多少?
  8. generics(1.18+)是如何实现的?为什么选 GC shape stenciling 而不是每类型一份特化?
  9. sync.Pool 解决了什么问题?它在 GC 时的行为是什么?
  10. sync.Map 和 map + Mutex 什么时候各自更快?为什么一般代码不该默认用 sync.Map?

跨语言对比

  1. 三种错误处理模型(C++ 异常 / Rust Result / Go error)对 API 设计和 ABI 稳定性各有什么影响?
  2. Rust async、C++ coroutine、Go goroutine 的运行时开销和心智模型差在哪?为什么 Rust / C++ 选 stackless、而 Go 选 stackful?
  3. C++ RAII、Rust ownership、Go defer 三种资源管理思路的异同?各自能 / 不能处理哪些场景?
  4. C++ template、Rust generics + trait、Go generics + type constraint 三套泛型机制的编译产物和错误提示差在哪?
  5. 三种语言的构建系统(CMake / Bazel、cargo、go build)在增量编译、依赖管理、可复现性上的工程取舍?

C++

核心概念

Lab

资料

工具

Rust

核心概念

Lab

资料

工具

Go

核心概念

Lab

资料

工具