前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【2023 Week-1】Rust视界周刊 | 用 Rust 和 C++ 代码编译时间同样糟糕吗?

【2023 Week-1】Rust视界周刊 | 用 Rust 和 C++ 代码编译时间同样糟糕吗?

作者头像
张汉东
发布2023-03-06 08:57:01
9310
发布2023-03-06 08:57:01
举报
文章被收录于专栏:Rust 编程Rust 编程

“GitHub 阅读地址:https://github.com/RustMagazine/rust-horizon-2023

社区热点

Rust 官方正在讨论为 Rust 提供 interoperable_abi features gate

interoperable_abi[1] 意味着提供一个新的 Rust ABI extern "interop" 和 repr(interop) ,用于实现有安全数据 类型的高级编程语言之间的互操作性。

动机摘要:

目前 Rust ABI 并不稳定,多语言交互只能通过 C-ABI 来进行。但是这限制了在 ABI 之间使用更高级的安全类型。可互操作的 ABI 将定义一种标准方法来跨高级语言进行调用,传递高级数据类型,而不需要将其降级为 C-ABI。该 ABI 将与任何提供 C 兼容 FFI 的语言(包括 C本身),并且语言还可以为可互操作的 ABI 添加特定的更高级别的支持。可互操作的 ABI 旨在成为 静态和动态形式的编译库(包括系统库)的合理默认值。

可互操作的 ABI 将是 C ABI 的严格超集。

可互操作 ABI 不支持的内容摘要:

  • 可互操作的 ABI 并不旨在支持整个Rust 标准库.
  • 可互操作的 ABI 不会旨在支持复杂的生命周期处理
  • 可互操作的 ABI(至少在第一个版本中)不会以源代码或编译形式提供接口描述语言(IDL)
  • 可互操作的 ABI 的目的不是在不同语言的表示之间提供“翻译”
  • 可互操作的 ABI 不能支持任意的编译时泛型函数

GCC-rs 项目在 2022 年取得了很大进展

gccrs是一个旨在为 GNU Compiler Collection 带来对 Rust编程语言的支持的项目。其目标是从头开始为 Rust 编程语言编写一个新的编译器前端,将该前端集成到 GCC 中,使其作为一种语言与 C、C++、Ada、D、Go 一起使用。

该项目最初于 2014 年启动。当时,Rust 尚未实现稳定版本(Rust 1.0 于 2015 年 5 月发布),对于单个开发人员来说很难跟上高强度的变化。2019年又开始努力,此后一直在稳步进行。

2020 年,菲利普·赫伦 ( Philip Herron )开始获得资金支持,随后他得以开始全职从事该项目。此赞助来自 Open Source Security公司。Philip 受雇于 Embecosm 并从他们的管理中受益,并得到 GCC 指导委员会的支持。2022 年,在将近一年半的单飞之后,Philip 加入了另一位由 Open Source Security 公司资助的全职工程师 Arthur Cohen ,也受雇于 Embecosm。现在有两名工程师每周为该项目投入 40 小时。

2022 年发生的最引人注目的事件是将 gccrs 合并到 GCC,gccrs 将在 2023 年 4 月发布的 GCC 13.1 版本中可用。

更多内容参考 gccrs 2022 年报[2]

“P.S 与 gccrs 对应的是另一个项目 rustc_codegen_gcc。它是作为 Rust 编译器 GCC 后端,目前也正在积极开发中,感兴趣可以关注rustc_codegen_gcc:进度报告#19[3]

用 Rust 和 C++ 代码编译时间同样糟糕吗?

原文[4]作者写道:

“C++ 因其缓慢的构建时间而臭名昭著。“我的代码正在编译”是编程世界中的一个梗,而 C++ 让这个笑话流传开来。

“像 Google Chromium 这样的项目 在全新硬件上构建需要一个小时,在旧硬件上构建需要 6 小时。即使有数千美元的云计算能力,Chromium 构建时间仍然在六分钟左右。这是我完全不能接受的。人怎么可以每天这样工作?

作者也听说,Rust 也面临相同的问题,但他有实证精神,亲自动手证明一下 Rust 是不是和 Cpp 一样很慢。

