Rust教程:How to Rust-从开始之前到Hello World

本文为第0篇

专栏简介

本专栏是优质Rust技术专栏,推荐精通一门技术栈的蟹友,不建议基础的同学(无基础学Rust也是牛人[手动捂脸])

感谢Rust圣经开源社区的同学,为后来者提供了非常优秀的Rust学习资源

本文使用:

  • 操作系统macOS Sonoma 14 / Apple M1
  • 编译器:Rustc & Cargo

感谢一路相伴的朋友们,感谢你们的支持 ^ _ ^

Rust教程:How to Rust-在开始之前到Hello World


目录

专栏简介

更新记录

前言

锈起来

安装C语言编译器

Cargo

Hello World

运行项目

Cargo check 

Cargo.lock and Cargo.toml

结语

本文参考文献


更新记录

2024.03.09 发布文章


前言

带你入门Rust,咋搞Rust?Cargo是什么?写个Hello World?


锈起来

rustup是Rust的安装工具,也是它的版本管理工具,所以建议使用rustup来安装Rust(下述方式不适用于Windows,但网络上有很多成熟的Windows安装方案,你可以参考👉这个)

如果你不想用rustup来安装,那你可以了解一下Rust的其他安装方式

打开终端输入指令

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

它将下载一个脚本,之后就会开始安装rustup工具,此工具将安装Rust的最新稳定版本

后面会有一些选项,按需选择即可

如果你安装成功了,则会提示:

Rust is installed now. Great!

安装C语言编译器

Rust在几乎所有环境都可以无需安装任何依赖直接运行。但是,Rust会依赖libc和链接器linker。所以如果遇到了提示链接器无法执行的错误,你需要再手动安装一个C编译器。当然我相信macOS的开发者们一定有homebrew,那就一定被苹果硬塞了一个Clang,所以该部分就不赘述了

Cargo

Cargo是Rust中的包管理工具,包管理工具的重点是:任何人拿到了了你的源码,就能运行起来。不只各位是否同时用过Node.js和C++的老版本,在编写C++程序的时候无比希望拥有一个NPM一样包管理工具,但确实没有

它不像老版本的Go,所有的包都在GitHub,导致了所有的项目都依赖一套代码,用起来简直是一言难尽(go转rust过来的同学要泪奔了)

Rust采用了多个语言的包管理优点,祭出恐怖如斯的cargo,很合我胃口👍👍👍

总而言之,cargo提供了一系列的工具,从项目的建立、构建到测试、运行到部署。同时,与rustc结合,主打一个全套,可以说用了就离不开了

Hello World

上文我们了解了Cargo,但我们无需再手动安装,之前安装 Rust 的时候,就已经一并安装了

那就开始new起来吧

cargo new hello_world
cd hello_world

面的命令使用cargo new建一个项目,项目名是hello_world,该项目的结构和配置文件都是由cargo生成,也就是着我们的项目被cargo所管理

项目结构如下 

.
├── .git
├── .gitignore
├── Cargo.toml
└── src└── main.rs

 连Git都整好了,他真的我哭死

运行项目

运行项目可以分成两种

  1. cargo run
  2. 手动编译

先来第一种方式,成功 

$ cargo runCompiling hello_world v0.1.0 (/Users/bayi/code/rust/blog/hello_world)Finished dev [unoptimized + debuginfo] target(s) in 0.19sRunning `target/debug/hello_world`
Hello, world!

 第二种手动编译,也成功

$ cargo buildCompiling hello_world v0.1.0 (/Users/bayi/code/rust/blog/hello_world)Finished dev [unoptimized + debuginfo] target(s) in 0.20s$ ./target/debug/hello_world
Hello, world!

你们可能会发现,里面有个debug字段

在debug模式下,编译速度变快,但运行速度变慢,能不能更完美呢?其实改用release模式即可

可以用cargo run --release或者cargo build --release

$ cargo build --releaseCompiling hello_world v0.1.0 (/Users/bayi/code/rust/blog/hello_world)Finished release [optimized] target(s) in 0.57s$ ./target/release/hello_world
Hello, world!

Cargo check 

如何快速检查一下代码问题呢?那就check一下吧

