【Rust 易学教程】学前准备:Cargo, 你好

news2024/11/19 1:42:26

当你开始学习 Rust 时,很快就会遇到 Cargo,它是 Rust 生态系统中用于构建和运行 Rust 应用程序的标准工具。在 《Rust 易学教程》 首篇中,我会简要概述一下 Cargo 是什么,以及它如何适应更广泛的生态系统。

安装

请按照 https://rustup.rs/ 上的说明操作。在终端中运行以下命令,然后按照说明操作。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

在这里插入图片描述

这将提供 Cargo 构建工具(Cargo)和 Rust 编译器(rustc)。同时,你还将获得 rustup,它是一个命令行程序,你可以使用它安装不同的编译器版本。

在安装 Rust 之后,你应该配置你的编辑器或IDE来使用 Rust。大多数编辑器通过与rust-analyzer 来实现这一点,rust-analyzer 为VS Code、Emacs、Vim/Neovim和许多其他编辑器提供自动完成和跳转到定义功能。还有一个你可能没听说的 IDE 叫做[RustRover](https://www.jetbrains.com/rust/)

在 Debian/Ubuntu 上,你也可以通过 apt 安装 Cargo、Rust 源代码和 Rust 格式化程序。然而,这会让你得到一个过时的 Rust 版本,并可能导致意想不到的行为。命令如下:
sudo apt install cargo rust-src rustfmt

Rust 生态

Rust 的生态系统由许多工具组成,其中主要的是:

  • rustc: Rust 编译器,将 .rs 文件转换为二进制文件和其他中间格式。
  • cargo: Rust 依赖管理器和构建工具。Cargo 知道如何下载依赖项(通常托管在 https://crates.io 上),并且在构建项目时将它们传递给 rust。Cargo 还带有一个内置的测试运行器,用于执行单元测试。
  • rustup:Rust 工具链安装程序和更新程序。此工具用于在发布新版本的 Rust 时安装和更新 Rust 和 cargo。此外,rust 还可以下载标准库的文档。你可以同时安装多个版本的 Rust,并且 Rust 可以让你根据需要在它们之间进行切换。
  • Rust 有一个快速的发布计划,每六周发布一个新版本。新版本保持了与旧版本的向后兼容性,而且它们还支持新功能。
  • 有三个发布渠道: “stable”, “beta”, 和 “nightly”。
  • 新功能是 “nightly” 测试,“beta” 是每六周 “stable”一次。
  • 还可以从其他注册表、git、文件夹等中解析依赖项。
  • Rust 也有版本: 当前的版本是 Rust 2021。之前的版本是 Rust 2015 和 Rust 2018
    • 允许版本对语言进行向后不兼容的更改。
    • 为了防止破坏代码,版本是可选择的: 你可以通过 Cargo.toml 文件为你的 crate 选择版本。
    • 为了避免分裂生态系统,Rust 编译器可以混合为不同版本编写的代码。
    • 值得一提的是,不通过 cargo 直接使用编译器是非常罕见的,大多数用户从不这样做。
    • Cargo本身是一个非常强大和全面的工具。它具有许多高级功能,包括但不限于:
      • Project/package structure
      • workspaces
      • 开发依赖和运行时依赖管理/缓存
      • 构建脚本
      • 全局安装
      • 它还可以通过子命令插件(如cargo clippy)进行扩展。

更多阅读,请参考官方的 Cargo 手册。

Rust 代码示例

《Rust 易学教程》 中,我们将主要通过可以通过浏览器执行的示例来探索 Rust 语言。这样能使得配置更容易,并确保每个人都有一致的体验。

但我仍然鼓励你安装 Cargo: 它将使你更容易进行练习。在教程的最后一部分,我们将做一个更大的练习,向你展示如何使用依赖关系,为此需要使用到 Cargo。

fn main() {
    println!("Edit me!");
}

使用 Cargo 在本地运行代码

如果你想在自己的电脑上试验这些代码,你需要首先安装Rust。按照 Rust Book 中的说明进行操作。在撰写本教程时,最新的稳定 Rust 版本号如下:

% rustc --version
rustc 1.69.0 (84c898d65 2023-04-16)
% cargo --version
cargo 1.69.0 (6e9a83356 2023-04-12)

你也可以使用任何更高的版本,因为 Rust 保持向后兼容性。

在此基础上,按照以下步骤从本文中的一个示例构建 Rust 二进制文件:

  1. 单击要复制的示例上的“复制到剪贴板”按钮。
  2. 使用 cargo new exercise 为你的代码创建一个新的 exercise/ 目录:
$ cargo new exercise
     Created binary (application) `exercise` package
  1. 导航到 exercise/ 并使用 cargo run 来构建和运行二进制文件:
$ cd exercise
$ cargo run
   Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)
    Finished dev [unoptimized + debuginfo] target(s) in 0.75s
     Running `target/debug/exercise`
Hello, world!
  1. 用你自己的代码替换src/main.rs中的代码。例如:
fn main() {
    println!("Edit me!");
}
  1. 使用 cargo run 来构建并运行更新后的二进制文件:
$ cargo run
   Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)
    Finished dev [unoptimized + debuginfo] target(s) in 0.24s
     Running `target/debug/exercise`
