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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如果大佬们对.NET方向的技术感兴趣,也欢迎在原文最下方加入我的QQ群。如需加微信群,可以私聊我微信进行加群:

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

  1. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  2. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  3. 番外篇 - Linux环境准备

     这是一个比较早的系列,最近发现一直没有更新...    asp.net core跨平台,所以我们首先需要一个linux来验证,所以第一篇就是准备我们的环境   .netcore尝试在centos6. ...

  4. salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常 ...

  5. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  6. 番外篇1:在Windows环境中安装JDK

    他山之石,可以攻玉!欢迎关注我的微信公众号 本文作为构建第一个Java程序的番外篇一,跟大家探讨下在Windows下怎么安装JDK.由于本人没有Mac,因此如果是Mac的同学,请自行百度哦! 读前预览 ...

  7. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  8. Java微信公众平台开发【番外篇】(七)--公众平台测试帐号的申请

    转自:http://www.cuiyongzhi.com/post/45.html 前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[ ...

  9. 番外篇!全球首个微信应用号开发教程!小程序 DEMO 视频奉上!

    大家好,我是博卡君.经过国庆节的七天假期,相信很多朋友都已经研究出自己的小程序 demo 了吧?我最近也利用休息时间关注了一下网上关于小程序开发的讨论,今天就利用这个番外篇谈谈自己对小程序的一些想法吧 ...

随机推荐

  1. 简单学习一下ibd数据文件解析

    来源:原创投稿 作者:花家舍 简介:数据库技术爱好者. GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简单学习一下数据文件解析 这是尝试使用Golang语言简单解析My ...

  2. 【AGC】开放式测试示例

    前言:这一次我们来带大家进入AGC领域,学习AGC相关的知识.所谓AGC就是AppGallery Connect的简称,为用户的应用进行创意.开发.分发.运营.经营各环节提供一站式服务,说的通俗一点, ...

  3. 编译器优化:何为SLP矢量化

    摘要:SLP矢量化的目标是将相似的独立指令组合成向量指令,内存访问.算术运算.比较运算.PHI节点都可以使用这种技术进行矢量化. 本文分享自华为云社区<编译器优化那些事儿(1):SLP矢量化介绍 ...

  4. BZOJ3037 创世纪(基环树DP)

    基环树DP,攻的当受的儿子,f表选,g表不选.并查集维护攻受关系.若有环则记录,DP受的后把它当祖宗,再DP攻的. #include <cstdio> #include <iostr ...

  5. Docker 03 镜像命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  6. Vue+Koa+MongoDB从零打造一个任务管理系统

    大概是在18年的时候,当时还没有疫情.当时工作中同时负责多个项目,有 PC 端运营管理后台的,有移动端 M 站的,有微信小程序的,每天 git 分支切到头昏眼花,每个需求提测需要发送邮件,而且周五要写 ...

  7. 使 Word 段落第一行空出两个字符的位置(段落首行缩进)

    描述 使 Word 段落第一行左突出两个字符的位置,即段落首行缩进的方式有两种. "视图"选项卡--"显示"组--标尺 "开始"选项卡--& ...

  8. 在 Linux 中安装 MongoDB 的流程

    下载 MongoDB官网下载社区版的安装包: 解压 上传至 Linux,安装位置自行选择.把压缩包解压到安装的目录下. 可重命名解压的文件夹名: mv mongodb-linux-x86_64-rhe ...

  9. 【java】学习路径17-用户注册登录实例(Scanner)

    要学会使用接口.继承.多态.构造方法.包等知识编写出一个用户登录注册的事例.

  10. qt unknown type name编译报错记录

    在classA中include class B,然后定义成员变量的时候,报错unknown type name了. 一共有两种可能造成这种问题: 1.circle include,同时在classA中 ...