作者丨Bhagyashree R

译者丨平川

策划丨王文婧

在 2019 年开源技术峰会(OSTS)上,英特尔首席工程师 Josh Triplett 详细介绍了英特尔为将人们喜爱的 Rust 变成和 C 完全对等的语言所做的工作。在演讲“英特尔和 Rust:系统编程的未来”中,他还谈到了系统编程的历史,C 是如何成为“默认”的系统编程语言的,Rust 的特性可以使它胜过 C,等等。

直到现在,OSTS 仍是英特尔的闭门活动,公司的业务负责人和技术负责人聚在一起,讨论各种有助于塑造开源生态系统的趋势、技术和创新的话题。然而,今年与往年不同,他们首次邀请了非英特尔的与会者,包括媒体、合作伙伴和开发人员。

大会举办了主题演讲,包括 50 多场技术会议、座谈会和演示,覆盖英特尔参与的所有开源技术,包括集成软件栈(边缘计算、 AI 、基础设施)、固件、嵌入式和物联网项目以及云系统软件等。

1 什么是系统编程语言

系统编程是开发和管理作为其他软件构建平台的软件。为了获得必要的性能和抽象,系统软件与计算机硬件之间会存在直接或关系紧密的接口。与应用程序编程不同,它提供的软件不是向用户提供服务,而是生成为计算机硬件提供服务的软件。

Triplett 将系统编程宽泛地定义为“任何不是应用程序的软件”。这包括 BIOS、固件、引导加载程序、操作系统内核、嵌入式及类似的底层代码、虚拟机实现。Triplett 也将 Web 浏览器视为一个系统软件,因为它“不只是一个应用程序”,它们实际上是“网站和 Web 应用程序的平台”。

2 C 是如何成为“默认”的系统编程语言的

以前,大多数系统软件包括 BIOS、引导加载程序和固件是用 Assembly 编写的。在 1960 年代,人们开始了在高级语言中支持硬件的试验,创建了 PL/S、BLISS、BCPL 和扩展 ALGOL 等语言。

在 1970 年代,Dennis Ritchie 为 Unix 操作系统创建了 C 编程语言。它源自无类型的 B 编程语言,C 打包了强大的高级功能和最适合编写操作系统的具体特性。多个 UNIX 组件包括其内核最终用 C 进行了重写。许多其他系统软件,包括 Oracle 数据库、很大一部分的 Windows 源代码、 Linux 操作系统,都是用 C 编写的。

在这一点上,C 被广泛地采用。但是,究竟是什么使开发人员可以舒服地迁移到 C?Triplett 认为,为了实现从一种语言到另一种语言的迁移,有两件事必须使开发人员觉得舒服:特性和对等性。

  • 首先,语言应该提供“足够引人注目”的特性。“不能只是好一点点。它必须好很多,对得起迁移所需要付出的努力和工程时间,”他补充道。相比 Assembly,C 提供了更多的特性。它提供了一定程度的类型安全、可移植性、使用高级构造提高生产力、更可读的代码。

  • 其次,语言必须提供对等性,就是说,开发人员必须能够相信其能力不亚于 Assembly。他说,“它不能仅仅是更好,还要不会更糟。”除了更快以及能够表示 Assembly 能够表示的任何数据类型外,它还具备 Triplett 所说的“逃生出口(escape hatch)”。这意味着你可以逐步迁移,如果需要,还可以结合 Assembly 一起使用。

Triplett 相信,C 现在正在变成几年前 Assembly 的样子。“C 是新的 Assembly,”他总结道。开发人员正在寻找一种高级语言,它不仅能解决 C 语言中无法解决的问题,而且还能利用这些语言提供其他令人兴奋的特性。这种旨在使开发人员从 C 语言迁移过去的语言应该是内存安全的,提供自动内存管理、安全等等。

“任何想要比 C 语言更好的语言,如果它真的是一个令人信服的替代方案,那么它必须提供的不仅仅是防止缓冲区溢出。人们关心可用性和生产力。他们关心的是编写自解释的代码,用更少的代码来完成更多的工作。它还需要解决安全问题。可用性和生产力与安全性密切相关。你完成工作所需要编写的代码越少,出现 bug 安全漏洞的机会就越小,”他解释说。

3 Rust 与 C 的比较

早在 2006 年,Mozilla 员工 Graydon Hoare 开始编写 Rust,最初是作为一个个人项目。2009 年。Mozilla 开始赞助该项目,扩大了团队,进一步推动了这门语言的发展。

Mozilla 感兴趣的原因之一是 Firefox 是用 400 多万行 C++ 代码编写的,并且有很多非常严重的漏洞。Rust 构建时考虑到了安全性和并发性,因此,它是在 Quantum 项目下重写许多 Firefox 组件的最佳选择。他们还使用 Rust 开发 Servo,这是一个 HTML 渲染引擎,最终将取代 Firefox 的渲染引擎。许多其他公司也开始在他们的项目中使用 Rust,包括微软、谷歌、Facebook、亚马逊、Dropbox、Fastly、Chef、百度等等。

Rust 解决了 C 语言中的内存管理问题。它提供了自动内存管理,因此,开发人员不必对每个对象都手动调用 free。它与其他现代语言的区别在于,它没有任何类型的垃圾收集器或运行时系统。取而代之,Rust 有所有权、借用、引用和生命周期的概念。“Rust 有一个系统,它可以声明对某个对象的任何特定使用是该对象的所有者,还是只是临时借用该对象。如果你只是借用一个对象,编译器会跟踪它。只要你引用它,它就会保持原样。Rust 会确保对象的所有者在用完的时候释放它,它是在编译时插入 free 调用,不需要额外的运行时开销,”Triplett 解释道。

没有运行时也是 Rust 的一个优点。Triplett 认为,具有运行时的语言很难用作系统编程语言。他补充说,“你必须在可以调用任何代码之前初始化运行时,必须使用那个运行时调用函数,而且运行时本身可能在意想不到的时间在后台运行额外的代码。”

Rust 还旨在提供安全的并发编程。这和实现内存安全的特性是同一个特性,它会跟踪哪个线程拥有哪个对象,哪些对象可以在线程之间传递,哪些对象需要获取锁。

这些特性足够使 Rust 吸引开发人员选用它进行系统编程。然而,谈到第二个标准,Rust 尚无法做到与 C 对等。

4 Triplett:“为了实现与 C 对等,我参与了 Rust” 在 Rust 中引入兼容 C 的 union

Triplett 对 Rust 编程语言的第一个贡献是 RFC 1444 ,它始于 2015 年,并于 2016 年被接受。这个 RFC 提议在 Rust 中对兼容 C 的 union 提供原生支持,这将通过一个新的“上下文关键字”union 来定义。Triplett 想在 Rust 中构建虚拟机,而用于此目的的 Linux 内核接口 /dev/kvm 需要联合,他由此认识到了这份提案的必要性。

“我曾与 Rust 社区及语言团队一起将 union 引入 Rust,因为这项工作,我现在是 Rust 语言治理团队的一员,帮助评估和指导语言的其他变化,”他补充道。

2016 年,他在第一届 RustConf 大会上详细讨论了这个 RFC。

支持未命名结构和联合类型

Triplett 研究的另一个特性是在 Rust 中支持未命名结构和联合类型。几十年来,这一直是一个广泛使用的 C 编译器扩展,并且也包含在 C11 标准中。这允许开发人员以任意方式对字段进行分组和布局,以匹配在外部函数接口(FFI)中使用的 C 数据结构。这个提议实施时,Rust 将能够使用与结构相同的名称表示此种类型,而不会人为地插入字段名,令使用现有平台完备接口的用户感到困惑。

在 Rust 中提供内联 Assembly 的稳定支持

系统编程通常涉及底层操作,并且需要处理器的底层细节,比如特权指令。为此,Rust 支持通过“asm!”宏使用内联 Assembly。然而,只在编译器的每夜构建版本中提供,尚不稳定。Triplett 正在与其他 Rust 开发人员合作,编写一份提案,为内联 Assembly 引入更健壮的语法。要了解内联 Assembly 支持的更多细节,看看这个 pre-RFC 。

在 Rust 中加入 BFLOAT16 支持

许多英特尔处理器包括 Xeon Scalable ‘Cooper Lake-SP’现在都支持 BFLOAT16,这是一个新的浮点格式。这是 32 位 IEEE 754 单精度浮点格式截断后的 16 位版本,主要用于深度学习。这种格式也用于处理大型数据集的机器学习库,如 Tensorflow 。这也使得与现有系统、功能和存储的互操作变得更加容易。这就是 Triplett 致力于在 Rust 中添加 BFLOAT16 支持的原因,那样开发人员就能够使用他们硬件的全部功能。

FFI/C 对等性工作组

这是 Triplett 的重要声明之一。他启动了一个工作小组,将专注于实现与 C 的完全对等。在这个小组中,他的目标是与 Rust 社区和其他英特尔开发商合作制定剩余特性的规范,为了用于系统编程,这些特性需要在 Rust 中实现。这个小组还将专注于使用 Rust 的稳定版本支持系统编程,而不仅是试验性的编译器每夜构建版本。

在上周的 Reddit 讨论中,Triplett 分享了工作组的当前状态,“在回答问题之前,我先说明下:FFI /C 对等性工作组正在启动过程中,尚未完全启动。在完全启动时,我会在这里和其他地方发布相关信息及其初始目标。”

如有兴趣,您可观看 Josh Triplett 完整的 OSTS 视频演讲,了解更多英特尔对 Rust 的贡献。

