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创建项目
- 回到 projects 目录
- 创建目录与项目并进入(cd)
bash
cargo new hello_cargo
cd hello_cargo
- 请自行选用文本编辑器打开 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基本命令
- 编译并执行
bash
cargo run #编译形成可执行文件并运行
- 如果是只编译
bash
cargo build
由于默认的构建方法是调试构建(debug build),Cargo 会将可执行文件放在名为 debug 的目录中。
所以要执行的话
bash
./target/debug/hello_cargo
选择执行正确的路径下的文件就好,到这里的效果就相当于cargo run
了。
所以平时没有特殊需求,就直接cargo run
- 不编译但确认可编译
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程序设计语言中文版