Rust语言入门教程(一) - 简介及Cargo使用

news2024/11/17 13:52:17

Rust编程入门

为什么学习Rust

我本人是一个DevOps工程师,并不是专职的开发人员,但需要了解各种各样的语言的基本知识和特性,以便在不同的项目中帮助开发人员设计软件架构,部署流程以及进行错误排查和调试。但是对任何新生的优秀事物保持足够的好奇心,往往会给我们更多的机会,并产生新的思想火花,让我们先走马观花的看一看Rust是什么样子,说不定你就会对它产生浓厚的兴趣。

如果你决定了要学习这门语言,那么至少应该运用你所学的知识进行一些小的练习,甚至用它来写一个自己的项目。由于Rust的学习曲线还是比较陡峭,因此在实践中总结并进步是十分重要的。请添加图片描述
如上图所示,也许你的代码通过编译都需要花费很大的力气,而这就要求你对Rust的基础知识掌握牢固,否则这样陡峭的学习曲线很容易让初学者从入门到放弃。

Rust的简介及历史

Rust是一门系统编程语言,它提供了一些优秀的特性:

  • 内存安全: 在编译阶段就保证了内存的安全;
  • 无畏并发: 由于更优秀的安全性,所以在进行并发编程时更加无所畏惧,因为所有的不安全因素都会在编译时被发现;
  • 快速:由于零成本的抽象和其他优秀特性,Rust具有惊人的运行速度和性能;

相比之下, 一些高级语言如Ruby和Python虽然可以保证内存安全, 但是却很难做到高并发和高性能。 一些系统编程语言如C语言和C++, 虽然可以获得高性能,以及一定程度上的高并发,但是却总是被内存安全问题所困扰。

Rust起源于2006年,最初是Mozilla公司的一名雇员Graydon Hoare的个人项目。 Mozilla公司从2009年开始赞助Rust的开发, 并于2015年首次发布了Rust的1.0版本。因此, Rust至今(2023)已经有8年的历史了,并且还有9年的孵化期。相比之下, C++已经有38年的历史, 而C语言已经有48年的历史了。

Mozilla赞助Rust的原因正是因为受够了C++的内存安全问题,而想要寻找一种更好的语言来开发Firefox浏览器。 2017年发布的Firefox quantum就是用Rust重写的, 它的运行速度是以前版本的两倍多,而且使用中出现的bug大大的减少了。目前在Firefox的代码中约有150多万行的代码是Rust编写的。

Cargo

Cargo是一个非常好用的Rust工具,在我们学习并使用Rust的过程中,Cargo会贯穿始终。

  • Cargo = Package Manager。一门系统编程语言, Rust居然会有专门的包管理器,这不得不让人惊喜。Cargo可以用于查找,安装并管理我们需要使用的Rust包;
  • Cargo = Build System。没有什么Makefile, Cargo就是Rust的Build System;
  • Cargo = Test Runner. 直接使用Cargo运行测试;
  • Cargo = Doc Generator. 用Cargo生成文档;

Cargo集成了其他各种工具的优点和功能,如npm, pip, bundler, make.

创建第一个Rust项目

假设你已经安装好了Rust, 现在你就可以用Cargo命令来创建一个Rust项目。

cargo new hello

将会看到下面的输出和目录结构:
在这里插入图片描述
可以看到, Cargo为我们创建了一个名为hello的目录, 里面包含:

  • 一个toml格式(Tom’s obvious minimal language)的项目配置文件;
  • 源代码目录src, 里面包含main.rs文件,是程序运行的入口, 可见Rust的源代码文件后缀是.rs

现在我们来看一下Cargo.toml这个项目配置文件:

[Package]
name = "hello"      
version = "0.1.0"
authors = ["Nathan Stocks <nathan.stocks@gmail.com>"]
edition = "2018"

[dependencies]

其中:

  • name: 项目的名称, 与目录名称和Git Repo的名称都无关;
  • version: 项目的当前版本号, 格式是Semantic Versioning
  • authors: 项目作者, 是一组名字加email地址, Cargo会自动从一些可能的位置查找这个值并自动填入, 比如在你的Git Config文件中就很可能有这个信息;
  • editipn: 应该是最新的版本(2018), 如果Cargo没有自动生成这一行的话,说明你的rust版本较低,你应该运行rustup update升级你的Rust版本;
  • dependencies: 项目所需的依赖包,后面的章节中再细说;