这是他的计划:

  • 查找开源 C++ 项目。
  • 从项目中提取一部分为迷你项目中。
  • 将 C++ 迷你项目的代码逐行重写为 Rust。
  • 优化 C++ 项目和 Rust 项目的构建工具链。
  • 比较两个项目之间的编译+测试时间。

经过这样的测试,作者得出最终结论:

  • 编译时间是 Rust 的问题吗?是的。有一些提示和技巧可以加快构建速度,但作者没有找到神奇的数量级改进,否则作者将很高兴使用 Rust 进行开发。
  • Rust 的构建时间和 C++ 一样糟糕吗?是的。对于更大的项目,Rust 的开发编译时间比 C++ 更短,至少作者的代码风格是这样。
  • 对于完整构建,C++ 构建花费的时间与 Rust 相比,大致相同(17k SLOC)或花费更少的时间(100k+ SLOC),而不是更长。
  • 对于增量构建,与 C++ 相比,Rust 构建有时更短,有时更长(17k SLOC)或更长(100k+ SLOC),但并不总是更长。
  • 很欣赏 Rust 的工具链(尤其是 Cargo、rustup 和 miri)。

应用实践

Gama 发射的太阳帆宇宙飞船中使用了 Rust

Gama[5] 将发射太阳帆宇宙飞船🛰️,并且是公开将 Rust 送入太空的公司之一。提供软件服务的应该是这家公司:Tweedegolf[6] ,该公司也是 Rust 基金会银牌会员。他们的开源仓库[7]里有一个 Rust 实现的 PTP (精确时间协议) 库,这个PTP一般用在卫星的时间源,比NTP更精确。但这个是 PoC 实现,不知道这次发射的飞船上有没有用。从另外的项目 嵌入式开发板 pcf85063a (一般用于计时闹钟)rust 驱动来看,这次上天的 Rust 程序很可能和精确计时相关。

Gama 太阳帆的卫星于 2023 年 1 月 3 日由 SpaceX 猎鹰 9 号成功送入轨道[8]

生态看点

svix-webhooks:企业级 Webhooks 服务

svix-webhooks[9] 是基于 Rust 实现的企业级 Webhooks 服务器。Svix 使开发人员可以轻松发送 webhook。开发人员进行一次 API 调用,Svix 负责可交付性、重试、安全性等。

turmoil:开发和测试分布式系统的框架

Tokio 发布了[10]用于开发和测试分布式系统的框架 turmoil[11] 的初始版本。

测试分布式系统很难。不确定性无处不在(网络、时间、线程等),使得难以实现可重现的结果。由于部署,开发周期很长。所有这些因素都会减慢开发速度,并且难以确保系统的正确性。turmoil力求通过模拟主机、时间和网络来解决这些问题。这允许整个分布式系统在单个线程的单个进程中运行,从而实现确定性执行。

cargo-sandbox 发布

cargo-sandbox[12] 打算成为 cargo 的一个近乎直接的替代品。关键的区别在于,cargo-sandbox 在 docker 容器中运行相关命令,目的是将潜在的恶意代码与主机环境的隔离开来(关于威胁模型的更多细节,见README)。其目标是尽可能地接近 "100%"的兼容原版 cargo,并获得最顺畅的体验。

Rust 中的深度学习:Burn 0.4.0 发布以及 2023 年的规划

Rust 深度学习框架Burn[13] 0.4 完成了后端重构,除此之外,还实现了很多新的功能,如ADAM优化器、转化器模块等。下一个重点将是增加视觉相关的模块,如卷积和池化层。

shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏

shura[14] 是rust编写的一个安全,快速并且跨平台的游戏框架。shura使用一个2D组件系统、场景管理和group系统帮你管理一个大型游戏。

shura主要的目标是,你的游戏逻辑可以分别放在不同的组件、group和场景中。

rumqtt: 构建 mqtt 的 Rust 生态

rumqtt[15] 是一组用 rust-lang 编写的开源库,用于实现 MQTT 标准,同时力求简单、健壮和高性能。

