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…

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…

JavaEE进阶篇 (一) -- Maven

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

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

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

LeetCode---387周赛

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

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

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

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

目录 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与物联网(IoT&…

滴滴一面:Keepalived+Nginx高可用,如何实现IP跳跃?(1)

尼恩说在前面 HashMap的工作原理是目前java面试问的较为常见的问题之一,在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格,遇到很多很重要的面试…

OpenCV学习笔记(四)——对视频的读取操作

目录 读取视频内容 将彩色视频转换为灰色视频 读取视频内容 读取视频文件通常分为读取文件、验证是否打开成功打开文件、逐帧读取视频文件、释放资源和关闭窗口 (1)读取文件 在OpenCV中,通常使用VedioCapture来读取视频流,Vedi…

图的单源最短路径问题

目录 一、简述 二、前置配置 三、迪杰斯特拉算法 四、改进的迪杰斯特拉算法 五、贝尔曼福特算法 一、简述 图是一种比较常用的数据结构,将问题转换成图相关的思路也是比较常用的。 图的单源最短路径问题,也就是图中某一个节点到图中其他节点的最短路…

基于JAVA+ springboot实现的抗疫物质信息管理系统

基于JAVA springboot实现的抗疫物质信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 …

macOS上实现「灵动岛」效果

自从Apple iPhone推出了「灵动岛」功能后,用户们就被其优雅的设计和强大的功能所吸引。然而,作为macOS用户,我们一直在等待这一功能能够在我们的设备上实现。现在,随着新的应用程序的推出,我们终于可以在我们的Mac上体…

JWT的是什么

session共享 什么是session共享 Session共享是指在分布式系统中,在多个服务器之间共享同一个用户的会话数据。在传统的Web应用中,用户的会话信息通常存储在服务器端的Session中,而每个用户的请求在同一个服务器上处理,因此可以轻…

【黑马程序员】Python基础

文章目录 初始PythonPython应用场景什么是编程语言安装Python开发环境第一个Python程序Python解释器 Python基础语法常用数值类型字符串总结 python中的注释变量数据类型数据类型转换标识符运算符算术运算服赋值运算符 字符串扩展字符串的三种定义方式字符串的引号嵌套字符串的…

基于redis实现互斥锁

利用setnx命令实现类似获取锁和释放锁。 获取锁,setnx lock 1,返回值为1视为获取成功,为0视为获取失败 释放锁,del lock 特殊情况: 如果获取锁之后,锁来还来不及释放,redis宕机了,这…

【CSP试题回顾】202009-2-风险人群筛查

CSP-202009-2-风险人群筛查 解题思路 主循环(对每个查询): 使用一个布尔变量pass来标记风险人群是否至少一次进入了特定区域,以及一个布尔变量onlyOnce来确保停留计数 stayNum 在每次查询中最多只增加一次。内循环(对…