当前位置:首页 > 科技  > 软件

用Rust重写数万行C代码,有必要吗?

来源: 责编: 时间:2024-03-18 09:42:42 126观看
导读在过去的一段时间里,“用Rust重写”的趋势席卷了整个开发领域。作为一颗冉冉升起的新星,Rust不仅承诺更好的内存安全性和更高的技术稳定性,还可以兼顾开发和执行效率。这也使得越来越多的系统开发人员转向这种面向未来的

在过去的一段时间里,“用Rust重写”的趋势席卷了整个开发领域。作为一颗冉冉升起的新星,Rust不仅承诺更好的内存安全性和更高的技术稳定性,还可以兼顾开发和执行效率。这也使得越来越多的系统开发人员转向这种面向未来的编程语言。47l28资讯网——每日最新资讯28at.com

就在最近,另一个知名的开源项目Ockam放弃了系统中数万行C语言代码,最终用Rust重写了整个项目。在完成这个庞大的项目后,Ockam的创始人Mrinal Wadhwa分享了他带领团队从C到Rust的历程。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

1,C语言:迷人的陷阱

作为一个开源的开发者工具,Ockam在GitHub上有3.3万颗星。其核心功能是帮助用户构建可信的动态数据,并为用户应用程序添加端到端加密和认证通信;确保应用程序具有端到端的数据完整性、真实性和机密性。47l28资讯网——每日最新资讯28at.com

研发团队希望Ockam可以在任何环境中运行,包括受限的边缘设备或强大的云服务器。除此之外,Ockam的另一个目标是可以在任何类型的应用程序中使用,而不管应用程序是用什么语言构建的。47l28资讯网——每日最新资讯28at.com

这样的需求使得C语言成为构建Ockam项目的候选语言——它可以为大多数设备编译,并且所有流行的语言都可以通过某种形式的接口调用C库。在这种情况下,Ockam能够为所有其他语言提供惯用的包装器。47l28资讯网——每日最新资讯28at.com

该团队的想法是将以通信为中心的核心协议从硬件行为中分离出来,并为它想要支持的硬件提供可插拔的适配器。考虑到这个想法,开发人员在初始版本中将Ockam项目的核心实现为C库,并用其他语言包装器包装该库。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

2,安全问题

然而,尽管基于Ockam内核实现的C库满足了项目到处运行的需求,但由于C语言内存管理的弱点,团队实现的C库中许多与加密相关的代码容易出现漏洞,一个小错误就可能导致系统变得不安全。47l28资讯网——每日最新资讯28at.com

这与Ockam项目的目标完全相反,Ockam项目的目标是隐藏这些问题,并提供一个易于正确使用的开发人员界面。该团队开始尝试使用C语言构建安全简单的接口。但经过多次迭代,开发人员逐渐发现,他们必须掌握大量关于协议状态和状态转换的细节,即使他们非常小心,代码中也总会存在无法检测到的漏洞。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

3,Elixir:不合格的继承人

面对极其痛苦的迭代工作,仍然无法解决内存安全问题的Ockam决定放弃C语言,寻找更适合这个项目的继任者——当时,他们把目光投向了基于erlang的Elixir语言。47l28资讯网——每日最新资讯28at.com

Elixir程序在提供Erlang进程的Erlang虚拟机BEAM上运行。Erlang进程是轻量级的有状态并发参与者。由于参与者可以在保持内部状态的同时并发运行,因此很容易运行并发状态协议栈:Ockam传输 + Ockam路由 + Ockam安全通道。47l28资讯网——每日最新资讯28at.com

但不幸的是,Elixir天生就是为支持高负载项目而设计的,不能像C语言那样在小型或受限的计算机上运行。此外,Elixir的生态还不够成熟,对于某些特定的语言管理包装器来说不是一个好的选择。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

4,Rust

在经历了连续的失败之后,Ockam团队意识到他们的核心需求是在确保安全性的同时实现轻量级参与者,但是C语言和Elixir都无法完美地适应。从此,Wadhwa开始带领团队研究Rust,并很快发现了这门语言的独特魅力。47l28资讯网——每日最新资讯28at.com

Rust库能够导出与C调用兼容的接口。这意味着任何静态/动态链接或从C库调用函数的语言都能够以完全相同的方式从Rust库调用函数。由于大多数语言都支持C中的本机函数,因此它们也支持Rust中的本机函数。从包装器的角度来看,Rust和C之间几乎没有区别。47l28资讯网——每日最新资讯28at.com

Rust的内存安全特性消除了use-after-free、double-free、溢出、越界访问和许多其他常见错误的可能性。根据之前的调查,这些错误导致了C或C++库中60-70%的关键漏洞。Rust在编译时提供了这种安全性,这使得它在编写需要高性能、在受限环境中运行和高度安全的代码时具有很大的优势。47l28资讯网——每日最新资讯28at.com

研发团队坚信Rust和Ockam是天作之合的最后一个原因是Rust中的async/await。Ockam需要轻量级参与者来创建简单而安全的协议栈接口。async/await意味着在tokio和async-std等项目中已经完成了许多创建actor的工作,团队可以在此基础上轻松构建Ockam的actor实现。47l28资讯网——每日最新资讯28at.com

基于rust的async/await无论在大型机还是微型计算机上运行,都可以向用户提供完全相同的界面,位于Ockam Workers上的协议接口也可以呈现完全相同的简单接口。47l28资讯网——每日最新资讯28at.com

最终,在Wadhwa的带领下,Ockam放弃了系统中数万行C语言代码,用一段时间完成了对Rust的全面改造。经过重写后稳定性的多次迭代,任何用户现在都可以使用重新激活的Ockam包,通过简单的函数调用,在任何设备上创建他们想要的端到端加密和相互认证的安全通道。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

5,值得期待的未来

Ockam的故事实际上只是一个缩影。对于今天被内存安全问题困扰的绝大多数项目来说,使用Rust或基于Rust的重构不再是一个实验或赌注,而是一个足够实用和可靠的解决方案。47l28资讯网——每日最新资讯28at.com

在Ockam之前,微软在4月份宣布,出于内存安全考虑,它将使用18万行Rust代码重写核心Windows库;Armin是Python web框架Flask的作者,他在一篇关于Python 2023发展趋势的文章中也提出了将Rust集成到Python项目和工具中的想法;Ruff的创始人在成立新公司时,也曾宣称未来将通过Rust彻底改变Python生态系统。47l28资讯网——每日最新资讯28at.com

更令人欣慰的是,Rust的进化还在继续。根据其发布的Rust 2024路线图,官方团队将在未来继续努力,降低学习门槛,加强生态连接。帮助Rust尽快摆脱饱受诟病的“高门槛”标签,让它尽快在更多场景中发挥价值。在这方面,Rust的未来确实值得我们每个人的期待。47l28资讯网——每日最新资讯28at.com

47l28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-76555-0.html用Rust重写数万行C代码,有必要吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 保守点,90%的程序员不适合做独立开发

下一篇: 抢先了解:阿里巴巴面试必问!Spring设计思想解析

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 红魔电竞平板评测:大屏幕硬实力

    红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • Raft算法:保障分布式系统共识的稳健之道

    Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 让我们一起聊聊文件的操作

    让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top