写点什么

Meta 将移动端消息基础设施从 C 迁移到 Rust

作者:Matt Foster

  • 2025-07-13
    北京
  • 本文字数:1075 字

    阅读完需:约 4 分钟

大小:514.42K时长:02:55
Meta将移动端消息基础设施从C迁移到Rust

Meta 正在用 Rust 逐步重写其移动端消息基础设施,替换掉工程师们口中“越来越难维护、越改越头疼”的老旧 C 代码。在 Meta Tech 播客第 76 期 中,Meta 消息基础设施团队详细介绍了他们的迁移动机:内存安全、开发者幸福感和长期可维护性是三大核心驱动力。


这次重写的核心库被编译进 Facebook、Messenger、Instagram、Instagram Lite、VR 头显和可穿戴设备的构建中,这些应用每日覆盖数十亿用户。


开发者们在回忆起老旧的 C 运行时代码时,脑海中浮现出来的关键词是“几百行起步的函数”和“手动记账式内存管理”:变量在文件顶部申请,在一千行之后才释放,哪怕是小规模的重构都会让人胆战心惊。


“意大利面代码只会生出更多意大利面。”


Meta 软件工程师 Elaine 这样吐槽,指出“破窗效应”让烂代码越来越烂。内存管理失误偶尔溜进生产环境,进而升级为难以调试的 on-call 事故。


Rust 的编译期所有权检查能一次性消灭整类错误,但团队把“日常幸福感”摆在与安全同等的高度:更干净的语义、rustfmt 的确定性格式化、rust-analyzer 的实时反馈,都让迭代更轻松、反馈更迅速。性能依然重要,但核心指标已转向开发者速度与信心。


Rust 的学习曲线相对陡峭,承担重写任务的大多数工程师此前几乎没有使用 Rust 的经验——Elaine 笑称自己最初只认得“那个螃蟹 logo”,后来竟连做梦都在想 move 关键字。为了加快上手,团队采用一对一走读代码、耐心细致的代码审查等方式。


Meta 的开放代码文化也帮了大忙:把问题抛给专门的 Rust 工作组,很快就能得到专家级的解答。这种文化将原本陡峭的学习曲线变成了一场集体冒险,而非单打独斗的难关。


工具链的改进也延伸到了线上运维。如今工程师可以在 C/Rust 混合代码里设置断点,看调试器无缝跳入 Rust 帧,移动端的崩溃日志也能完整符号化——几个月前还无法做到这样。


随着更愉悦的工作流、更快的反馈以及更安全的重构逐步落地,工程师们表示修改代码时更有底气了。工程师 Buping 表示,Rust 的编译期检查让他能够更轻松地定位并修复问题。


Rust 工作组已经吸引了全公司希望将 Rust 应用于移动端的工程师。尽管长期路线图尚未公开,但内部日益高涨的兴趣已经说明了一切。


Meta 团队认为,目前对迁移所节省的时间进行量化还为时尚早,但走在前面的公司已给出了积极的信号。Cloudflare 报告称开发速度更快、代码更易理解;谷歌从 C++ 迁移到 Rust 后也发现,用 Rust 写代码、做 Code Review、构建系统所需精力都更少了。这些案例共同表明:开发者体验——而不仅是裸性能——正在成为选择编程语言和工具链的决定性因素。


原文链接

https://www.infoq.com/news/2025/07/meta-rust-dx/

2025-07-13 17:226317

评论

发布
暂无评论

learn go with tests 学习笔记(二) 数组与切片

Geek_4z9ami

Go 语言

learn go with tests 学习笔记(三) 指针和错误

Geek_4z9ami

Go 语言

learn go with tests 学习笔记(四)依赖注入

Geek_4z9ami

Go 语言

话题讨论 | 特朗普正式封禁微信,iPhone 和微信二选一?

InfoQ写作社区官方

写作平台 话题讨论

Executor看不懂?教你如何盘它

Edison

后端 线程池

MySQL事物-学习笔记

Edison

MySQL 数据库 数据库事务

字符串匹配 - Sunday算法

Geek_4z9ami

数据结构与算法 字符串匹配算法

learn go with tests 学习笔记(六)进程同步

Geek_4z9ami

Go 语言

《effective-go》 学习笔记

Geek_4z9ami

Go 语言

疫情之年 下半年区块链应用落地会加速么?

CECBC

区块链 场景应用落地

Python爬取微信公众号文章保存到数据库

wjchenge

我是如何参与硅谷顶级开源项目并赚得2500美金

阿水

硅谷 Minio

Web 开发必须掌握的三个技术:Token、Cookie、Session

华为云开发者联盟

HTTP Token web开发 session Cookie

Netty之旅:你想要的NIO知识点,这里都有!

一枝花算不算浪漫

Netty nio

learn go with tests 学习笔记(七)反射

Geek_4z9ami

反射 Go 语言

RocketMQ源码解析-开篇

Edison

RocketMQ 中间件

learn go with tests 学习笔记(五)并发

Geek_4z9ami

Go 语言

零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品

代码制造者

编程 低代码 行业资讯 零代码

政策加持迎来区块链技术应用“红利期”

CECBC

nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

谙忆

learn go with tests 学习笔记(一) hello world

Geek_4z9ami

Go 语言

消息疯狂堆积!RocketMQ出Bug了?

Edison

RocketMQ 中间件

企业网站搭建避坑指南

姜奋斗

网站 新手指南 企业 网站搭建 避坑

人生修炼秘籍

xiaoboey

时间管理 人生修炼 知行合一 熵增 时间复利

用户体验(UX)设计≠用户界面(UI)设计

刘华Kenneth

敏捷 设计 UX 用户体验

“啰嗦”是成事唯一正确的方法

霍太稳@极客邦科技

团队管理 个人成长 团队协作 沟通

500行代码写一个俄罗斯方块游戏

程序员生活志

关于微服务架构思考

Axe

数据采集能力受限?企业数字化运营如何迈出第1步

易观大数据

以区块链为基础 通证经济是下一代互联网的数字经济

CECBC

区块链 落地应用

踩坑记 | Flutter升级影响了NestedScrollView?

哈利迪

android

Meta将移动端消息基础设施从C迁移到Rust_编程语言_InfoQ精选文章