一些区别

Rust:编译期重,保安全和高效;Go:编译期轻,保开发速度;C++:编译期灵活复杂,保极限性能。 怎么理解 意思是 Rust保证了安全 但是 Go C++等没有保证?

编译期

**Rust:**编译期严格检查,保证内存安全 + 线程安全

内存安全:编译器通过所有权(Ownership)、借用检查(Borrow Checker)在编译时杜绝空指针、悬垂指针、数据竞争等问题。

线程安全:类型系统确保并发访问的安全性(如 Send/Sync trait)。

fn main() {
    let s = String::from("hello");
    let r = &s;
    drop(s); // 编译错误:s 被引用时不能移动
    println!("{}", r);
}

Go: 编译期轻量,运行时安全(但非内存安全)

安全保证:

运行时安全检查:自动垃圾回收(GC)避免内存泄漏,但无法避免数据竞争。

简单性优先:语法简单,编译极快,适合快速开发。

代价:

无编译期内存安全机制(可能因并发访问导致数据竞争)。

GC 带来轻微运行时性能开销。

Go并不会阻止数据竞争 所以可能产生竞争的程序会正常运行,导致结果不确定,但是rust不可以运行

C++: 编译期灵活,性能极致,安全靠自觉

安全保证:

零成本抽象:手动管理内存/资源,性能最优。

可选的现代特性:智能指针(std::unique_ptr)、RAII 可提高安全性,但需开发者主动使用。

代价:

极易写出内存不安全代码(如悬垂指针、缓冲区溢出)。

编译期复杂(模板元编程、头文件依赖等)。

项目依赖管理

C++: 用 CMake 管理依赖和构建

Go: go.mod/go.sum 管理依赖 + 构建

Rust: Cargo 完全管理依赖 + 构建

c++的CMake管理

# 1. 声明从哪里获取 第三方库
FetchContent_Declare(
  fmt
  GIT_REPOSITORY https://github.com/fmtlib/fmt.git  # 源码仓库
  GIT_TAG 10.2.1                                   # 版本号
)

# 2. 下载并编译 fmt(如果是首次运行)
FetchContent_MakeAvailable(fmt)

# 3. 链接到你的项目
target_link_libraries(my_project PRIVATE fmt::fmt)

Rust的变量绑定

可变变量 (mut): 需手动同步(如用 Mutex)

不可变变量(默认):✅ 天然线程安全(只读)


let mut count = 0; // 可变
count += 1;        // 合法


let count = 0;     // 不可变
count += 1;        // 编译错误!不能修改不可变变量

允许同时存在多个 不可变引用(只读)。

这些引用 不能 和 可变引用 同时存在。

同一作用域内,只能有一个可变引用(独占访问)。

可变引用不能和不可变引用同时存在。


let mut s = String::from("hello");

let r1 = &mut s;
let r2 = &mut s; // 编译错误!已有可变引用

println!("{}, {}", r1, r2);

如果允许两个 &mut 同时修改 s,可能导致数据竞争(Data Race) rust不允许这样

Rust的函数返回值

语句: 带有;不能作为返回值

表达式: 不带有; 可以作为返回值 x + 1

loop和while

无条件循环 和 有条件循环

##match && enum