【Rust】从零开始的rust学习嗷

Rust

才来实习,由于部门使用的SDK是rust语言,所以先浅浅进行rust学习与记录。

Rust是什么?

Rust 程序设计语言的本质实际在于 赋能(empowerment):无论你现在编写的是何种代码,Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见)

举例来说,那些"系统层面"的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名昭著 的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。
Rust 破除了这些障碍:它消除了旧的陷阱,并提供了伴你一路同行的友好、精良的工具。 想要 "深入" 底层控制的程序员可以使用 Rust,无需时刻担心出现崩溃或安全漏洞,也无需因为工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出可靠的代码,并且运行速度和内存使用上都十分高效。

已经在从事编写底层代码的程序员可以使用 Rust 来提升信心。例如,在 Rust 中引入并行是相对低风险的操作,因为编译器会替你找到经典的错误 。同时你可以自信地采取更加激进的优化,而不会意外引入崩溃或漏洞。

但 Rust 并不局限于底层系统编程。它表达力强、写起来舒适,让人能够轻松地编写出命令行应用、网络服务器等各种类型的代码------在本书中就有这两者的简单示例。使用 Rust 能让你把在一个领域中学习的技能延伸到另一个领域:你可以通过编写网页应用来学习 Rust,接着将同样的技能应用到你的 Raspberry Pi(树莓派)上。

本书全面介绍了 Rust 为用户赋予的能力。其内容平易近人,致力于帮助你提升 Rust 的知识,并且提升你作为程序员整体的理解与自信。欢迎你加入 Rust 社区,让我们准备深入学习 Rust 吧!

------ Nicholas Matsakis 和 Aaron Turon

rust相比起C/C++等传统语言,拥有着卓越的、天生的内存安全性。相对于C#等带有垃圾回收机制的语言来讲,它遵循了零开销抽象(Zero-Cost Abstraction)规则,并为开发者保留了最大的底层控制能力。rust是一种专注于安全、并发和性能的系统级编程语言。

安装rust

本地安装与文档

在Linux或者Mac OS:

bash 复制代码
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

如果是安装成功,会显示信息:

Rust is installed now. Great!

另外,你还需要一个 链接器(linker),这是 Rust 用来将其编译的输出连接到一个文件中的程序。很可能你已经有一个了。如果你遇到了链接器错误,请尝试安装一个 C 编译器,它通常包括一个链接器。C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码,因此需要安装一个 C 编译器。

在 macOS 上,你可以通过运行以下命令获得 C 语言编译器:

bash 复制代码
xcode-select --install

直接复制输入就好了。

在Windows:

在 Windows 上,前往 官方教程并按照说明安装 Rust。

要获取构建工具,你需要安装 Visual Studio 2022。当被问及需要安装什么工作负载(Workload)的时候,请确保勾选了以下内容:

"使用 C++ 的桌面开发"("Desktop Development with C++")

Windows 10(或 11)SDK

英语语言包,以及其他你所需要的语言包

检验一下:

bash 复制代码
rustc --version

当版本号显示出来,就代表你成功了。

更新与卸载

bash 复制代码
rustup update

一行搞定更新。

bash 复制代码
rustup self uninstall

一行搞定卸载。

如果你需要查看文档,就执行下面这一行在浏览器打开

bash 复制代码
rustup self uninstall

rust起步

写我们的第一个程序,hello world

(这里是对于Linux、macOS 和 Windows PowerShell的命令,后面的部分也都默认是在这几类而不是Windows CMD,后续就不再说明了)

bash 复制代码
mkdir ~/projects	#在home目录建一个projects目录(文件夹)
cd ~/projects	#进入projects
mkdir hello_world	#在projects建一个hello_world目录(文件夹)
cd hello_world	#进入hello_world

接下来在hello_world目录内创建一个源文件,命名为 main.rs。Rust 源文件总是以 .rs 扩展名结尾。如果文件名包含多个单词,那么按照命名习惯,应当使用下划线来分隔单词。例如命名为 hello_world.rs,而不是 helloworld.rs

  • 创建源文件:
bash 复制代码
touch main.rs

进入文本编辑:

bash 复制代码
vim main.rs

按a进入插入模式,然后把我们的源代码放进去:

rust 复制代码
fn main() {
    println!("Hello, world!");
}

然后Ctrl + X完成保存,再按ESC退出插入模式。

