素数|连续 3 年最受欢迎:Rust,香!

文章图片
阿里妹导读:我们在选择一种开发语言时会综合考量各方面的特性,根据实际的需求适当取舍。鱼和熊掌往往不可兼得,要想开发效率高,必然要牺牲性能和资源消耗,反之亦然。但是Rust却出其不意,令人眼前一亮!本文将从性能、内存安全、开发效率、跨平台性及生态等五个方面,对Rust这一编程语言进行一些科普性质的分享。
文末福利:下载《软件技术职业选择之道》电子书。
一性能对比
不同的语言使用不同的内存管理方式,一些语言使用垃圾回收机制在运行时寻找不再被使用的内存并释放,典型的如Java、Golang。在另一些语言中,程序员必须亲自分配和释放内存,比如C/C++。Rust 则选择了第三种方式:内存被一个所有权系统管理,它拥有一系列的规则使编译器在编译时进行检查,任何所有权系统的功能都不会导致运行时开销。Rust 速度惊人且内存利用率极高,标准Rust性能与标准C++性能不相上下,某些场景下效率甚至高于C++。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务。网上已经有了很多关于Rust性能分析对比的文章,不过为了获得一手的资料,还是自己动手来的更加真实。我选择了Python,C++,Golang这3种语言来和Rust做性能对比。
性能测试场景设计
同样的算法用4种语言分别实现,对比在规定的时间内完成任务的次数。本次测试选择的算法是找出10000000以内的所有素数,比较在一分钟内完成找出所有素数任务的次数。
源代码链接见[1]。
静态编译(或者打包)后生成的二进制大小对比
结论:(二进制大小)python > golang > rust > c++
运行速度对比
本场景下比较1分钟内找出1000000以内所有素数的次数。
结论:(运行效率)rust > c++ > golang > python
重点来了,在3台不同的机器上测试四次的结果显示:Rust效率居然高于C++!!!
内存消耗对比(粗略计算)
结论:(内存消耗) python > golang > rust > c++
CPU消耗对比(粗略计算)
结论:(CPU消耗)golang > python > rust= c++
以上便是我的测试结果,测试代码、二进制和测试结果参考附件bin.zip,第一次测试后看到结果,有些吃惊,rust的性能居然超过了c++,不可思议,于是又在网上搜索,找到了别人已经完成的rust性能测试,网上的结果更让人吃惊,先看第一篇,原始链接见[2]。
我直接截图看结论:
文章图片
文章图片
以上为Rust vs Golang。
文章图片
文章图片
以上为Rust vs C++。
结论:以上截图显示,Rust在性能和资源消耗上不仅大幅度优于Golang,并且和C++性能不相上下,某些场景下效率甚至优于C++。
以上两种测试场景只是测试一些简单的算法,接下来我们看一下在实际使用中的性能资源占用对比,依然是在网上找到了一篇测试报告[3],该测试报告用Python、PyPy、Go、Rust四种语言实现了一个web后端,接下来使用wrk分别对四个http服务器进行压测,该测试场景比较贴近实际,直接截图看结论:
文章图片
文章图片
结论(性能):在实际作为后端服务使用的场景下,Rust比Golang依然有明显性能优势。
文章图片
结论(资源占用):在内存占用上Rust的优势更加明显,只用了Golang的1/3。
综合以上3个测试,Rust在运行效率和资源消耗上的优势十分明显,和C++同一个级别,远远优于Golang !
二内存安全性
Rust 最重要的特点就是可以提供内存安全保证,而且没有额外的性能损失。在传统的系统级编程语言( C/C++) 的开发过程中,经常出现因各种内存错误引起的崩溃或bug ,比如空指针、野指针、内存泄漏、内存越界、段错误、数据竞争、迭代器失效等,血泪斑斑,数不胜数;内存问题是影响程序稳定性和安全性的重大隐患,并且是影响开发效率的重大因素;根据google和微软 两大巨头的说法,旗下重要产品程序安全问题70%由内存问题引发[4], 并且两个巨头都用利用Rust语言来解决内存安全问题的想法。Rust语言从设计之初就把解决内存安全作为一个重要目标,通过一系列手段保证内存安全,让不安全的潜在风险在编译阶段就暴露出来。接下来根据自己粗浅的理解,简单介绍Rust解决内存安全的手段有哪些。
1所有权规则
1)Rust 中每一个值或者对象都有一个称之为其 所有者(owner)的变量。
例如:
let obj = String::from("hello");
推荐阅读
- 波塞冬|游戏王:童年最爱下级白板怪兽魔兽,而帝王海马是海神波塞冬车夫
- 阿根廷单日新增病例数连续三天破万,累计确诊病例达392009例
- 特朗普接受提名演讲连续甩锅中国,外交部:敦促美方不要借大选拿中国说事
- 成团|《少年之名》成团,今年最糊的一档选秀,完全是“回锅肉”大乱炖
- 跑出“加速度” 全国交通固定资产投资连续4个月实现正增长
- 加速度|跑出“加速度” 全国交通固定资产投资连续4个月实现正增长
- 阿根廷新冠肺炎确诊病例连续三天新增过万 社会强制隔离继续延长
- |西海岸新区一男子连续高空抛物 涉嫌以危险方法危害公共安全罪被警方采取刑事强制措施
- 印度新冠病例一天增7.7万,连续三周成全球单日新增病例最多国家
- 综艺|《少年之名》成团,今年最糊的一档选秀,完全是“回锅肉”大乱炖
