0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_wN0SrCdH 来源:觉学社 2023-01-16 11:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

13ed3214-9430-11ed-bfe3-dac502259ad0.png

动机摘要:

目前 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 的支持。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GNU
    GNU
    +关注

    关注

    0

    文章

    144

    浏览量

    18228
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3915
  • rust语言
    +关注

    关注

    0

    文章

    57

    浏览量

    3247

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

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    鸿蒙OpenHarmony开发板解析:【Rust模块配置规则和指导】

    C/C++代码和提升编译速度,使用了GN + Ninja的编译构建系统。GN的构建语言简洁易读,Ninja的汇编级
    的头像 发表于 05-10 11:32 2379次阅读
    鸿蒙OpenHarmony开发板解析:【<b class='flag-5'>Rust</b>模块配置规则和指导】

    如何为Arm编译Cc++代码

    编写CC++应用程序时,需要使用编译器工具链将其编译为机器代码。然后,您可以在基于Arm的处理器上运行此
    发表于 08-02 17:28

    高级C/C++编译技术

    C/C++编译技术
    发表于 12-04 17:19 25次下载

    微软开始尝试使用Rust代替C/C++,介绍这些运用Rust的产品

    微软拥有世界上最大的C/C++代码库之一。从Windows、Office到Azure云,微软的所有核心产品都在该代码库上运行。但因为C++
    的头像 发表于 09-03 10:09 4665次阅读

    VScode编译器如何配置C/C++编译环境

    昨天有伙伴私信我,为什么我C语言写的hello world几行代码,在编译器里面报错了呢?
    的头像 发表于 03-16 08:38 7391次阅读

    qtC++写的2048小游戏源代码

    qtC++写的2048小游戏源代码
    发表于 09-27 11:48 3次下载

    Rust在虚幻引擎5中的使用

    前段时间,研究了一套 Rust 接入 Maya Plugin 的玩法,主要原理还是使用 C ABI 去交互。那我想着 UE 是使用 C++ 写的,肯定也可以使用
    的头像 发表于 12-21 11:05 7517次阅读

    Chromium正式开始支持Rust

      Chromium 正式开始支持 Rust 目前的支持只是第一阶段,在C++代码中使用Rust写的第三方库(编译成.so)。估计明年Chr
    的头像 发表于 01-14 10:04 1373次阅读

    RustC++哪个更好入门

    作为一门系统编程语言,Rust 一直致力于解决高并发和高安全性系统等问题。和老牌的 C++ 相比,Rust 的性能也毫不逊色。但曾几何时,因为上手难、用户量少、社区不活跃等诸如问题让想要入门的开发者感到迷茫,如今新的一年已经开始
    的头像 发表于 03-17 14:45 2829次阅读

    Windows 11初尝Rust,36000行内核代码已重写!

    。当下,DWriteCore 包含了大约 152,000 行 Rust 代码和 96,000 行 C++ 代码
    的头像 发表于 05-19 16:39 1518次阅读
    Windows 11初尝<b class='flag-5'>Rust</b>,36000行内核<b class='flag-5'>代码</b>已重写!

    取代C++!微软Rust改写的Win11内核来了

    按照微软此前介绍,Rust 语言的优势在于极高的内存安全性,原来内核中大量的不安全的子例程在改写后消失不见。同时,Rust 代码简洁高效,移植后 Office 应用没有任何性能损失,甚至部分场景比
    的头像 发表于 05-19 16:58 1930次阅读
    取代<b class='flag-5'>C++</b>!微软<b class='flag-5'>用</b><b class='flag-5'>Rust</b>改写的Win11内核来了

    使用C++编写通用库并在 Rust 中使用它 (WASI)

    的速度运行代码。它不特定于网络,也可以在其他平台上运行。WebAssembly 代码可以从各种编程语言编译而来,例如 CC++
    的头像 发表于 06-16 10:03 1952次阅读
    使用<b class='flag-5'>C++</b>编写通用库并在 <b class='flag-5'>Rust</b> 中使用它 (WASI)

    谷歌捐款100万美元给Rust基金会,以增强C++Rust的交互性

    如今,谷歌多项核心业务仍以 C++为主要编程语言,虽然无法直接使用Rust替代现有的C++程序,但谷歌依然选择支持Rust基金会的“Interop Initiative”计划,帮助那些
    的头像 发表于 02-19 15:41 1117次阅读

    [鸿蒙]OpenHarmony4.0的Rust开发

    。 OpenHarmony 为了集成 C/C++ 代码和提升编译速度,使用了 GN + Ninja 的编译构建系统。GN 的构建语言简洁易读
    的头像 发表于 02-26 17:28 1868次阅读
    [鸿蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>开发

    C7000优化C/C++编译

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    <b class='flag-5'>C</b>7000优化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>编译</b>器