Edit me!
  1. 使用 cargo check 快速检查项目的错误,使用 cargo build 编译它而不运行它。对于正常的调试构建,将在 target/debug/ 中找到输出。使用 cargo build -releasetarget/release/ 中生成一个优化的 release build
  2. 你可以通过编辑 Cargo.toml 为你的项目添加依赖项。当运行 cargo 命令时,它将自动为你下载并编译缺少的依赖项。

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

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

相关文章

[C++]3.类和对象下(this指针补充)+ 类和对象中构造函数和析构函数。

类和对象下(this指针补充) 类和对象中构造函数和析构函数 一.this补充:1.概念总结:2.两个问题: 二.构造函数和析构函数:一.类的默认构造:1.初始化和清理:2.拷贝复制:3.取…

数据结构: AVL树

目录 1.AVL树的概念 2.AVL树的模拟实现 AVL树的结构定义 插入 对平衡因子的讨论 旋转 对旋转情况的讨论 1.单旋 1.1左单旋 1.2右单旋 2.双旋 2.1左右双旋 2.2右左双旋 检查是否是AVL树 1.AVL树的概念 当向二叉搜索树中插入新结点后,如果能保证每个结点…

STM32F4XX之串口

一、标准串口(UART)介绍 1、通信协议相关概念 1.1同步通信和异步通信 (1)同步通信:两个器件之间共用一个时钟线,要发送的数据在时钟的作用下一位一位发送出去。 (2)异步通信:指两个器件之间没…

Java基础(第一部):IDEA的下载和安装(步骤图) 项目结构的介绍 项目、模块、类的创建。第一个代码的实现

文章目录 IDEA1.1 IDEA概述1.2 IDEA的下载和安装1.2.1 下载1.2.2 安装 1.3 IDEA中层级结构介绍1.3.1 结构分类1.3.2 结构介绍project(项目、工程)module(模块)package(包)class(类) …

数据结构与算法-树

树 🎈1.树和二叉树🎈2.树🔭2.1树的定义🔭2.2树的4种表示方法🔭2.3树的基本术语🔭2.4树的抽象数据类型定义 🎈3.二叉树🔭3.1二叉树的定义🔭3.2二叉树的抽象数据类型定义&a…

MySQL 性能分析

MySQL 性能分析 对 mysql 进行性能分析,主要就是提升查询的效率,其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式: 方式一:查看 sql 执行频次 show global status like ‘Com_______’; // global 表示全局 show s…

力扣每日一题49:字母异位词分组

题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…

国产低功耗MCU芯片:Si24R03