最后进行保存:

bash 复制代码
:wq #按冒号+wq,进行修改后保存
#如果是未进行过修改直接退出,那就是:q

接下来对这个main.rs进行编译和运行

bash 复制代码
rustc main.rs
./main

输入上面两行,如果出现了"Hello,world!",那么恭喜你,已经成功走进了rust的大门!

语法其实对于有基础的同学来说,看起来也很熟悉。

不过要注意:

  • 这里的print是带的,这种实际上是rust的宏,并不是调用函数哦, println()才是函数。
  • 注意rust使用四个空格作为缩进而不是制表符tab

cargo

如果使用前面部分介绍的官方安装包的话,则自带了 Cargo。如果通过其他方式安装的话,可以在终端输入如下命令检查是否安装了 Cargo:

bash 复制代码
cargo --version

能显示版本号证明已经安装。

使用cargo创建项目

  1. 回到 projects 目录
  2. 创建目录与项目并进入(cd)
bash 复制代码
cargo new hello_cargo
cd hello_cargo
  1. 请自行选用文本编辑器打开 Cargo.toml 文件。它应该看起来如下所示:
bash 复制代码
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

这个文件使用 TOML (Tom's Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。

第一行,[package],是一个片段(section)标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他片段(section)。

接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、项目的版本以及要使用的 Rust 版本。附录 E 会介绍 edition 的值。

最后一行,[dependencies],是罗列项目依赖的片段的开始。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate,不过在第二章的第一个项目会用到依赖,那时会用得上这个片段。

现在打开 src/main.rs 看看:

文件名:src/main.rs

rust 复制代码
fn main() {
    println!("Hello, world!");
}

Cargo 为你生成了一个 "Hello, world!" 程序,正如我们之前编写的示例 1-1!目前为止,我们的项目与 Cargo 生成项目的区别是 Cargo 将代码放在 src 目录,同时项目根目录包含一个 Cargo.toml 配置文件。

Cargo 期望源文件存放在 src 目录中。项目根目录只存放 README、license 信息、配置文件和其他跟代码无关的文件。使用 Cargo 帮助你保持项目干净整洁,一切井井有条。

如果没有使用 Cargo 开始项目,比如我们创建的 Hello,world! 项目,可以将其转化为一个 Cargo 项目。将代码放入 src 目录,并创建一个合适的 Cargo.toml 文件。

cargo基本命令

  1. 编译并执行
bash 复制代码
cargo run    #编译形成可执行文件并运行
  1. 如果是只编译
bash 复制代码
cargo build

由于默认的构建方法是调试构建(debug build),Cargo 会将可执行文件放在名为 debug 的目录中。

所以要执行的话

bash 复制代码
./target/debug/hello_cargo

选择执行正确的路径下的文件就好,到这里的效果就相当于cargo run了。

所以平时没有特殊需求,就直接cargo run

  1. 不编译但确认可编译
bash 复制代码
cargo check

check的意义是让你确认你编写的代码没有语法上的错误,平时就check检错,当你真正要执行代码的时候,再build或者run就好。

当项目最终准备好发布时,可以使用 cargo build --release 来优化编译项目。这会在 target/release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种是为了开发,你需要经常快速重新构建;另一种是为用户构建最终程序,它们不会经常重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 cargo build --release 并使用 target/release 下的可执行文件进行测试。

其实,要在任何已存在的项目上工作时,可以使用如下命令通过 Git 检出代码,移动到该项目目录并构建:

bash 复制代码
$ git clone example.org/someproject
$ cd someproject
$ cargo build

到这里,我们对rust的构建和运行已经了解了,可以开始我们的rust之路了。

摘选自:
Rust程序设计语言中文版

相关推荐
学会沉淀。6 分钟前
Docker学习
java·开发语言·学习
Rinai_R21 分钟前
计算机组成原理的学习笔记(7)-- 存储器·其二 容量扩展/多模块存储系统/外存/Cache/虚拟存储器
笔记·物联网·学习
吃着火锅x唱着歌21 分钟前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
ragnwang23 分钟前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习
西猫雷婶37 分钟前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
kiiila37 分钟前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt
小_太_阳1 小时前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾1 小时前
scala借阅图书保存记录(三)
开发语言·后端·scala
唐 城1 小时前
curl 放弃对 Hyper Rust HTTP 后端的支持
开发语言·http·rust