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

简介: 突然想打算把Rust作为将来自己主要的副编程语言。当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽。缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下,在.NET平台(C#语言)、Golang、Rust里面进行选择一个。


前言:突然想打算把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

 

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


目录
相关文章
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
142 77
|
1月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
43 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
1月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
48 12
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现链栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储整数,最大
46 9
|
1月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
42 7
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
40 5
|
1月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
41 5
|
2月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
66 13
|
2月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
155 13
|
3月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
57 5

热门文章

最新文章