惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
D
DataBreaches.Net
罗磊的独立博客
博客园 - 司徒正美
Last Week in AI
Last Week in AI
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
The GitHub Blog
The GitHub Blog
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
B
Blog
博客园 - 【当耐特】
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - 立体风

autohotkey2.0 Send keys参数分析 autohotkey2.0 盲从模式 windows 10 下 vscode 编写编译一个 nana c++ 库的示例程序 vscode 插件 cmake-tools 输出内容解读 Claude Code 处理中文乱码问题 python 启动器命令 py 答惑 windows 下 python 3.11 的版本问题 pip 安装 老版本 pytorch 的一个容易迷惑的错误 sentence transformer 例子及说明 Sentence Transformers 介绍 Jina Reranker 替代方案:改用 ModelScope 模型 Webnovel Writer 6.2.1 项目分析 windows 10 LTSC 版 安装 Terminal autohotkey2.0 脚本运行机制 windows wsl2 安装 gentoo 的步骤 windows 10 LTSC版 打开 wsl2 autohotkey 提示词 编译安装最新版 perl rust 和 go 语言的核心目的 用 vim 查看文件的格式和编码 throughput 和 efficient 词义 python 以字符数量分割文档 (三) python 以字符数量分割文档 (二) python 以字符数量分割文档 (一) GNU Bash 参考手册(中文版)(六) GNU Bash 参考手册(中文版)(五) GNU Bash 参考手册(中文版)(四) GNU Bash 参考手册(中文版)(三) GNU Bash 参考手册(中文版)(二) GNU Bash 参考手册(中文版)(一)
rust 做到“快并且安全” 的逻辑思路
立体风 · 2026-08-10 · via 博客园 - 立体风

Rust 能做到“快并且安全”,核心逻辑不是靠运行时检查,而是把大量安全问题提前移动到编译阶段解决。它的设计哲学可以概括为:

用编译器理解程序的资源生命周期,让程序员获得 C/C++ 的控制力,同时避免 C/C++ 常见错误。

传统语言通常是在“性能、安全、开发效率”三者之间取舍:

C/C++
性能 ★★★★★
安全 ★★☆☆☆
开发难度 ★★★★☆

Java/Python/Go
安全 ★★★★☆
开发效率 ★★★★★
性能 ★★★☆☆

Rust
性能 ★★★★★
安全 ★★★★★
开发难度 ★★★★☆

Rust 的关键突破是:把安全机制放在编译器,而不是运行时。


1. 第一原则:零成本抽象(Zero-cost Abstraction)

Rust 的核心理念:

高级语言特性不应该带来额外运行成本。

例如 C:

for(int i=0;i<len;i++){
    sum += array[i];
}

程序员自己保证:

  • i 不越界
  • array 有效
  • 内存没释放

Rust:

for x in array.iter() {
    sum += x;
}

看起来高级,但编译后接近:

for(i=0;i<len;i++)

没有:

  • 虚拟机
  • GC
  • 运行时边界检查(很多情况下优化掉)
  • 动态分配

所以:

Rust代码
  |
  v
LLVM优化器
  |
  v
机器码

最终就是普通高速机器码。


2. 第二原则:所有权系统替代垃圾回收

这是 Rust 的核心。

传统语言:

程序员分配内存
        |
        v
GC寻找垃圾
        |
        v
释放

例如 Java:

Object obj=new Object();

什么时候释放?

交给 GC。

缺点:

  • GC暂停
  • 内存占用增加
  • 不确定延迟

Rust:

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

编译器知道:

创建 s
 |
 |
离开作用域
 |
释放内存

直接生成:

allocate
...
free

没有 GC。

所以:

性能:
Rust ≈ C++

安全:
Rust > C++

3. 第三原则:借用检查器(Borrow Checker)

Rust 最重要的创新。

问题:

为什么 C++ 容易崩?

因为:

多个地方同时修改同一块内存

例如:

线程 A:

读取 x

线程 B:

修改 x

产生:

Data Race

Rust规定:

规则1

多个读:

&x
&x
&x

允许。


规则2

一个写:

&mut x

必须独占。


所以:

错误代码:

let a=&x;
let b=&mut x;

编译失败。

编译器提前证明:

运行时不会发生数据竞争

于是:

不需要:

  • mutex(某些场景)
  • runtime检查
  • 防护代码

4. 第四原则:生命周期分析

Rust 不允许:

“引用一个已经消失的数据”。

C:

char* get(){
    char s[]="hello";
    return s;
}

返回:

已经销毁的内存地址

危险。

Rust:

fn get()->&str{
    let s=String::from("hello");
    &s
}

编译错误:

borrowed value does not live long enough

因为:

生命周期:

s:
|---------|

返回引用:
        |--------|

范围不匹配。


5. 第五原则:枚举 + 模式匹配保证正确性

例如处理网络状态:

C:

switch(status)

可能漏情况。

Rust:

match status {
    Connected => {},
    Disconnected => {},
}

如果少:

Timeout

编译器提醒:

non-exhaustive patterns

也就是说:

很多逻辑错误被变成编译错误。


6. 为什么 Rust 比 Go 快?

主要区别:

Go:

代码
 |
运行时(Runtime)
 |
GC
 |
机器码

存在:

  • GC开销
  • goroutine调度
  • runtime支持

Rust:

代码
 |
编译器
 |
机器码

运行时:

非常小。

因此:

Rust:

CPU性能
接近C++

Go:

性能优秀
但需要runtime

7. Rust 的安全成本在哪里?

代价:

学习成本

需要理解:

  • ownership
  • borrowing
  • lifetime
  • trait
  • async模型

例如:

C:

free(ptr);

简单。

Rust:

你必须考虑:

谁拥有它?
谁借用了它?
什么时候释放?

编译时间

Rust 编译器做大量分析:

代码
 |
类型检查
 |
借用检查
 |
生命周期推导
 |
LLVM优化
 |
机器码

所以大型项目编译较慢。


8. Rust 的整体设计图

可以总结:

             Rust程序

                 |
                 v

        编译器静态分析

     +-----------+-----------+
     |           |           |
 Ownership   Borrow     Lifetime
     |           |           |
     +-----------+-----------+

                 |
                 v

        保证没有很多内存错误

                 |
                 v

          LLVM优化

                 |
                 v

             机器码

                 |
                 v

       接近C/C++性能

最核心的一句话

Rust 的“快”和“安全”来自同一个设计:

把运行时需要做的安全检查,尽可能在编译阶段完成。

C++:

相信程序员
→ 快
→ 容易出错

Java/Go:

运行时保护
→ 安全
→ 有额外成本

Rust:

编译器证明程序正确
→ 安全
→ 运行时接近C++

这也是为什么 Rust 特别适合:

  • 操作系统
  • 浏览器引擎
  • 数据库
  • AI 推理基础设施
  • 高性能网络服务

因为这些领域最关心的就是:

“不能慢,也不能崩。”