再来看一下main.rs的内容:

fn main {
	println!("Hello, world!");
}

Cargo已经为我们编写了一个Hello world示例代码,我们可以直接运行。
在这里插入图片描述
可以看到, Cargo会先编译代码,并运行出执行结果,在终端打印出Hello, world! 如果我们再运行一次代码,将会出现下面的输出:请添加图片描述
由于我们的代码并没有变化,所以第二次运行的输出中可以看到Cargo并没有对代码进行重新编译。

当我们运行上述命令时,实际上Cargo已经构建了一个可执行文件并运行,它的位置是:

target/debug/hello

这个目录下会存放Cargo构建的所有产物,因此在.gitignore文件中应该加入这个目录,以防这些构建产物提交到git仓库中。我们可以直接运行这个可执行文件, 得到与cargo run同样的结果:
请添加图片描述
我们注意到, hello这个可执行文件在debug目录下, 这是因为默认情况下, Cargo会以debug模式编译我们的代码,如果想不以debug模式编译,则需要加上--release参数, 请添加图片描述
这样的话,大多数代码执行的速度会更快,但编译的时间可能会更长,构建产物会保存在target/release/目录下。

小结

本章介绍了Rust语言的历史和主要特性,以及如何用Cargo进行一个Demo项目的创建和运行。下节会介绍Rust语言的一些基础概念及使用,如变量,作用域等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1246116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型概述(三):基于亚马逊云科技的研究分析与实践

上期介绍了基于亚马逊云科技的大语言模型相关研究方向&#xff0c;以及大语言模型的训练和构建优化。本期将介绍大语言模型训练在亚马逊云科技上的最佳实践。 大语言模型训练在亚马逊云科技上的最佳实践 本章节内容&#xff0c;将重点关注大语言模型在亚马逊云科技上的最佳训…

数据结构算法-贪心算法

引言 贪心&#xff1a;人只要有 “需求“ &#xff0c;都会有有点“贪“&#xff0c; 这种“贪“是一种选择&#xff0c;或者“”取舍“ RTS&#xff08;即时战略&#xff09;游戏&#xff1a; 帝国时代里 首先确保拥有足够的人口 足够的粮食&#xff0c;足够的战略资源 足够的…

VMware vShere download

VMware 前言 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 vSphere 的两个核心组件是 ESXi 和 vCenter Ser…

前端必学——实现电商图片放大镜效果(附代码)

放大镜可以说是前端人必须学会的程序之一,今天的案例为大家展示一下怎么实现放大镜的效果&#xff01; 效果图展示 整个效果就是当鼠标放到展示图上的时候&#xff0c;会出现一个遮罩层以及弹出来一个框展示一个详情图&#xff0c;并且鼠标移动的时候详情图跟着移动&#xff0c…

老外对开发信的评价是什么?如何写开发信?

老外对开发信的评价和态度怎么样&#xff1f;国外客户喜欢的开发信类型有哪些&#xff1f; 许多中国公司和个人都在与老外打交道时&#xff0c;不可避免地需要发送开发信。但是&#xff0c;老外对开发信的评价究竟如何呢&#xff1f;在这篇文章中&#xff0c;蜂邮将深入探讨老…

【代码可视化实践】代码变更影响分析 | 京东云技术团队

1.前言 笔者前文“浅析代码可视化”中讲述了代码可视化的基本实现原理&#xff0c;并给出了一些业界的应用场景。由于涉及原理和技术范围较广&#xff0c;以笔者能力难以做到面面俱到&#xff0c;为了减少信息传递偏差&#xff0c;便给出了一些信息来源供读者深入阅读。不过针…

css图片缩放属性object-fit说明

object-fit 属性可以设置以下值&#xff1a; 属性值说明例子fill填充容器&#xff0c;可能会改变图片的比例。object-fit: fill;contain保持图片的原始比例&#xff0c;确保图片完全包含在容器内。object-fit: contain;cover保持图片的原始比例&#xff0c;确保图片覆盖整个容…

微信小程序开发资源汇总

