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

news2025/3/2 2:33:07

本文为第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 run
   Compiling hello_world v0.1.0 (/Users/bayi/code/rust/blog/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.19s
     Running `target/debug/hello_world`
Hello, world!

 第二种手动编译,也成功

$ cargo build
   Compiling 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 --release
   Compiling 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 check
    Checking 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.coloradmin.cn/o/1504117.html

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

相关文章

力扣由浅至深 每日一题.01 两数之和

万物惊鸿,唯我澄明 —— 24.3.9 1. 两数之和https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会…

C语言转义字符:一文打尽

转义字符 1. 前言2. 预备知识2.1 打印格式2.2 进制转换2.3 ASCII码 3. 什么是转义字符4. 常见的转义字符4.1 \?4.2 \4.3 \"4.4 \\4.5 \dddddd表示1到3个八进制数字4.6 \xdddd表示1到2个十六进制数字4.7 其他转义字符 5. 一道笔试题6. 一个小插曲 1. 前言 大家好&#xf…

giffgaff怎么充值?giffgaff怎么续费?

-性价比高:0月租,免费接收短信,充值一次,接码可以用20年以上(仅需半年保号一次),可能是国内性价比最高的接码实体卡!-安全:实体卡无须担心因号码被风控,还可以…

使用阿里云服务器搭建网站简单吗?超简单教程

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

BUU [网鼎杯 2020 半决赛]AliceWebsite

BUU [网鼎杯 2020 半决赛]AliceWebsite 开题&#xff1a; hint附件是源码。在index.php中有一个毫无过滤的本地文件包含 <?php $action (isset($_GET[action]) ? $_GET[action] : home.php); if (file_exists($action)) {include $action; } else {echo "File not…

STM32之串口中断接收UART_Start_Receive_IT

网上搜索了好多&#xff0c;都是说主函数增加UART_Receive_IT()函数来着&#xff0c;实际正确的是UART_Start_Receive_IT()函数。 —————————————————— 参考时间&#xff1a;2024年3月9日 Cube版本&#xff1a;STM32CubeMX 6.8.1版本 参考芯片&#xff1a…

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

【鸿蒙开发】第十八章 Web组件(二)

接上一章节 【鸿蒙开发】第十七章 Web组件&#xff08;一&#xff09; 4 H5与端侧交互 4.1 应用侧调用前端页面函数 应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。 在下面的示例中&#xff0c;点击应用侧的“runJavaScript”按钮时&#xff0c;来触…

计算机网络(基础篇)复习笔记——体系结构/协议基础(持续更新中......)

目录 1 计算机网络基础相关技术Rip 路由更新操作 2 体系结构(OSI 7层, TCP/IP4层)应用层运输层网络层IPv4无分类域间路由选择 CIDRIPV6 数据链路层循环冗余校验CRC协议设备 物理层传输媒体信道复用技术宽带接入技术数据通信 3 网络局域网(以太网Ethernet) 4 通信过程编码:信道极…

2024年学生服务器申请流程,以阿里云学生机为例

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…

ZigBee技术与实训教程(无线传感器网络笔记第三次)

3.协议架构 IEEE802.15.4 &#xff08;无限个人区域网技术&#xff09;标准只定义了PHY物理层和数据链路层的MAC控制子层。PHY由射频发射器以及底层的控制模块组成。MAC子层为高层访问物理层&#xff08;PHY&#xff09;信道提供点到点的通信服务接口。MAC 层以上的几个层次还…

ROS2中launch编写及参数含义(xml、python)

ROS2系列文章目录 ROS2中nav_msgs/msg/Path 数据含义及使用 ROS2中std_msgs/msg/Header 数据含义及使用 ROS中TF变换详解 文章目录 ROS2系列文章目录ROS2中launch编写及参数含义&#xff08;xml、python&#xff09;一、ROS官方介绍二、实现案例1.编写主函数、CMakeLists.tx…

一学就会 | ChatGPT提示词极简指南-有爱AI实战教程(三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 导读&#xff1a;在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如…

近年来文本检测相关工作梳理

引言 场景文本检测任务&#xff0c;一直以来是OCR整个任务中最为重要的一环。虽然有一些相关工作是端对端OCR工作的&#xff0c;但是从工业界来看&#xff0c;相关落地应用较为困难。因此&#xff0c;两阶段的OCR方案一直是优先考虑的。 在两阶段中&#xff08;文本检测文本识…

springboot254小区团购管理

小区团购管理设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装小区团购管理软件来发挥其高效地信…

DataWhale公开课笔记2:Diffusion Model和Transformer Diffusion

Stable Diffusion和AIGC AIGC是什么 AIGC的全称叫做AI generated content&#xff0c;AlGC (Al-Generated Content&#xff0c;人工智能生产内容)&#xff0c;是利用AI自动生产内容的生产方式。 在传统的内容创作领域中&#xff0c;专业生成内容&#xff08;PGC&#xff09;…

稀碎从零算法笔记Day10-LeecCode:赎金信

题型&#xff1a;哈希表、字符串 链接&#xff1a;383. 赎金信 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以…

Proxmox VE安装CentOS

1、下载CentOS镜像文件 阿里巴巴开源镜像站&#xff1a; https://developer.aliyun.com/mirror/ CentOS 镜像文件&#xff08;图形化界面&#xff09; https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso 2、上传ISO镜像 选择ISO镜像…

【Linux】软件包管理器yum(命令行工具rz,sz)

目录 01.何为软件包 软件包 软件包管理器 02.命令行工具rz、sz 03.yum的使用 查看与搜索 安装 卸载 其他 01.何为软件包 软件包 我们手机电脑上的各种软件应用其实就是一个个的可执行程序&#xff08;及其相关文件和资源的集合&#xff09;&#xff0c;打开应用的过程其…

计算机组成原理-微程序设计实验

一、实验目的 1.在简单模型机的基础上&#xff0c;通过知识的综合运用&#xff0c;进行5条机器指令的微程序设计。 2.进一步理解微程序控制器的工作原理&#xff0c;掌握指令与微指令的区别与联系。 3.通过编写和调试微程序&#xff0c;提高研究与设计能力。 二、实验要求 …