$ cargo checkChecking hello_world v0.1.0 (/Users/bayi/code/rust/blog/hello_world)Finished dev [unoptimized + debuginfo] target(s) in 0.35s

拿下!

Cargo.lock and Cargo.toml

可能大家已经注意到Cargo.lock和Cargo.toml这两个文件了,不用说大家也知道,这是cargo的核心文件

来自rust圣经的解释:

  • Cargo.toml 是 cargo 特有的项目数据描述文件。它存储了项目的所有元配置信息,如果 Rust 开发者希望 Rust 项目能够按照期望的方式进行构建、测试和运行,那么,必须按照合理的方式构建 Cargo.toml
  • Cargo.lock 文件是 cargo 工具根据同一项目的 toml 文件生成的项目依赖详细清单,因此我们一般不用修改它,只需要对着 Cargo.toml 文件撸就行了。

什么情况下该把 Cargo.lock 上传到 git 仓库里?很简单,当你的项目是一个可运行的程序时,就上传 Cargo.lock,如果是一个依赖库项目,那么请把它添加到 .gitignore 中。

你可能会好奇Cargo.toml里面有些什么,让我们看看

$ cat Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]

name是项目名称,version是当前版本,新项目默认是0.1.0,edition是使用的Rust大版本 


结语

如果本文有任何问题欢迎在评论去指出,如果喜欢这篇文章,希望能点赞评论关注

如果你们身边有像你提起过这个领域的,或者希望可以和ta一起进步的,把这篇文章分享给ta吧

本文共2890字


本文参考文献

Rust圣经

Rust 包管理器 Cargo 入门 - 知乎

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

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

相关文章

为什么不用 index 做 key?

“在 Vue 中,我们在使用 v-for 渲染列表的时候,为什么要绑定一个 key?能不能用 index 做 key?” 在聊这个问题之前我们还得需要知道 Vue 是如何操作 DOM 结构的。 虚拟DOM 我们知道,Vue 不可以直接操作 DOM 结构&am…

避免重复数据产生

在MySQL表中,可以通过创建唯一索引或唯一约束来确保表中除了ID以外的其他字段不能有两条记录相同的值。 创建唯一索引: CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...); 其中,index_name是索引的名称,ta…

C++ constexpr

constexpr是C11引入的一个关键字,用于声明变量、函数或对象构造函数的表达式在编译时是常量表达式。这意味着它们的值或行为可以在编译时被确定,而不是在运行时。这样做的主要好处是提高性能,因为编译器可以优化这些常量表达式,甚…

Linux Shell:local关键字

Linux Shell:local关键字 在 Bash 中,local 是一个用于声明局部变量的关键字。当在函数内部使用 local 声明变量时,该变量只能在函数内部使用,并且不会对函数外部的同名变量产生影响。这样可以确保在函数内部定义的变量不会意外地…

深入了解C#中的垃圾回收(Garbage Collection)

深入了解C#中的垃圾回收(Garbage Collection) 前言1、垃圾回收的概念和重要性2、C#中的垃圾回收机制 一、 垃圾回收算法1、标记-清除(Mark and Sweep)算法2、标记-整理(Mark and Compact)算法3、分代收集&a…

AI大模型,掀起新一波智能浪潮!

AI大模型的出现,标志着人工智能技术迈入了一个新的阶段。这些巨大的模型不仅在规模上超越了以往任何其他人工智能系统,而且在性能上也取得了巨大的突破。由于其庞大的参数量和复杂的结构,AI大模型在各个领域展现出了强大的学习能力和推理能力…

【机器学习】在Python中进行K-Means聚类和层次聚类

Python中聚类算法API的使用指南 聚类分析是数据分析中一种常见的无监督学习方法,通过将相似的对象分组在一起,我们能够识别出数据集中的自然分群。本文将介绍如何使用Python中的聚类算法接口,KMeans和层次聚类方法。 K-Means 聚类 K-Means…

EdgeX Foundry - 连接 Modbus 设备