原文链接:

https://hub.packtpub.com/rust-is-the-future-of-systems-programming-c-is-the-new-assembly-intel-principal-engineer-josh-triplett/

点个在看少个 bug

C++和Rust_Rust 是系统编程的未来,C 是新的 Assembly相关推荐

  1. 系统编程(ISP)与应用编程(IAP)的区别!

    系统编程(ISP)与应用编程(IAP)的区别! 1.定义 (1)系统编程(ISP) ISP在系统编程是指电路板上的空白器件可以编程写人最终用户代码,而不需要从电路板上取下器件.已经编程的器件也可以用I ...

  2. 微软解释为什么Rust是系统编程的最佳选择

    上周,MSRC(微软安全响应中心)透露出拥抱 Rust 的打算,随后他们将这个话题扩展为一个系列,进一步阐述了使用安全的系统编程语言的的必要性,以及选择 Rust 的原因. 在该系列最新一篇文章中,M ...

  3. 快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...

    全球博弈(quanqiuboyi)--不一样的观点,不一样的解读,8000万人订阅的超级微信大号.不关注时事,你将会被这个世界抛弃,点击标题下蓝字"全球博弈"关注,我们将为您提供有 ...

  4. 开放式系统编程技术_使用开放式硬件构建更好的辅助技术

    开放式系统编程技术 对于许多人来说,技术可以帮助并改善我们的生活,使某些任务变得更容易,可以进行长距离沟通,并为我们提供了一个了解周围世界的机会. 但是,对于许多残疾人来说,技术不是辅助,而是生活独立 ...

  5. 微软解释为什么 Rust 是系统编程的最佳选择

    上周,MSRC(微软安全响应中心)透露出拥抱 Rust 的打算,随后他们将这个话题扩展为一个系列,进一步阐述了使用安全的系统编程语言的的必要性,以及选择 Rust 的原因. 在该系列最新一篇文章中,M ...

  6. Wolfram 语言之父 Stephen Wolfram :编程的未来

    以后说到编程,我们想到的不单单是程序员了.未来的生活与计算机紧密相连,编程的未来与我们息息相关.用计算机完成我们所有感兴趣的事可能成为现实. 作者 |Nick Heath 译者 |弯月,责编 | ma ...

  7. linux学习笔记 -- 系统编程

    系统编程 相关概念 概念 简易cpu结构 mmu内存管理单元 环境变量 PATH SHELL HOME LANG TERM getenv setenv unsetenv 进程控制 fork函数 get ...

  8. 资深程序员带你攻克 Linux 系统编程

    作者简介:宇文拓,近十年 Linux C/C++ 开发经验,现就职于某创业公司,负责服务器架构与系统设计.曾就职于某通信业知名美企,负责核心网和防火墙产品研发.在 GitHub 上发布了开源项目 An ...

  9. linux服务器开发二(系统编程)--线程相关

    线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...

最新文章

  1. Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
  2. 如何做好一个开源项目(一)
  3. linux mint python3.6,Linux 上如何安装并切换最新版本的 Python 3.6
  4. JEECG 3.6.5版本发布,企业级JAVA快速开发平台
  5. pandas根据某列值为key整合其他列值,拆分某列值增加多行数据
  6. 服务器修复工具,服务器加固工具
  7. 老司机带你检测相似图片
  8. 解决:Windows打开文件时选择打开方式-》选择其他应用-》时出现无效应用。
  9. whistle抓包工具
  10. 金种子前三季净利亏损1.44亿 营收不及成本增速致毛利率下滑
  11. 关于WEB页面处谷歌验证的接入
  12. ORACLE sql 高级查询
  13. navicat导入excel 日期格式处理
  14. linux安装iscsi设备,Linux安装管理ISCSI卷(initiator端)
  15. web前端知识——iframe标签、CSS
  16. 打蚊子表情包_打蚊子表情包 - 打蚊子微信表情包 - 打蚊子QQ表情包 - 发表情 fabiaoqing.com...
  17. 高并发和大流量解决方案
  18. 02.python求和
  19. Marklogic学习 —— XQuery语法基础4
  20. Nginx自建CDN以及ngx_cache_purge清除缓存

热门文章

  1. 淘宝客商品 获取详情图片
  2. 2021机动车检测站签字授权人法律法规和规范考试题库及答案
  3. java读写Excel工具类
  4. iphone4 美版电信烧号6.1.3电话号码括号问题解决办法
  5. SWOOLE进阶-06网络IO模型-阻塞模型
  6. echarts全国地图只显示南海诸岛问题解决
  7. matlab弹道仿真,战役战术导弹弹道仿真在simulink下如何实现
  8. 超详细:前端 2019 学习路线(B站视频)
  9. SAP FICO全解析之-公司代码
  10. 【微信小程序】三、微信小程序组件的基本使用