【Rust学习一】安装、编写hello world、使用cargo

参考书目:https://rustlang-cn.org/office/rust/book/getting-started/ch01-00-getting-started.html

开始学习rust,记录一下自己的学习内容,全程只记录Mac环境下的操作。
本文主要记录:

  • 在macOS安装 Rust
  • 编写一个打印 Hello, world! 的程序
  • 使用 Rust 的包管理器和构建系统 cargo

一、安装

  • 在macOS 上安装 rustup
    打开终端并输入如下命令:
$ curl https://sh.rustup.rs -sSf | sh

这个命令等的时间可能会比较久,耐心一点。
接着出现下面的三个选项,选择1,默认安装就好了。

You can uninstall at any time with rustup self uninstall and these changes will
be reverted.

Current installation options:

   default host triple: x86_64-apple-darwin
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

此命令下载一个脚本并开始安装 rustup 工具,这会安装最新稳定版 Rust。
如果安装成功,将会出现如下内容:

Rust is installed now. Great!
To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 
environment variable. Next time you log in this will be done automatically.

To configure your current shell run source $HOME/.cargo/env

按照上述提示,还要将Rust 加入系统 PATH 环境变量中,在下一次登录时生效
两种方式,任选其一即可:

  1. 不重启终端,在 shell 中直接运行如下命令,手动将 Rust 加入系统 PATH 变量中
    上述提示中是给的这种方式,比较便捷。
$ source $HOME/.cargo/env

2.可以在 ~/.bash_profile 文件中增加如下行:

$ export PATH="$HOME/.cargo/bin:$PATH"

《另外,你需要一个某种类型的链接器(linker)。很有可能已经安装,不过当你尝试编译 Rust 程序时,却有错误指出无法执行链接器,这意味着你的系统上没有安装链接器,你需要自行安装一个。C 编译器通常带有正确的链接器。请查看你使用平台的文档,了解如何安装 C 编译器。并且,一些常用的 Rust 包依赖 C 代码,也需要安装 C 编译器。因此现在安装一个是值得的。》---这里不太懂。

  • 更新和卸载
    通过 rustup 安装了 Rust 之后,很容易更新到最新版本。在 shell 中运行如下更新脚本:
$ rustup update

为了卸载 Rust 和 rustup,在 shell 中运行如下卸载脚本(这个命令现在可以不用执行,不然又要重新安装一遍了。。。):

$ rustup self uninstall
  • 故障排除(Troubleshooting)
    要检查是否正确安装了 Rust,打开 shell 并运行如下行:
$ rustc --version

你应能看到已发布的最新稳定版的版本号、提交哈希和提交日期,显示为如下格式:

rustc x.y.z (abcabcabc yyyy-mm-dd)

如果出现这些内容,Rust 就安装成功了!
没有成功的,注意检查一下配置环境变量那一步有没有正确执行。
如果有问题,可以求助:最简单的是 irc.mozilla.org 上的 #rust IRC 频道 ,可以使用 Mibbit 来访问它。然后就能和其他 Rustacean(Rust 用户的称号,有自嘲意味)聊天并寻求帮助。其它给力的资源包括用户论坛Stack Overflow

二、编写一个打印 Hello, world! 的程序

安装好了 Rust,我们来编写第一个 Rust 程序。掌握用rust语言在屏幕上打印 Hello, world!

注意:本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位于何处并没有特定的要求,如果你更倾向于使用集成开发环境(IDE),而不是命令行,请尽管使用你喜欢的 IDE。目前很多 IDE 已经不同程度的支持 Rust;查看 IDE 文档了解更多细节。最近,Rust 团队已经致力于提供强大的 IDE 支持,而且进展飞速!

  • 创建项目目录

首先创建一个存放 Rust 代码的目录。建议在home目录下创建 projects 目录。
打开终端并输入如下命令创建 projects 目录,并在 projects 目录中为 Hello, world! 项目创建一个目录。

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
  • 编写并运行 Rust 程序

1. 新建源文件:main.rs

$ touch main.rs

Rust 源文件总是以 .rs 扩展名结尾。

注意:如果文件名包含多个单词,使用下划线分隔它们。例如命名为 hello_world.rs,而不是 helloworld.rs

2. 打开main.rs 文件,输入示例 1-1 中的代码。

1)打开文件:

$ vi main.rs

2)输入示例1-1中的代码
示例 1-1: 一个打印 Hello, world! 的程序

fn main() {
    println!("Hello, world!");
}

3)保存文件,并回到终端窗口。

3. 编译并运行文件
在终端窗口的~/projects目录下输入下列命令,编译和运行文件

$ rustc main.rs
$ ./main

运行成功,会输出:

Hello, world!

如果没有看到这些输出,回到 “故障排除” 部分查找寻求帮助的方法。
如果 Hello, world! 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名 Rust 程序员,欢迎!

  • 分析 Rust 程序
    几个要注意的点:
  1. Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。

  2. println! 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println(没有!)。当看到符号 ! 的时候,就意味着调用的是宏而不是普通函数。

  3. 编译和运行是彼此独立的步骤
    在运行 Rust 程序之前,必须先使用 Rust 编辑器编译它,即输入 rustc 命令并传入源文件名称,如$ rustc main.rs。编译成功后,Rust 会输出一个二进制的可执行文件。

三、使用 Rust 的包管理器和构建系统 cargo

Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为它可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。(我们把代码所需要的库叫做 依赖(dependencies))。

最简单的 Rust 程序,比如我们刚刚编写的,没有任何依赖。所以如果使用 Cargo 来构建 Hello, world! 项目,将只会用到 Cargo 构建代码的那部分功能。在编写更复杂的Rust程序时,你将添加依赖项,如果使用Cargo启动项目,则添加依赖项将更容易。

  • 检查 Cargo
    第一部分 “安装” 的时候,自带了 Cargo。在终端输入如下命令检查是否安装了 Cargo:
$ cargo --version

如果你看到了版本号,说明已安装!如果看到类似 command not found 的错误,你应该查看相应安装文档以确定如何单独安装 Cargo。

  • 使用 Cargo 创建项目
    在终端输入下面的命令:
  1. 进入projects 目录(或者你存放代码的目录)。
$ cd ~/properties
  1. 使用cargo创建项目hello_cargo
    新建了名为 hello_cargo 的目录,同时 Cargo 在一个hello_cargo 目录中创建了项目文件。
$ cargo new hello_cargo
  1. 进入项目目录查看文件
$ cd hello_cargo
$ ll

进入 hello_cargo 目录并列出文件,看到Cargo生成的项目目录结构如下:

.
├── Cargo.toml
└── .git/
└── .gitignore
└── src
    └── main.rs

一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。它也在 hello_cargo 目录初始化了一个 git 仓库,以及一个 .gitignore 文件。

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

  • 分开执行命令,构建和运行项目

1)构建
在 hello_cargo 目录下,输入下面的命令来构建项目:

$ cargo build

编译完成后会创建一个可执行文件 target/debug/hello_cargo,注意文件位置。
2)运行可执行文件:

$ ./target/debug/hello_cargo
  • 一个命令中同时编译并运行项目
    可以使用cargo run在一个命令中同时编译并运行生成的可执行文件:
$ cargo run
  • 快速检查代码
    Cargo 还提供了一个叫 cargo check 的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件:
$ cargo check

所以编写代码时定期运行 cargo check 确保它们可以编译。当准备好使用可执行文件时才运行 cargo build。

  • 发布(release)构建
    当项目最终准备好发布时,可以使用 cargo build --release来优化编译项目。
    这会在 target/release 而不是 target/debug 下生成可执行文件。
$ cargo build --release
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容