7

【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较

 1 year ago
source link: https://www.cnblogs.com/weskynet/p/16808320.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较

前言:突然想打算把Rust作为将来自己主要的副编程语言。当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽。缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下,在.NET平台(C#语言)、Golang、Rust里面进行选择一个。后面随着多方面的对比,最终打算选择Rust,理由是:卧槽,性能有点6!!!于是,就有了下面这个文章,自己搭建环境时候,以及后续的一些基础的操作、性能比较,写成了这个文章,供大家参考戏谑。

废话不多说,直接开撸。以下均是在Windows环境下进行:

1、先安装Rust环境。Rust环境下载地址:https://www.rust-lang.org/zh-CN/tools/install

然后根据自己的需要,选择下载的版本。

1995789-20221019232457814-715908080.png

2、安装期间,会提示操作选项,我这边选择的是默认 1.安装完成以后,会有对应的提示。

1995789-20221019232511246-493396961.png

3、rustc --version可以查看rust环境的版本。

1995789-20221019232525446-2119108451.png

4、查看cargo工具版本。rust程序的编译,离不开cargo。

1995789-20221019232534745-1520984565.png

5、如果需要对本地的rust环境进行升级,可以使用命令  rustip update(图片标识错了,大家看命令即可)

1995789-20221019232543594-1715209484.png

6、使用命令 rustup doc可以调出教程文档,不过都是英文的,英文好的大佬,用它来学习也是很不错的选择。

1995789-20221019232552008-1590397035.png

7、可以通过 cargo new 项目名称 来创建一个新的项目。创建以后,会有一些初始的内容。

1995789-20221019232605164-2056757293.png

8、cargo build会进行编译,cargo run可以直接运行编译后的程序。默认创建的是一个hello world,所以可以直接输出。

1995789-20221019232613718-1541324941.png

9、编译以后,在target文件夹内,会生成对应的可执行文件。cargo build默认是debug模式进行编译。

1995789-20221019232621801-378540957.png

10、我们也可以通过VS CODE来进行编辑代码和编译,效率高一点。

1995789-20221019232633700-1549799373.png

11、安装Rust的拓展。目前没这个拓展了,可以选择 rust-analyzer,应该是原先Rust的更新版本。也有一百多万的下载量了,看来玩的人有点多。

1995789-20221019232649953-1606038729.png

12、代码debug工具,这个看个人,可以不安装,没啥影响。配图可以不管。它只是提供了一个debug功能。

1995789-20221019232700646-1899856498.png

13、VS CODE上面可以直接运行,运行时候默认会编译到代码文件同一个目录下。控制台也可以看到运行以后的输出结果。

1995789-20221019232717653-904641461.png

14、一些基础语法说明,可以直接看下图标识和说明。

1995789-20221019232731314-775304077.png

15、Rust的变量比较神奇,默认的变量都是不可变的,如果需要允许可变,需要添加mut关键字来区分。

1995789-20221019232744861-1205980503.png

16、定义一个方法/函数以及其他基础操作,可见下图标识说明。

1995789-20221019232759730-1606606398.png

17、Rust的第三方包,都在 https://crates.io 上面。类似于,.NET开发上面,对应的Nuget包网址一样。不过Cargo目前没有VS这样的强大编译器集成了直接可视化查询的东西,所以我们需要自己手动查找要的包以及版本。

 

1995789-20221019232824071-222745179.png

18、例如我要用一个time包来做获取时间的。我直接选个最新版本,0.3.15

1995789-20221019232832524-1265985554.png

然后在 cargo.toml里面,在dependencies里面添加该包的名称和版本号。添加以后,会自动搜索有关版本进行下载引用。

1995789-20221019235732228-1786197857.png

19、然后在代码内进行引入。引入包,使用  extern crate 包名称。例如time。use 类似C#里面的 using,可以using包内的一些功能或者模块。例如我要获取time里面的now()方法,不过这个包看来现在没有这个方法了。

Rust这方面的语法和C++还是比较接近,通过 :: 来进行引出下一级;类似.NET里面的 XXX.XXX的这个句点。

1995789-20221019232841840-2041631992.png

20、咱们换一个,换成 chrono这个包

1995789-20221019232849882-1772043504.png

21、然后引入有关版本进来,同上面的time操作。因为time包没有我要的,所以就干掉就好了。

1995789-20221019232857624-675129687.png

22、引入包,以及使用它里面的所有功能模块,可以使用*来代替,这点跟Java或Python比较类似。

1995789-20221019232905415-2051723056.png

23、然后写一个累加器,用来做性能测试使用。例如,从1累加到10亿。代码可见下图。

1995789-20221019232913288-1799698313.png

24、此处我再创建一个.NET 6都控制台程序,也做同样的事情,看看谁更快。有关代码,如下图所示,功能与Rust的代码一模一样。

1995789-20221019232924848-1650663358.png

25、为了更加公平,咱们把程序都编译为release版本。使用命令 cargo build --release  可以指定编译为release版本

1995789-20221019232936110-1320543356.png

26、VS上对.NET 6开发的程序,也编译成release版本。

1995789-20221019232945622-1378178456.png

27、为了方便查看效果,我们都在控制台下面准备好这两个程序。

1995789-20221019233004632-1544637773.png

28、两个程序都运行一下看看效果。可以发现各自的大概耗时。Rust大约耗费40~50MS,.NET6编写的大约耗费600~700MS,卧槽,差距有点大。

1995789-20221019233013863-260369604.png

29、那再来个中间的语言,C++来看看效果。写一个功能一模一样的C++程序,也编译为release版本,然后再看效果。由于C++版本输出详细时间,包括毫秒等,写起来比较啰嗦,所以就简单点,直接输出耗时的毫秒数了。有关代码以及说明,见下图。

1995789-20221019233029583-1622052008.png

30、C++的运行输出结果,大约接近200MS,比.NET6快400MS,但是比Rust居然差距也这么多?unbelievable!

1995789-20221019233038094-1802733068.png

31、为了客观一点,咱再打开Rust与.NET6的程序,以及和C++程序,再运行一下看看结果。结果如下图所示,还是差不多的保持上面的结果。

1995789-20221019233045438-479639462.png

32、总结一下:Rust依靠强大的性能,以及安全性(你写代码的时候就可以感受到了,如果被检测到代码不够安全,波浪线或者错误提醒会一直提示你,直到你换个写法),已经开始被更多的人采纳。一些科普类的,就不继续描述了,大佬们要是感兴趣,可以自行去探索一下。如需转载,请注明文章作者以及出处。

作者:Wesky, 原文出处【https://www.cnblogs.com/weskynet/p/16808320.html】

 如需以上的三个demo源码项目,可以微信扫下方二维码,在公众号内发送【20221019】即可获取。

1995789-20221020002211703-424482393.jpg

以上就是该文章的全部内容,要是觉得有帮助,欢迎一键三连啊!!!

备注:以上文章测试内容,仅个人测试使用,并不代表真实性能,大家客观围观(或戏谑),希望不会被我带跑偏。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK