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

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

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

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

相关文章

【经验分享】如何构建openGauss开发编译提交一体化环境

前文 本文适合对openGauss源代码有好奇心的爱好者,那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的?openGauss的编译环境是如何构建的?如何向openGauss提交代码,笔者集合官方和几位博主实践提…

经典卷积神经网络 - VGG

使用块的网络 - VGG。 使用多个 3 3 3\times 3 33的要比使用少个 5 5 5\times 5 55的效果要好。 VGG全称是Visual Geometry Group,因为是由Oxford的Visual Geometry Group提出的。AlexNet问世之后,很多学者通过改进AlexNet的网络结构来提高自己的准确…

R语言生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线,通过多个来自经典…

React 框架

1、React 框架简介 1.1、介绍 CS 与 BS结合:像 React,Vue 此类框架,转移了部分服务器的功能到客户端。将CS 和 BS 加以结合。客户端只用请求一次服务器,服务器就将所有js代码返回给客户端,所有交互类操作都不再依赖服…

muduo源码学习base——TimeStamp(UTC时间戳)

TimeStamp(UTC时间戳) 前置copyable和noncopyableTimeStampnow() 此博客跟着b站上的:大并发服务器开发(实战)学习做的笔记 前置 值语义、对象语义: 值语义:所谓值语义是一个对象被系统标准的复制方式复制后…

Spring Cloud之服务注册与发现(Eureka)

目录 Eureka 介绍 角色 实现流程 单机构建 注册中心 服务提供者 服务消费者 集群搭建 注册中心 服务提供者 自我保护机制 原理分析 Eureka 介绍 Eureka是spring cloud中的一个负责服务注册与发现的组件,本身是基于REST的服务,同时还提供了…

(完全解决)如何输入一个图的邻接矩阵(每两个点的亲密度矩阵affinity),然后使用sklearn进行谱聚类

文章目录 背景输入点直接输入邻接矩阵 背景 网上倒是有一些关于使用sklearn进行谱聚类的教程,但是这些教程的输入都是一些点的集合,然后根据谱聚类的原理,其会每两个点计算一次亲密度(可以认为两个点距离越大,亲密度越…

【学习草稿】bert文本分类

https://github.com/google-research/bert https://github.com/CyberZHG/keras-bert 在 BERT 中,每个单词的嵌入向量由三部分组成: Token 嵌入向量:该向量是 WordPiece 分词算法得到的子单词 ID 对应的嵌入向量。 Segment 嵌入向量&#x…

安科瑞带防逆流功能的数据通讯网关-安科瑞黄安南

AWT200 数据通讯网关应用于各种终端设备的数据采集与数据分析。用于实现设备的监测、控制、计算,为系统与设备之间建立通讯纽带,实现双向的数据通讯。实时监测并及时发现异常,同时自身根据用户规则进行逻辑判断,可以节省人力和通讯…

【机器学习】模型平移不变性/等变性归纳偏置Attention机制

Alphafold2具有旋转不变性吗——从图像识别到蛋白结构预测的旋转对称性实现 通过Alphafold2如何预测蛋白质结构,看有哪些机制或tricks可以利用? 一、等变Transformer 等变Transformer是Transformer众多变体的其中一种,其强调等变性。不变性…

CentOS7 安装 nodejs

获取安装文件 node历史版本地址 安装 上传到服务器安装位置cd 到压缩包位置,执行解压安装操作 [rootps-fdcnops-01 /]# cd usr/local/nodejs/ [rootps-fdcnops-01 nodejs]# tar -xzvf node-v16.16.0-linux-x64 配置环境变量 [rootps-fdcnops-01 nodejs]# vim /…

5G RedCap工业智能网关

5G RedCap工业智能网关是当前工业智能化发展领域的重要技术之一。随着物联网和工业互联网的迅速发展,企业对于实时数据传输和高速通信需求越来越迫切。在这种背景下,5G RedCap工业智能网关以其卓越的性能和功能,成为众多企业的首选。 5G RedC…

Qt扫盲-QPen 理论使用总结

QPen 理论使用总结 一、概述二、Pen Style 画笔风格三、Cap Style 帽风格四、Join Style 连接处样式 一、概述 QPen 是Qt绘图控件里面的一个重要的组件,和QColor 一样也是类似的一个属性类。这个类就是描述一个画笔具有的属性。 一个画笔 Pen 有style()&#xff0…

ExoPlayer架构详解与源码分析(6)——MediaPeriod

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

【C语言】关于char的取值范围的讨论

前提知识: 计算机内存中存的是整数的补码。 正数的原反补相同! 负数的补码 (除符号位以外)原码取反 1 负数的源码 (除符号位以外)补码取反 1 有符号的char,最高位二进制位表示符号位 …

蓝桥杯每日一题2023.10.19

题目描述 完全二叉树的权值 - 蓝桥云课 (lanqiao.cn) 题目分析 我们以每一个节点的坐标来将这一深度的权值之和相加从而算出权值和 要清楚每一个深度的其实节点和末尾节点,使用双指针将这个深度节点的权值和计算出来,记录所 需要的深度即可 #includ…

uni-app:引用文件的方法

绝对定位 ①import common from "/utils/common.js" ②import common from "utils/common.js" <template><view></view> </template> <script>import common from "/utils/common.js"export default {data() {ret…

通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

&#x1f525;博客主页&#xff1a; 小羊失眠啦 &#x1f516;系列专栏&#xff1a; C语言 、Cpolar、Linux ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 …

vue3 源码解析(1)— reactive 响应式实现

前言 本文是 vue3 源码解析系列的第一篇文章&#xff0c;项目代码的整体实现是参考了 v3.2.10 版本&#xff0c;项目整体架构可以参考之前我写过的文章 rollup 实现多模块打包。话不多说&#xff0c;让我们通过一个简单例子开始这个系列的文章。 举个例子 <!DOCTYPE html…

微信小程序OA会议系统数据交互

前言 经过我们所写的上一文章&#xff1a;微信小程序会议OA系统其他页面-CSDN博客 在我们的是基础面板上面&#xff0c;可以看到出来我们的数据是死数据&#xff0c;今天我们就完善我们的是数据 后台 在我们去完成项目之前我们要把我们的项目后台准备好资源我放在我资源中&…