“Rust 是系统编程的未来,C 是新的汇编程序”——英特尔一位首席工程师的演讲

在最近的开源技术峰会 (OSTS) 上 乔什·特里普莱特一位英特尔首席工程师表示,他的公司有兴趣在不久的将来让 Rust 与 C 语言“平起平坐”,C 语言在系统和低级开发领域仍然占据主导地位。 在他的演讲中 在“英特尔和 Rust:系统编程的未来”标题下,他还谈到了系统编程的历史、C 如何成为“默认”系统编程语言、Rust 的哪些特性使其优于 C,以及近期如何未来它可以在给定的编程领域完全取代 C。

“Rust 是系统编程的未来,C 是新的汇编程序”——英特尔一位首席工程师的演讲

系统编程是软件的开发和管理,它作为创建应用程序的平台,确保后者与处理器、RAM、I/O 设备和网络设备交互。 系统软件以接口的形式创建了一个特殊的抽象,帮助您创建应用程序软件,而无需深入了解硬件本身如何工作的细节。

Triplett 自己将系统编程定义为“任何不是应用程序的东西”。 它包括 BIOS、固件、引导加载程序和操作系统内核、各种内置低级代码和虚拟机实现等内容。 有趣的是,特里普莱特认为网络浏览器也是系统软件,因为浏览器早已不仅仅是“一个程序”,而是一个独立的“网站和网络应用平台”。

过去,大多数系统程序,包括 BIOS、引导加载程序和固件,都是用汇编语言编写的。 1960 年代开始进行为高级语言提供硬件支持的实验,导致出现了 PL/S、BLISS、BCPL 和 ALGOL 68 等语言。

然后,在 1970 年代,Dennis Ritchie 为 Unix 操作系统创建了 C 编程语言。 C 是用甚至没有类型支持的 B 编程语言创建的,它充满了最适合编写操作系统和驱动程序的强大的高级功能。 UNIX 的几个组件,包括它的内核,最终都是用 C 语言重写的。随后,许多其他系统程序,包括 Oracle 数据库、大部分 Windows 源代码和 Linux 操作系统,也都是用 C 语言编写的。

C 在这个方向上得到了巨大的支持。 但是究竟是什么让开发人员转向它呢? Triplett 认为,为了激励开发人员从一种编程语言切换到另一种编程语言,后者必须首先提供新功能而不丢失旧功能。

首先,该语言必须提供“足够令人印象深刻”的新功能。 “他再好不过了。 必须明显更好地证明工程师进行过渡所需的努力和时间,”他解释道。 与汇编语言相比,C 提供了很多东西。 它在某种程度上支持类型安全,通过高级构造提供更好的可移植性和性能,并生成总体上更具可读性的代码。

其次,该语言必须提供对旧功能的支持,这意味着在向 C 过渡的历史中,开发人员必须确保它的功能不亚于汇编语言。 Triplett 解释说:“一种新语言不能简单地变得更好,它还必须同样好。” 除了速度更快和支持汇编语言可以使用的任何数据类型之外,C 还具有 Triplett 所说的“逃生舱口”,即支持在其中插入汇编语言代码。

“Rust 是系统编程的未来,C 是新的汇编程序”——英特尔一位首席工程师的演讲

Triplett 认为,C 现在正在变成多年前的汇编语言。 “C 是新的汇编程序,”他说。 开发人员现在正在寻找一种新的高级语言,它不仅可以解决 C 无法解决的挥之不去的问题,还可以提供令人兴奋的新功能。 这种语言必须足够引人注目以迫使开发人员改用它,必须安全,提供自动内存管理等等。

“任何想要比 C 更好的语言,如果它真的想成为一个引人注目的替代品,就需要提供比缓冲区溢出保护更多的东西。 开发人员感兴趣的是可用性和性能,感兴趣的是编写不言自明的代码,用更少的行做更多的工作。 安全问题也需要解决。 易用性和性能与它齐头并进。 您为实现某些目标而编写的代码越少,您犯任何安全相关或非安全相关错误的机会就越少,”Triplett 解释道。

比较 Rust 和 C

早在 2006 年,Mozilla 的 Graydon Hoare 就开始将编写 Rust 作为个人项目。 并且在 2009 年,Mozilla 开始出于自身需要赞助 Rust 的开发,同时也扩大了团队以进一步开发这门语言。

Mozilla 对这种新语言感兴趣的原因之一是 Firefox 是用超过 4 万行 C++ 代码编写的,并且存在相当多的严重漏洞。 Rust 在构建时考虑到了安全性和并发性,这使其成为重写许多 Firefox 组件的完美选择,作为 Quantum 项目的一部分,以彻底改造浏览器的架构。 Mozilla 也在使用 Rust 开发 Servo,这是一种 HTML 渲染引擎,未来将取代 Firefox 目前的渲染引擎。 许多其他公司已经开始在他们的项目中使用 Rust,包括 Microsoft、Google、Facebook、Amazon、Dropbox、Fastly、Chef、Baidu 等等。

Rust 解决了 C 语言最重要的问题之一。它提供自动内存管理,因此开发人员不必为应用程序中的每个对象手动分配和释放它。 Rust 与其他现代语言的不同之处在于,它没有自动从内存中删除未使用对象的垃圾收集器,也没有运行它的运行时环境,如 Java 的 Java Runtime Environment。 相反,Rust 具有所有权、借用、引用和生命周期的概念。 “Rust 有一个声明对象调用的系统,允许您指定所有者是在使用它还是只是借用。 如果您只是借用一个对象,编译器会密切关注它并确保在您引用它时原始对象留在原处。 Rust 还将确保对象在使用完后立即从内存中删除,在编译时将适当的调用插入代码中,而无需额外的时间,”Triplett 说。

缺少原生运行时也可以被认为是 Rust 的一个积极特征。 Triplett 认为,与它一起运行的语言很难用作系统编程的工具。 正如他所解释的那样,“您必须先初始化此运行时,然后才能调用任何代码,您必须使用此运行时来调用函数,并且运行时本身可以在您意想不到的时候在背后运行其他代码。”

Rust 还致力于提供安全的并行编程。 使它成为内存安全的相同功能会跟踪诸如哪个线程拥有哪个对象以及哪些对象可以在线程之间传递以及哪些对象需要锁之类的事情。

所有这些特性使 Rust 足以吸引开发人员选择作为他们新的系统编程工具。 但是,在并行计算方面,Rust 还是略微落后于 C。

Triplett 将创建一个专门的工作组,将在 Rust 中实现必要的功能,使其在系统编程领域完全平等、超越和替代 C。 在 reddit 上的话题,致力于他的演讲,他说“ FFI / C Parity 小组正在创建中,尚未开始工作”,同时他准备回答任何问题,未来他一定会发布最近的将 Rust 的开发计划作为他对所有相关方的倡议的一部分。

可以假设,首先,FFI / C Parity 小组将致力于改进 Rust 的多线程支持,引入对 BFLOAT16 的支持,这是出现在新的英特尔至强可扩展处理器中的浮点格式,以及稳定汇编代码插入。



来源: 3dnews.ru

添加评论