All Things Open 2015:Mozilla 的 Steve Klabnik 谈 Rus

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

史蒂夫·克拉布尼克是谁? 巨大的 Rails 提交者 (以及 更多 ),现在在 Mozilla 的 核心 Rust 团队 。什么是锈? 安全系统编程 ;或者,C 与 Haskell 交叉。

为什么我们这周要和史蒂夫聊天?因为他本周将在 All Things Open 上发表 演讲 ;因为 Rust 得到了很多关注 ;并且因为“用 Haskelly 进行系统编程”听起来 美妙又可怕又令人安心。

关于史蒂夫的一点

Rust 不是普通的语言,Steve 也不是普通的程序员。他 10 岁开始编程,在大学学习操作系统设计,然后通过英语研究生学习几乎 进入 了象牙塔学术界。如今,美国大多数现代语言系基本上都是研究哲学,或社会学,或语言学,或政治学,或十几个学科中的任何一个,其具体对象可能是用与该系相关的语言编写的。换句话说,“英语”是 Deep Thought 的封面;而史蒂夫在软件工程方面的职业轨迹表明,他确实没有停止过深入思考。

那么“深度思考”的软件工程师是做什么的呢?很简单:使用 Rails, 让它变得更好 ,超越 MVC,通过 ORM,超越手握,直到你回到金属,思考计算机实际上在计算什么。对于史蒂夫来说,冯·诺依曼的冒险也是一次回家:在我们的采访中,他将他对 Rust 的兴趣描述为回到他曾经参与过的世界(当时他在大学里使用 C 及其后代构建操作系统)。

Rust 是闪亮的(而且是安全的)

我没有用过 Rust。我玩过 C,但它在游乐场之外有点可怕——不想变成下一个 Heartbleeder 或 Shellshocker( Aleph One 的著名作品 非常易读,以至于 有人 肯定会完全粉碎任何堆栈-可编译的 C 代码创建)。 Rust 的承诺?

Rust 是一种系统编程语言,运行速度极快,几乎可以防止所有段错误,并保证线程安全。

嗯,好吧,rust-lang.org,这就是你说的。但让我们具体一点:究竟是什么让 Rust 安全——考虑到它 确实 允许直接内存访问?

史蒂夫(他还撰写了出色的 Rust 官方文档 )在我们的聊天中给出了快速的回答。编译器遵循特定规则来防止计划外的内存访问,即:

  1. 迭代器失效(Rust 允许您仅在循环中引用不可变向量)

  2. 缓冲区溢出(Rust 编译器不会编译没有始终严格分配每个内存地址 所有权 的代码)

  3. 免费后使用(所有资源都有明确的生命周期)

因此,设计理念大致是:不是让语言设计者让编译器找出您 没有 编写内存安全代码的地方,程序员的工作是向编译器证明她的代码 内存安全的。采用相同的方法来清理输入:编写 允许正 则表达式比 拒绝正则 表达式要容易得多,因为前者的可能性空间是受控的,而后者是无界的。任何你 可以 让编译器检查的东西,你都 应该 让编译器检查。 (有关 Rust 的所有权系统的更多信息,请查看 官方文档中史蒂夫的三联画 。)

现在,有一些方法可以绕过这些检查——即使是相对偏执的垃圾收集 Java 平台仍然包含(官方未记录的) sun.misc.Unsafe API (尽管 时间不会太长 )。但是,Steve 指出,这些很少有用,并且现有库中涵盖了这种控制较少的 DMA 可能有用的大多数情况。

他们称之为线程 安全 是有原因的

想想上面的内存管理规则。是的,他们阻止了漏洞利用;但是 内存访问问题也是大多数并发问题的背后原因 。考虑竞争条件(例如,银行账户中的余额);然后考虑,“如果该账户余额始终只有一个所有者怎么办?”那么,如果某个非所有者先访问该资源就没有关系了。结果可预测;竞争条件无效。

当然,Rust 中有关并发的细节要复杂一些, Steve 可以比我更好地解释它们

在某种意义上,我并不完全理解(但希望能在 ATO 学习!)Rust 通过 异常复杂的类型方法 实现安全。 (类型论描述了 语言设计 ,甚至可能是 最深层次的所有数学 。通常,compsci-deep 的东西,比如 Lisp,与 processor-deep 的东西,比如汇编或 C 相去甚远。但是现在有了 Rust,我们可以拥有两者, ...)

您也可以进行系统编程

所有这些听起来很不错,但对我们这些可怜的内存管理实际完成工作比构建操作系统开发人员来说可能有点吓人。或者无论如何,这就是当史蒂夫开始解释 Rust 的编译器规则时我的反应。

但别担心,他说:Rust 实际上对系统编程新手(很好,就像我一样)超级友好。 Rust 文档对 堆栈和堆 以及 Rust 在其他语言中的使用 有非常具体的介绍。我正在阅读 Bryant 和 O'Hallaron 的精彩 计算机系统:程序员的视角 ,当然还有经典的 K&R

事实上,今天关于 Rust 最让史蒂夫兴奋的三件事可能有助于简化向 Rust 和一般系统编程的过渡。第一个是 作用域线程 ,通过允许您安全地引用父堆栈帧来简化(和安全化)并发编程。第二个是 Rumprun unikernel ,它允许您编写符合 POSIX 标准的应用程序,而无需依赖整个标准 Rust 库。第三, Rust 语义的形式化 ,将使 Rust 安全承诺的正式证明(或反证明)成为可能,这应该(假设结果是积极的)让开发人员对编译器检查有足够的信心,他们不需要担心细节。

但我再次听到 Steve 的 Rust 简介 也将涵盖其中的一些内容。因此,如果您在 10 月 19 日至 20 日(下周是)在罗利,您应该完全去听他的演讲。史蒂夫 不是唯一一位出色的演讲者 ,我们将在那里提供一个展位和几百本精美印刷的 指南 (我们免费赠送)。我们甚至有一个 20% 的折扣代码 ——DZONE20—— 而且 注册 已经很便宜了。我们都应该边喝冰茶边出去玩,学习安全系统编程和一百个其他主题。

所以在 All Things Open 查看 Rust 和 Steve 的演讲 以及其他所有内容。希望在那里见到你!