文章目录 一、概述1.安装说明2.Modbus Slave 工具 二、连接 Modbus 设备1.docker-comepse2.设备配置文件3.启动 EdgeX Foundry4.访问 UI4.1. consul4.2. EdgeX Console 5.创建 Modbus 设备5.1.创建设备配置文件5.2.添加设备 6.测试6.1.命令6.2.事件6.3.读值 EdgeX Foundry # E…

openssl3.2 - exp - 可以在命令行使用的口令算法名称列表

文章目录 openssl3.2 - exp - 可以在命令行使用的口令算法名称列表概述笔记测试工程实现备注整理 - 总共有126种加密算法可用于命令行参数的密码加密算法备注END openssl3.2 - exp - 可以在命令行使用的口令算法名称列表 概述 上一个笔记openssl3.2 - exp - PEM <…

代码随想录-动态规划4(46. 携带研究材料(第六期模拟笔试) 、416. 分割等和子集)

46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; #include <iostream> #include <stdio.h> #include <vector>using namespace std;int bag(int N, vector<int> &weight, vector<int> &value) {int M weight.size();vector&l…

JavaEE进阶篇 (一) -- Maven

写在前&#xff1a;Hello各位小伙伴们&#xff0c;这一部分主要对JavaEE进阶部分内容进行学习记录&#xff0c;关于前面学习的内容也会同步更新~~ 在学习新内容之前&#xff0c;需要了解一下基础的内容&#xff1a; JavaEE(Java Platform Enterprise Edition),Java平台企业版&…

python3 多进程通信的方式

在 Python 3 中&#xff0c;实现多进程间通信的方式有以下几种常见方式&#xff1a; 队列&#xff08;Queue&#xff09;&#xff1a; 使用 multiprocessing.Queue 类可以在多个进程之间安全地传递消息和数据。多个进程可以将数据放入队列中&#xff0c;然后其他进程可以从队列…

面试经典150题——环形链表

Suffering, for the weak is the tomb of death, and for the strong is the soil of germinal ambition.​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目就是判断一个链表有没有环&#xff0c;其实我们之讲过一个题目&#xff0c;就实现了判断链表有没有环的步骤&a…

LeetCode---387周赛

题目列表 3069. 将元素分配到两个数组中 I 3070. 元素和小于等于 k 的子矩阵的数目 3071. 在矩阵上写出字母 Y 所需的最少操作次数 3072. 将元素分配到两个数组中 II 一、将元素分配到两个数组中I 直接按照题目要求进行模拟即可&#xff0c;代码如下 class Solution { p…

探索 ON1 Resize Ai 2023.5 for Mac/win:释放图像的无限可能

ON1 Resize AI 2023.5 for Mac/Win 是一款专业的图像无损放大软件&#xff0c;通过人工智能技术&#xff0c;能够将图像放大至更高的分辨率&#xff0c;同时保持图像细节和清晰度的最佳状态。该软件的强大功能和直观的操作界面&#xff0c;使它成为摄影师、设计师和艺术家的理想…

讲解人工智能在现代科技中的应用和未来发展趋势。

目录 1.人工智能在现代科技中的应用 1.1医疗健康 1.2交通运输 1.3金融服务 1.4教育 1.5制造业 1.6客户服务 2.未来发展趋势 2.1泛化能力提升 2.2跨领域集成学习 2.3增强的可解释性和透明度 2.4AI伦理和法规 2.5量子计算与AI的结合 2.6AI与物联网&#xff08;IoT&…

006-v-model原理

v-model原理 简介v-model应用在输入框上v-model应用在组件上 简介 由 属性绑定(v-bind:value“searchText”) 配合 input事件监听(v-on:input“searchText event.target.value”) 实现。 应用在组件上由 props: {value: xxx } &#xff0c;this.$emit(‘input’, xxx ) 完成。…

华为OD算法

【华为OD机考 统一考试机试C卷】开源项目热度榜单 题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里…

代码随想录算法训练营day16 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

目录 二叉树的最大深度思路解题方法递归迭代 复杂度Code递归迭代 二叉树的最小深度思路解题方法递归迭代 复杂度Code递归迭代 第一题思路解题方法递归迭代 复杂度递归迭代 Code递归迭代 总结 二叉树的最大深度 链接: 二叉树的最大深度 二叉树的 最大深度 是指从根节点到最远叶…