rumqtt 是 Bytebeam 物联网咨询公司开源的 MQTT 代理。rumqtt 目前版本已经发布到了 R19 版,并未按语义化版本来发布。

目前发布了 R19 新版本:

  • 新的版本提升了性能和可靠性(可以支持 多达 10,000 多个 MQTT 客户端,使用 mqttwrk[16] 进行基准测试)
  • 添加了一个用于测试 rumqttd 的公共服务器
  • 添加了 Prometheus 集成和其他优化更改
  • 加了对存储支持的持久性的实验性支持,以确保消息的零数据丢失

rumqtt 将在 2023 年初推出对 MQTT v5 的支持。

“P.S 另外一个纯 Rust MQTT v5 客户端实现 mqrstt[17]

学习资源

  • RustLab 2022:
    • https://www.youtube.com/watch?v=Phk0C-kLlho
    • https://docs.google.com/presentation/d/1P8Su5mZSYkfZ1A9mPAaKag-vtXmVD8nUBD7Ym-pfwJM/edit#slide=id.gff4f80ffe4_0_0
    • 困难问题的人体工程学 API:
    • 使用Tokio 实现 Actors: https://www.youtube.com/watch?v=fTXuGRP1ee4
  • Web 开发: 使用 actix-web 和模板引擎Tera 创建站点框架 https://webant.online/tutorials/actix-web-tera-skeleton-website/
  • Rust vs C++ 常见 Bug 对比: https://geo-ant.github.io/blog/2022/common-cpp-errors-vs-rust/-《Rust Atomics and Locks》免费在线阅读: https://marabos.nl/atomics/
  • Haskell 程序员用 Rust 抽象 : https://www.jernesto.com/articles/who_needs_haskell.html
  • egui写的票务管理工具 : https://github.com/TheBiochemic/tickets-rs
  • 基于 wasm 的unix终端: https://github.com/Property404/its-a-unix-system

参考资料

[1]

interoperable_abi: https://github.com/rust-lang/rust/pull/105586

[2]

更多内容参考 gccrs 2022 年报: https://rust-gcc.github.io/reporting/2022-year-report.html

[3]

rustc_codegen_gcc:进度报告#19: https://blog.antoyo.xyz/rustc_codegen_gcc-progress-report-19

[4]

原文: https://quick-lint-js.com/blog/cpp-vs-rust-build-times/

[5]

Gama: https://www.gamaspace.com/

[6]

Tweedegolf: https://tweedegolf.nl/en

[7]

开源仓库: https://github.com/tweedegolf

[8]

Gama 太阳帆的卫星于 2023 年 1 月 3 日由 SpaceX 猎鹰 9 号成功送入轨道: https://www.sail-world.com/news/257330/Gama-launches-its-Gama-Alpha-solar-sail-mission

[9]

svix-webhooks: https://github.com/svix/svix-webhooks

[10]

Tokio 发布了: https://tokio.rs/blog/2023-01-03-announcing-turmoil

[11]

turmoil: https://github.com/tokio-rs/turmoil

[12]

cargo-sandbox: https://github.com/insanitybit/cargo-sandbox

[13]

Burn: https://github.com/burn-rs/burn

[14]

shura: https://github.com/AndriBaal/shura

[15]

rumqtt: https://github.com/bytebeamio/rumqtt

[16]

mqttwrk: https://github.com/bytebeamio/mqttwrk

[17]

mqrstt: https://github.com/GunnarMorrigan/mqrstt

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 觉学社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 社区热点
    • Rust 官方正在讨论为 Rust 提供 interoperable_abi features gate
      • GCC-rs 项目在 2022 年取得了很大进展
        • 用 Rust 和 C++ 代码编译时间同样糟糕吗?
        • 应用实践
          • Gama 发射的太阳帆宇宙飞船中使用了 Rust
          • 生态看点
            • svix-webhooks:企业级 Webhooks 服务
              • turmoil:开发和测试分布式系统的框架
                • cargo-sandbox 发布
                  • Rust 中的深度学习:Burn 0.4.0 发布以及 2023 年的规划
                    • shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏
                      • rumqtt: 构建 mqtt 的 Rust 生态
                        • 学习资源
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档