本文收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。本文不是一篇关于如何学习微信小程序的入门指南&#xff0c;也非参考手册&#xff0c;只是一些资料的整理。 本仓库中的资料整理自网络&#xff0c;也有一些来自网友的推荐。 官方文档 小程序设计指南…

【超详细】手搓一个微信日记本

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资料&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 这里对之前的微信记事本小程序进行了重新编写&#xff0c;增加了更加详细的步骤描述&#xff0c;将全部图片都改成了本地图…

文心一言 VS 讯飞星火 VS chatgpt (142)-- 算法导论12.1 2题

二、用go语言&#xff0c;二叉搜索树性质与最小堆性质(见 6.1 节)之间有什么不同?能使用最小堆性质在 O(n)时间内按序输出一棵有 n 个结点树的关键字吗?可以的话&#xff0c;请说明如何做&#xff0c;否则解释理由。 文心一言&#xff1a; 在二叉搜索树&#xff08;Binary …

openEuler 22.03 LTS x86_64 cephadm 部署ceph18.2.0 未完成 笔记

环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

6 个有效且可用的顶级 Android 数据恢复工具

经过测试 42 种数据恢复软件产品&#xff0c;发现奇客数据恢复安卓版是 Android 设备的最佳选择。 过去几十年来&#xff0c;我一直在科技行业工作&#xff0c;经常帮助人们应对计算机灾难&#xff0c;包括丢失数据。 Android 数据恢复应用程序不在您的设备上运行&#xff0c…

教育+AIGC开局之年:教育派作业帮、科技派科大讯飞同路不同道

配图来自Canva可画 与往年相比&#xff0c;今年的双11显得格外冷清&#xff0c;GMV&#xff08;商品交易总额&#xff09;数据和增长数据无人提及&#xff0c;京东、淘宝天猫、抖音、快手等平台的火药味都淡了。一片祥和有序的双11氛围中&#xff0c;昔日的K12教育企业与科技企…

OpenMLDB SQL 开发调试神器 - OpenMLDB SQL Emulator

今天为大家介绍一款来自 OpenMLDB 社区的优秀独立工具 - OpenMLDB SQL Simulator&#xff08;https://github.com/vagetablechicken/OpenMLDBSQLEmulator&#xff09; &#xff0c;可以让你更加高效方便的开发、调试 OpenMLDB SQL。 为了高效的实现时序特征计算&#xff0c;Op…

芯片设计—低功耗isolation cell

&#xff08;一&#xff09;低功耗isolation cell的目的 低功耗架构设计需要前后端拉通规划&#xff0c;前端设计有PMU功耗管理单元&#xff0c;比如A模块电压常开&#xff0c;B模块电压可关断&#xff0c;那么请思考&#xff0c;当B模块关断电压后&#xff0c;B模块输出到A模…

美国服务器在大陆连不上怎么回事?

​  在租用任何美国服务器之前&#xff0c;都需要先搞清楚一些使用问题&#xff0c;毕竟服务器能够不间断地访问也是站在们所期望的。但有时&#xff0c;美国服务器网站或许也会突然出现在大陆打不开的情况&#xff0c;在面临这种情况时&#xff0c;我们应该怎么做? 查看连不…

第98步 深度学习图像目标检测:SSD建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;SSD&#xff08;Single Shot MultiBox Detector&#xff09;模型。 二、SSD简介 SSD&#xff08;Single Shot MultiBox Detector&#xff09;是一种流行的目标检…

鼠标点击位置获取几何体对象_vtkAreaPicker_vtkInteractorStyleRubberBandPick

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;框选或者点选某一区域&#xff0c;并获取区域prop3D对象&#xff08;红线内为有效区域&#xff0c;polydata组成的3d几何对象&a…

精益制造中的周转箱和工具柜优势

制造业&#xff08;Manufacturing industry&#xff09;是指机械工业时代利用某种资源&#xff08;物料、能源、设备、工具、资金、技术、信息和人力等&#xff09;&#xff0c;按照市场要求&#xff0c;通过制造过程&#xff0c;转化为可供人们使用和利用的大型工具、工业品与…

杰发科技AC7801——EEP内存分布情况

简介 按照文档进行配置 核心代码如下 /*!* file sweeprom_demo.c** brief This file provides sweeprom demo test function.**//* Includes */ #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"/* Define …