Rust
才来实习,由于部门使用的SDK是rust语言,所以先浅浅进行rust学习与记录。
Rust是什么?
rust相比起C/C++等传统语言,拥有着卓越的、天生的内存安全性。相对于C#等带有垃圾回收机制的语言来讲,它遵循了零开销抽象(Zero-Cost Abstraction)规则,并为开发者保留了最大的底层控制能力。rust是一种专注于安全、并发和性能的系统级编程语言。
安装rust
本地安装与文档
在Linux或者Mac OS:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
如果是安装成功,会显示信息:
另外,你还需要一个 链接器(linker),这是 Rust 用来将其编译的输出连接到一个文件中的程序。很可能你已经有一个了。如果你遇到了链接器错误,请尝试安装一个 C 编译器,它通常包括一个链接器。C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码,因此需要安装一个 C 编译器。
在 macOS 上,你可以通过运行以下命令获得 C 语言编译器:
xcode-select --install
直接复制输入就好了。
在Windows:
在 Windows 上,前往 官方教程并按照说明安装 Rust。
检验一下:
rustc --version
当版本号显示出来,就代表你成功了。
更新与卸载
rustup update
一行搞定更新。
rustup self uninstall
一行搞定卸载。
如果你需要查看文档,就执行下面这一行在浏览器打开
rustup self uninstall
rust起步
写我们的第一个程序,hello world
(这里是对于Linux、macOS 和 Windows PowerShell的命令,后面的部分也都默认是在这几类而不是Windows CMD,后续就不再说明了)
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。
- 创建源文件:
touch main.rs
进入文本编辑:
vim main.rs
按a进入插入模式,然后把我们的源代码放进去:
fn main() {
println!("Hello, world!");
}
然后Ctrl + X完成保存,再按ESC退出插入模式。
最后进行保存:
:wq #按冒号+wq,进行修改后保存
#如果是未进行过修改直接退出,那就是:q
接下来对这个main.rs进行编译和运行
rustc main.rs
./main
输入上面两行,如果出现了"Hello,world!",那么恭喜你,已经成功走进了rust的大门!
语法其实对于有基础的同学来说,看起来也很熟悉。
不过要注意:
- 这里的print是带
!
的,这种实际上是rust的宏,并不是调用函数哦,println()
才是函数。 - 注意rust使用四个空格作为缩进而不是制表符tab。
cargo
如果使用前面部分介绍的官方安装包的话,则自带了 Cargo。如果通过其他方式安装的话,可以在终端输入如下命令检查是否安装了 Cargo:
cargo --version
能显示版本号证明已经安装。
使用cargo创建项目
- 回到 projects 目录
- 创建目录与项目并进入(cd)
cargo new hello_cargo
cd hello_cargo
- 请自行选用文本编辑器打开 Cargo.toml 文件。它应该看起来如下所示:
[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
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基本命令
- 编译并执行
cargo run #编译形成可执行文件并运行
- 如果是只编译
cargo build
由于默认的构建方法是调试构建(debug build),Cargo 会将可执行文件放在名为 debug 的目录中。
所以要执行的话
./target/debug/hello_cargo
选择执行正确的路径下的文件就好,到这里的效果就相当于cargo run
了。
所以平时没有特殊需求,就直接cargo run
- 不编译但确认可编译
cargo check
check的意义是让你确认你编写的代码没有语法上的错误,平时就check检错,当你真正要执行代码的时候,再build或者run就好。
其实,要在任何已存在的项目上工作时,可以使用如下命令通过 Git 检出代码,移动到该项目目录并构建:
$ git clone example.org/someproject
$ cd someproject
$ cargo build
到这里,我们对rust的构建和运行已经了解了,可以开始我们的rust之路了。
摘选自:
Rust程序设计语言中文版