---------------------------- | Hello fellow Rustaceans | ---------------------------- \ \ _~^~^~_ \) / o o \ (/ '_ - _' / '-----' \
一点点前言~这个系列一大部分算是学习 Rust 语言的自用笔记,另一部分也算是分享给有需要的人,整体上来说会跟着「The Rust Programming Language」这本书来走,可能偶尔也会突然自己写点什么小东西~
虽然说是自用笔记,但是既然写了还是会尽力让看到的人能够看明白这样子;同时也因为是自用笔记,所以在跟着「The Rust Programming Language」书的时候,并不一定会在所有东西第一次出现时就解释得非常清晰,我会以自己的学习风格为主来写这个系列
首先是安装 Rust,https://www.rust-lang.org/learn/get-started,打开这个链接之后会见到如何安装 Rust 的操作。比如 macOS 或者其他 Unix-like 的系统的话,则是利用如下命令安装
curl https://sh.rustup.rs -sSf | sh
![](/wp-content/uploads/2019/09/rustup.webp)
这一步会安装 cargo, rustic, rustup 和一些其他的 rust 会用到的命令。
在安装完之后,会提示需要将这些二进制所在的 $HOME/.cargo/bin 加入到环境变量 PATH 中,那么只需要编辑 ~/.bashrc,或者 ~/.zshrc,或者编辑自己所使用的 SHELL 的初始化脚本。加入如下一行
export PATH="\${HOME}/.cargo/bin:\${PATH}"
然后 source 一下初始化脚本,或者新开一个终端,接着跟着 rust-lang.org 的 guide,使用 rustup 安装 rustfmt 和 clippy 这两个 components。
rustup component add rustfmt rustup component add clippy
![](/wp-content/uploads/2019/09/rust-components.webp)
前者是用于格式化 rust 代码,后者则是用于提示代码中潜在的问题等。
接着可以便可以用 cargo 新建一个 hello-rust 的项目用来测试 rust 环境了
cargo new hello-rust
这一步会在当前目录下创建一个 hello-rust 的文件夹,其目录结构如下
![](/wp-content/uploads/2019/09/cargo-new-hello-rust.webp)
hello-rust ├── Cargo.toml └── src └── main.rs
Cargo.toml 类似于 Swift 项目中的 package.swift,用于记录包名字、版本、作者以及项目依赖等等信息。在 https://doc.rust-lang.org/cargo/reference/manifest.html 可以找到更详细的描述。
然后在 src 子目录下的 main.rs 显然就是代码文件了~
要运行这个 hello-rust 的项目也非常简单,只需要执行
cargo run
就可以看到 cargo 会自动调用 rustc 去编译、运行这个项目了
![](/wp-content/uploads/2019/09/cargo-run-1.webp)
接下来 rust-lang.org 则是简单介绍了如何添加一个依赖,这一步只需要编辑 Cargo.toml 下面的 dependencies section 即可~
比如要添加 ferris-says 这个包,并且要求版本为 0.1 的话,则
[dependencies]
ferris-says = "0.1"
保存 Cargo.toml 后就可以~不过 cargo 默认的 crates 源是 crates.io,在国内访问相当的慢,可以使用 USTC 的镜像去替换,编辑一下 $HOME/.cargo/config 文件~
[source.crates-io] registry = "https://github.com/rust-lang/crates.io-index" replace-with = 'ustc' [source.ustc] registry = "git://mirrors.ustc.edu.cn/crates.io-index"
接下来就可以使用
cargo build
来构建项目了,cargo 会自动下载所有需要的依赖~
![](/wp-content/uploads/2019/09/cargo-build-1.webp)
之后就是使用 ferris-says 了~
use ferris_says::say; use std::io::{stdout, BufWriter}; fn main() { let stdout = stdout(); let out = b"Hello fellow Rustaceans!"; let width = 24; let mut writer = BufWriter::new(stdout.lock()); say(out, width, &mut writer).unwrap(); }
可以看出来其实 Rust 语言并没有跟别的差异特别大,比如我们对比在引入模块/包上的话,
C/C++ 引入文件使用 include,使用模块则是 using namespace;Perl 与 Rust 一样使用 use;Python / Objective-C / Swift 则是 import。这里其实各语言间大同小异。
包里的子包或者类的话,与 C++ 相同,Rust 也是采用了 :: 作为分隔。
定义函数 Rust 则是使用了 fn 作为关键字,与 Golang 相同;而 Python 是 def,Swift 是 func …
字符串、数字、变量声明也都可以看到各种影子(毕竟又不是刻意去设计与众不同的语法)
那么保存运行的话,则是
cargo run
![](/wp-content/uploads/2019/09/ferris-says.webp)