Si24R03集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块,是一款高度集成的低功耗SOC片。 应用领域: 1、物联网 2、智N门锁 3、电机控制 4、消费电子 5、工业控制 其无线收发器模块是专为低功耗无线场合设计,在关…

微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板

目录 一.自定义组件 1.1.创建 1.2.定义 1.3.编写 1.4.使用 二.会议 2.1.数据 2.2.显示 2.3. 样式 三.个人中心 3.1.页面 3.2.样式 四.投票 4.1.引用 4.2.数据 4.3.页面 4.4.样式 好啦今天就到这里了,希望能帮到你哦!!&…

UGUI交互组件Dropdown

一.Dropdown的应用 Dropdown控件官方翻译为下拉选单,游戏中有一定程度的使用,其优势是用户体验优秀,节省界面空间,下图为某游戏的实际应用 二.Dropdown对象的结构 对象说明Label当前选中的选项Arrow向下或向上箭头表示展开方向Te…

Ubuntu服务器配置qq邮箱发送信息

效果: 此处设置的是自己给自己发送,配合linux的cron实现定时触发发送事件的效果 实现过程: 安装邮箱客户端Postfix sudo apt-get install postfix配置Postfix:编辑Postfix的主要配置文件 /etc/postfix/main.cf,并在…

uni-app:js实现数组中的相关处理

一、查询数组中,某一项中的某个数据为指定值的项(find() 方法) 使用分析 使用数组的 find() 方法来查询 id 为 0 的那一项数据。这个方法会返回满足条件的第一个元素,如果找不到符合条件的元素,则返回 undefined。使用…

跨路由器路由设置

1781的eth0网口地址设置为192.168.3.45并接入192.168.3.0网段里; 1781的eth1网口地址设置为10.0.9.20并接入10.0.0.0网段里,并且连接在网关地址为10.0.9.1的路由上。 192.168.1.140的摄像头接在网关为10.0.9.1的路由器上 现在的需求是1781网关在访问19…

CardView设置任意角为圆角

注意:material:1.1.0以上版本在RadiusCardView节点下一定要添加 android:theme“style/Theme.MaterialComponents”,不然会报错,另外,由于是重写自MaterialCardView,所以一定要导入material包: implementat…

2022年京东双11食品饮料品类数据回顾

2022年双11,根据京东官方发布的数据显示,京东百货中,京东新百货的589个品类10025个品牌成交额同比增长100%。而在食品饮料行业中,也有一些在大促期间成交额同比涨幅超过100%的品牌。 下面,结合鲸参谋平台提供的数据&am…

达梦mysql数据迁移出现datetime兼容问题

迁移工具无法连接mysql 这里需要指定驱动即可 数据迁移datetime数据无法导入 原因是时间中间带有T,达梦不支持这个格式的时间 解决办法也很简单,换最新的达梦驱动。 驱动安装文件里边就有,不用再去下载了。

【lesson13】进程地址空间收尾

文章目录 进程地址空间存在的原因原因一原因二原因三 重新理解什么是挂起? 进程地址空间存在的原因 原因一 凡是非法访问或者映射,OS都会识别到,并终止该进程。 例子: 我们会发现我们定义的字符串常量只有只读权限,…

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 (155)纠删码原理纠删码原理纠删码相关命令纠删码策略解释 (156)纠删码案例实操参考文献 (155)纠删码原理 纠删码原理 默认情况下,一个文件在HDFS里会保留3个副本,以此提高…

2023年【北京市安全员-A证】考试报名及北京市安全员-A证考试资料

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-A证考试报名根据新北京市安全员-A证考试大纲要求,安全生产模拟考试一点通将北京市安全员-A证模拟考试试题进行汇编,组成一套北京市安全员-A证全真模拟考试试题,学员可…

【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!

正文 亲爱的小伙伴们,大家好!我是小米,一个热爱技术分享的程序员,今天我为大家带来了一篇有关美团面试题的热门话题:ConcurrentHashMap 和 Hashtable 有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理…