3

Rust,云时代的 C++

 2 years ago
source link: https://zhuanlan.zhihu.com/p/400613469
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Rust,云时代的 C++

软件开发话题下的优秀答主

现有的编程语言非常多,大家都习惯了要在性能、表达力和内存安全之间取舍,直到 Rust 横空出世。

对于 Rust 这门语言,很多人可能都听过,但是没用过。实际上,早从 16 年起,Rust 已经连续六年霸榜,被 Stack Overflow 评选为最受开发者喜爱的语言

当然,它优点确实很多。不夸张地说,用过 Rust 的人都说各种好。

首先 Rust 没有历史包袱,采百家之长。从语言的内核看, Rust 重塑了对基本概念的理解。比如它清晰地定义了变量的生命周期,不仅摒弃GC这样的内存和性能杀手,还不用关心手动内存管理,让内存安全和高性能兼得。

其次,从语言的外观来看,它用起来很像 Python/TypeScript 这样的高级语言,表达能力一流,但性能丝毫不输于 C/C++,表达力和高性能二者兼得

所以,集表达力、高性能、内存安全于一身的 Rust ,在很多场景里都能大施拳脚。除了在传统的系统开发领域,如操作系统、设备驱动、嵌入式等方向高歌猛进之外,Rust 还在服务端高性能、高并发场景遍地开花。

目前国内外不少知名互联网或科技公司,都在采用 Rust 重构技术栈,比如字节的飞书、Google 的 Fuchsia 等,清华大学也开始让本科生学习 Rust 而不是 C/C++。在可预见的未来,Rust 或在大多数领域代替 C/C++,成为开发者的主力语言。

用起来就有多香,学起来就有多难。Rust 也是公认的难入门,学习曲线很陡峭。

除了普遍觉得不好学的所有权和生命周期以外,不同语言背景还会有不同的难点:

  • C 开发者,难点是类型系统和泛型编程;
  • C++ 开发者,难点主要在类型系统;
  • Python/Ruby/JavaScript 开发者,难点在并发处理、类型系统及泛型编程;
  • Java 开发者,难点在异步处理和并发安全的理解上;

我自己在学习 Rust 的过程中,也经历了从一知半解到了然在胸的过程。在大量阅读各种书籍资料(中文书推荐汉东的《Rust 编程之道》)之余,我还广泛阅读 Rust 标准库的源码,从这些源码中汲取第一手的营养。除此之外,我还大量撰写代码,除了在 crates.io 上发布的一些 crate 外,我还用 Rust 写了不少个人项目,涵盖从后端 API / 服务,到 Rust 和 swift / elixir / nodejs 等语言的交互,再到用 Rust 开发 web 前端。

在这个过程中,我总结了不少知识和经验,并且尝试着把这些知识经验传授给更多的人。我给我的同事们培训 Rust,也在我的公众号撰写 Rust 系列文章和在 bilibili 上发布《程序君的 Rust 培训》。我希望,通过这些努力,可以让更多的开发者了解和使用 Rust,帮助他们成为更好的程序员,为他们自己的职业生涯开辟更多的可能性。

但是这些内容还不够系统,不够全面,对初学者不够友好。我也一直在思考怎样把我掌握的 Rust 知识以一种更好的方式展现出来。

后来,我和极客时间合作推出了这个专栏**《陈天 · Rust 编程第一课》。我希望能通过这个专栏,给你一个系统的 Rust 的入门路径**,由浅入深,帮助你攻克 Rust 的主要难点,理解其设计理念:

承担着**「Rust 第一课」的使命,在每堂课我尽量讲得通俗易懂,把各个知识点类比到不同的语言中,设计了很多小而美的示例代码,引入 Rust 标准库的源代码进行分析,并且还绘制了大量的原理图。每一讲都遵循「表层知识 → 解读源码 → 底层设计」的思路,**力求帮你理解 Rust 繁多概念背后的设计逻辑。

具体来看,整个专栏分成 5 个模块:

1.前置知识篇

回顾软件开发的基础概念:堆、栈、函数、闭包、泛型、同步和异步等。这些是学好任意一门编程语言都要吃透的概念,因为编程语言不过是这些概念的具体表述和载体。

2.基础知识篇

深入浅出地探讨 Rust 变量的所有权和生命周期,对比几种主流的内存管理方式,包括 C 的手工管理、Java 的 GC、Swift 的 ARC 和 Rust 的独特方案。之后围绕所有权和生命周期,来讨论 Rust 的几大语言特性:函数式编程特性、类型系统、泛型编程以及错误处理。

3.进阶篇

Pascal 之父,图灵奖得主尼古拉斯·沃斯有一个著名的公式:算法 + 数据结构 = 程序,想随心所欲地使用 Rust 构建数据结构,深度掌握类型系统必不可少。所以将重点介绍 Trait、Trait Object、泛型、Unsafe Rust、 FFI,用 Rust 为自己的主力语言在关键路径上提供更高性能。

4.并发篇

学会用最合适的工具解决最合适的问题很重要。这个模块将带你从底层的 atomics 一路向上,历经 Mutex、Semaphore、Channel,直至 actor model,探索不同的并发手段。你会深度了解到,其他语言中被奉为圭臬的并发手段,在 Rust 里,只不过是一种并发工具。

5.实战篇

单纯掌握语言特性,能写出解决一些小问题的代码,就像在游泳池里练习冲浪,算是初窥门径;想要真正把语言融会贯通,还要靠大风大浪中的磨炼。这个模块会带你学习如何把 Rust 应用在生产环境中,以及如何用 Rust 解决实际问题。

有多干货,来看看目录吧。

再强调一点

专栏刚上线

早鸟 + 口令「Rust66666」

到手 ¥89,立省 ¥40

如果你是新人,只需 ¥59.9

https://time.geekbang.org/column/intro/100085301?code=o1daUH-%2FTLYRAGX65ys5tskQ9hr2la%2FelwtKzfNKzsg%3D (二维码自动识别)

谢谢大家的支持!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK