宇宙链 宇宙链
Ctrl+D收藏宇宙链

开发者说:为什么我选择 Rust?

作者:

时间:1900/1/1 0:00:00

作者:DmitriyKashitsyn/img/20230515234824151757/0.jpg "/>

上图右侧部分显示了并发性和内存安全相关的问题,这些问题根源上不可能发生在常规Rust代码中。所以只需要换成Rust,他们就可以杜绝这段时间内大约一半的bug。同时,缓冲区溢出是其中最危险的bug,因为它们常常导致「密钥泄露」、拒绝服务和远程代码执行漏洞。

上图还表明,“一个人只需要知道如何编写C”和“只需要把底层的东西留给专业人士”这样的想法是不够的。Linux内核是由行业中最优秀的5%的人编写的,然而,内存bug这位老朋友一年又一年的给我们贡献着CVE。

当然,与kernel中数百万行正常工作的代码相比,这50个bug根本算不了什么。但是之前说过的生死攸关的问题,还记得吗?当我们谈到关键系统时,即使是最小的错误也可能导致灾难性的后果。还没提及这50个只是被发现了的bug。谁知道还有多少没被发现呢?如果使用Rust,我们会事先知道这些问题。

Kava Labs宣布OpenBiSea加入7.5亿美元Kava Rise开发者激励计划:7月23日消息,Kava Labs宣布,OpenBiSea加入7.5亿美元Kava Rise开发者激励计划。OpenBiSea带来了其开放的多链NFT拍卖平台,以解锁Kava上的NFT。[2022/7/23 2:32:45]

Rust有多快?

你可能会想:当然,Rust可能提供了这么多东西来杜绝这些隐患,但是要花多少代价呢?通常,在现代编程语言中的内存安全需要负担垃圾回收器的开销。并发问题通常通过使用特殊的同步原语锁定所有受影响的数据结构和执行路径来解决。

但对于Rust就不是这样了。它的强大来自于巧妙的类型系统,可以在编译时就解决所有这些问题。「TypeSystem的设计」同时防止了内存问题和数据竞争问题。

就像在C++中一样,你可以只使用你需要的东西。例如,在Rust中,你只在绝对需要时才使用互斥锁。而且,Rust编译器会需要的位置迫使你使用它,所以永远不会忘记。所有这些基本上都是零成本的。由于大多数检查都是在编译时执行的,因此编译后的程序集与C或C++编译器生成的程序集没有太大区别。

由于这个原因,Rust现在在「嵌入式电子」、「物联网」,甚至「操作系统开发」领域都非常有前景,而这些领域以前都是由C语言主导的,因为需要很高的控制要求、资源和性能也有严格的限制。

Eth1-Eth2合并开发者测试网再次启动,官方希望运行复杂交易、强制分叉等:官方消息,protolambda第二次启动Eth1-Eth2合并开发者测试网Nocturne,与首次Eth1-Eth2合并开发者测试网Steklo相同,启用4个共识客户端:Teku、Lighthouse、Prysm和Nimbus;3个执行客户端:Besu、Geth和Nethermind,以运行PoS。这个测试网仍然是非常实验性的,但是包含了自第一个Steklo测试网以来的一些重要的bug修复。尽管是测试网,但protolambda表示希望运行复杂的交易,存款,强制进行一些分叉,重新同步节点等。[2021/5/12 21:54:28]

Rust的最新版本甚至在用户空间引入了SIMD支持。以前,由于API稳定性的限制,它只能在nightly版本中使用。现在,你可以通过直接使用向量指令或使用「便捷的包装库」来释放硬件的全部潜力。而且,即使你不打算这样做,编译器仍然会在可能的情况下自动向量化循环语句和其他东西,在许多情况下,可以达到手工编写向量指令代码的性能水平。

我们为什么使用Rust

ParityTechnologies使用Rust也是出于同样的原因。因为它让我们可以毫无畏惧地编写复杂而且高性能的软件。我们可以自由地进行实验,因为我们确信Rust将为我们提供支撑。无论是实现一个简单的命令行实用程序还是一个多线程庞然大物,它都没有什么区别。Rust确保我们的程序不存在未定义的行为、数据竞争或任何内存安全问题。更不用说,Rust「非常快」,编写起来很有趣,易于阅读,而且几乎没有运行时。

StreamingFast 与 Heco 建立合作伙伴关系,为开发者提供链上数据流:据官方消息,火币生态链?(Heco) 宣布与去中心化数据服务解决方案 StreamingFast 建立合作伙伴关系,提供链上历史和实时数据流服务。StreamingFast 将帮助 Heco 生态中的开发者用更低的成本、更快的速度完成他们的项目,并为他们的用户带来流畅、动态的用户体验。

另外,StreamingFast 正在准备其平台的完全去中心化。 在去中心化的模式下,遍布全球的 StreamingFast 节点将为 Heco 开发者带来更高的可靠性、更低的数据成本、更高的数据完整性和最可靠的基础架构。[2021/3/23 19:11:25]

内存bug之所以难以发现,是因为你不能轻松地编写测试来捕获它。如果你在beta测试期间没有发现bug,那么它可能会在代码中存在数年,就像定时炸弹等待着爆炸的那一刻。当然,也有像「Valgrind」这样的工具可以帮助捕获这些bug。但即使是Valgrind,如果问题发生时不是执行在调试模式下,或者执行时没有表现为内存方面的问题,它也不会捕获到bug。

因此,通过使用Rust,我们消除了最复杂、最不可预测的一类错误。

测试的作用

当然,内存安全问题只是所有问题的一部分。例如,我们可以编写一个函数对它的整型参数求和,但是它只随意返回了一个常数。或者我们写了一个随机数生成器却生成的是可预测的值。这种行为并没有违反Rust的内存安全保证,但显然是不正确的。

动态 | HTC明年启动区块链交易系统,整合VR内容、开发者及线下资源:HTC VIVE ORIGINALS总经理陈思铭表示,为了让内容及商业管道能够对接,HTC将在明年将启动“区块链版权交易商用系统”,她的公司还将推出内容管理和区块链验证系统,以“帮助内容创作者,文化创意工作者和线下渠道整合他们的资源。(Variety)[2019/9/4]

这就是测试的用武之地。测试允许我们检查编译器无法理解的不变量因素。基本上,我们需要确保相应的测试覆盖了返回的每个结果和程序中做出决策的每个点。在上面的例子中,测试必须检查函数是否确实返回其参数的和,还有产生的随机数是否足够随机。

在某种意义上,逻辑错误更容易处理。从定义上讲,它们与程序员编写程序时考虑的领域是相同的(而内存bug则不在其中)。

幸运的是,我们知道如何处理这些bug。在过去的几十年里,程序员和计算机科学家创造了一套方法和工具,通过使用这些方法和工具,我们可以减少逻辑错误的数量,并将它们保持在最小。

数学的力量

在最严格和复杂的途径中,程序正确性是被验证出的,而不是通过检验。像「Iris」和「Coq」这样的语言可以用来证明整个程序的正确性。不是像测试一样检查一些输入的有效性,而是把它被当作一个数学定理一样证明,一次和所有可能的输入和每个可能的场景。只有通过构造这样的证明,你才能获得程序是正确的信心(只要你的规范和理解是正确的)。

基本上,Rust做的是相同的事情,但是只针对一些限定的特殊问题,比如并发性和内存安全性。实际上,它使用逻辑来证明你的程序在这些方面是正确的。想想看,仅仅通过编写常规的Rust代码,你就可能拥有与每次编译项目时让一组数学家研究某个定理相同的信心水平。

不幸的是,证明系统的每个部分都是如此是十分复杂和耗时的,以至于通常只对软件的最关键部分进行验证,比如操作系统内核、密码算法,在某些情况下,还有语言的标准库。

在很长一段时间内,像Haskell这样的函数式编程语言的一个杀手级特性就是可以形式证明代码,而传统的命令式编程语言由于广泛使用了共享可变性、不安全的指针运算和无法控制的副作用,仍然无法应用形式证明。但是Rust可以改变这一点,尽管它是一种命令式语言,但它已然「在进行形式化证明的路上」。

「来自RustBelt项目的RalfJung等人」已经发表了一些「论文」,证明了Rust语言声明的基本不变量确实包含在标准库的一些重要原语中。

问题是,出于性能原因,Rust标准库包含许多潜在的unsafe代码和raw指针运算。

为了证明标准库的正确性,RalfJung和同事设计了一个叫做λrust的方法可以不收安全约束的使用分离的逻辑和他们自己的演算过程。通过这种演算,他们试图证明标准库原语和容器的工作方式符合预期,并且它们没有违反Rust的基本不变量。作为副产品,他们甚至在同步原语,比如「MutexGuard」和「Arc」中发现了一些bug。

但这项工作远未完成。正如作者所指出的:

我们离证明libstd中的所有东西还差很远。那将需要比我们能召集的更多的人力。相反,我们关注的是那些看起来最有趣和对类型系统最有压力的libstd原语。这主要是围绕内部的可变性。因此,我们已经验证了Cell、RefCell、Rc、Mutex、RwLock、Arc以及本文博客文章中(https://www.ralfj.de/blog/2017/07/08/rustbelt.html)。

我们希望有一天我们能够为ParityTechnologies编写的代码带来同样级别的正确性证明。结合它的控制水平、捕获内存问题和并发问题的能力,Rust正在成为最先进的主流通用语言之一,可以成功地用于编写健壮、安全和高效的程序。

Rust作为一种编程语言:https://www.rust-lang.org/en-US/

密钥泄露:http://heartbleed.com/

TypeSystem:https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html

嵌入式电子:http://blog.japaric.io/

物联网:https://www.tockos.org/

操作系统开发:https://wiki.osdev.org/Rust

库:https://github.com/AdamNiederer/faster

Faster:https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/rust.html

Iris:http://iris-project.org

Coq:https://coq.inria.fr

Formalizing:https://www.ralfj.de/blog/2015/10/12/formalizing-rust.html

RalfJung:http://plv.mpi-sws.org/rustbelt/)

RalfJung相关论文:https://people.mpi-sws.org/~dreyer/papers/rustbelt/paper.pdf

MutexGuard:https://www.ralfj.de/blog/2017/06/09/mutexguard-sync.html

Arc:https://www.ralfj.de/blog/2018/07/13/arc-synchronization.html

标签:USTHTTTPSFASTtrustwallet官网下载HTT价格https://etherscan.ioAddMeFast

比特币交易所热门资讯
美联邦法官保留SEC动议,以否认Telegram关于法规模糊性的辩护

据Cointelegraph11月28日报道,美国一名联邦法官保留了美国证券交易委员会的一项动议,即否决Telegram提出的“因法规模糊/缺乏通知而使诉讼无效”的辩护.

1900/1/1 0:00:00
上海浦东将推「监管沙箱」,打造金融科技创新“实验田”

文:梁雨山 来源:火星财经 据新华社12月12日消息,上海市浦东新区副区长王华透露,浦东将打造金融科技创新先行先试的“试验田”,在监管部门的支持下,试点开展“监管沙箱”制度,打造推动金融科技创新的良好营商环境.

1900/1/1 0:00:00
国家电网:研究建立适应区块链技术的安全保障机制

来源:新京报 记者:林子 12月15日,新京报记者自国家电网获悉,国家电网有限公司党组理论学习中心组开展区块链技术专题学习,进一步探索推进区块链技术在能源电力行业的应用,加快“三型两网、世界一流”战略实施.

1900/1/1 0:00:00
Kelly Loeffler成为美国议员,首席产品官接棒Bakkt CEO

洲际交易所旗下专注于比特币业务的子公司Bakkt已将其首席产品官MikeBlandina提拔为首席执行官。Blandina接替了本月早些时候被佐治亚州州长BrianKemp正式任命为美国参议员的KellyLoeffler.

1900/1/1 0:00:00
摩根大通区块链支付网络将于明年初在日本运行,80多家日本银行希望入网

据Cointelegraph12月10日报道,摩根大通的区块链支付网络将于2020年初在日本运行.

1900/1/1 0:00:00
以太坊的2019:年复一年,持续扩展

编者注:原标题为《以太坊的2019》前言:2019年显然是加密的寒冬期。尽管如此,项目还在建设,事情还在继续。其中以太坊生态取得较大的发展。最引入注目的是DeFi,此外其网络、DApp、开发者生态等多个方面也不断取得进展.

1900/1/1 0:00:00