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

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.hqwc.cn/news/213274.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚观早报 |一加12正式开启预订;OPPO Reno11系列卖点

【聚观365】11月24日消息 一加12正式开启预订 OPPO Reno11系列卖点 小鹏第三季度营收财报 Claude 2.1 聊天机器人公布 现代汽车将与伦敦大学学院合作 一加12正式开启预订 全新的一加12系列公开亮相已有一段时间&#xff0c;不久前一加官方宣布&#xff0c;该机将于12月4日…

【JavaWeb】HTMLCSSJavaScript

HTML&CSS&JavaScript 文章目录 HTML&CSS&JavaScript一、开发工具及在线帮助文档二、 HTML2.1 HTML&CSS&JavaScript的作用2.2 HTML基础结构2.3 HTML概念词汇解释2.4 HTML的语法规则2.5 常用标签 三、CSS3.1 引入方式3.2 CSS选择器3.3 CSS浮动3.4 CSS定位…

【JavaScript】3.1 项目实践:制作一个简单的网页应用

文章目录 项目需求HTML结构JavaScript逻辑添加待办事项标记待办事项删除待办事项保存待办事项 总结 在此章节中&#xff0c;我们将学习如何使用JavaScript创建一个简单的网页应用。这将是一个待办事项列表应用&#xff0c;用户可以添加新的待办事项&#xff0c;标记已完成的事项…

使用Python实现银行管理系统

使用Python实现银行管理系统 题目介绍程序演示登录开户查询取款存款转账锁定解锁存盘退出 相关代码开户功能查询功能取款功能存款功能转账功能锁定功能解锁功能存盘功能加载存盘的数据登录/登出功能主程序 完整代码 在本篇博文中&#xff0c;我们将使用Python编写一个简单的银行…

MySQL 8 配置文件详解与最佳实践

MySQL 8 是一款强大的关系型数据库管理系统&#xff0c;通过适当的配置文件设置&#xff0c;可以充分发挥其性能潜力。在这篇博客中&#xff0c;我们将深入探究 MySQL 8 常用的配置文件&#xff0c;并提供一些建议&#xff0c;帮助您优化数据库性能。 配置文件概览 在 MySQL …

GPT、GPT-2、GPT-3论文精读笔记

视频&#xff1a;GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili MAE论文&#xff1a;把bert用回计算机视觉领域 CLIP论文&#xff1a;打通文本和图像 GPT 论文&#xff1a;Improving Language Understanding by Generative Pre-Training …

机器学习笔记 - 复杂任务的CNN组合

基础CNN架构可通过多种方式进行组合和扩展,从而解决更多、更复杂的任务。 1. 分类和定位 在分类和定位任务中,你不仅需要说出在图像中找到的物体的类别,而且还需指出物体显现在图像中的边界框坐标。这类任务假设在图像中只有一个物体实例。 这个任务可通过在典型的分类网络…

Java Web 实战 21 - 用 Servlet 实现一个Hello World

用 Servlet 来写一个 Hello World~ 一 . 基本部署方式1.1 创建 Servlet 项目1.2 引入依赖1.3 创建目录1.4 编写代码继承 HttpServlet重写 doGet 方法删除 super 方法加上 WebServlet 注解写业务逻辑 1.5 打包1.6 部署1.7 验证1.8 小结 二 . 更方便的部署方式2.1 Smart Tomcat 的…

【免费】小傅哥 DDD 开发小册

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 如果在面试的时候&#xff0c;面试官问你DDD是什么&#xff0c;你怎么解释&#xff1…

Windows下安装Anaconda3并使用JupyterNoteBook

下载安装包 Anaconda官网 进官网&#xff0c;点击下载 自动根据当前系统下载对应的包了&#xff0c;安装包大约1G&#xff0c;喝杯Java耐心等待。 安装 很多人安装C盘&#xff0c;我这里放D盘。 注意&#xff1a;你的文件夹目录一定要不能有空格 然后其他的直接默认install即…

代码随想录算法训练营第四十四天【动态规划part06】 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 题目链接&#xff1a; 题目页…

马养殖场建设VR模拟实训教学平台具有灵活性和复用性

为保障养殖场生物安全&#xff0c;避免疫病传播&#xff0c;学生出入养殖场受时间和地域的限制&#xff0c; 生产实习多以参观为主&#xff0c;通过畜牧企业技术人员的讲解&#xff0c;学生被动了解生产过程。为了解决畜牧养殖实训难的问题&#xff0c;借助VR技术开展畜牧养殖虚…