Rust 入门 第一个 Rust 程序 - Hello World
昨天我们安装了Rust, 今天我们来编写HelloWorld
1. Hello World
编写并运行这个简单的程序
- 在昨天创建的 rust 目录内创建一个
projects
文件夹用于存放项目文件 - 在
projects
文件夹内创建项目文件夹hello_world
- 在
hello_world
文件夹内创建文件main.rs
- 打开文件
main.rs
, 编写代码
fn main() {
println!("Hello, world!");
}
- 保存文件, 在项目文件夹
hello_world
内打开终端 - 输入
rustc main.rs
编译程序 - 输入
.\main.exe
运行程序
> rustc main.rs
> .\main.exe
Hello, world!
分析这个简单的程序
现在我们回过头来仔细看看 “Hello, world!” 程序中到底发生了什么
fn main() {
}
这几行定义了一个 Rust 函数。main
函数是一个特殊的函数:在可执行的 Rust 程序中,它总是最先运行的代码。第一行代码声明了一个叫做 main
的函数,它没有参数也没有返回值。
还须注意,函数体被包裹在花括号中,{}
。Rust 要求所有函数体都要用花括号包裹起来。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
在
main()
函数中是如下代码
println!("Hello, world!");
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。
首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。
第二,println!
调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println
(没有!
),当看到符号 !
的时候,就意味着调用的是宏而不是普通函数。
第三,"Hello, world!"
是一个字符串。我们把这个字符串作为一个参数传递给 println!
,字符串将被打印到屏幕上。
第四,该行以分号结尾(;
),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以分号结尾。
我们刚刚运行了一个新创建的程序,那么让我们检查此过程中的每一个步骤。
# 在运行 Rust 程序之前, 必须是他 Rust 的编译器编译源码
> rustc main.rs
# 让我们看一下在 windows 下输出了那些文件
> dir
...
main.exe # 二进制可执行文件
main.pdb # 这个文件包含程序的调试信息, 这个文件只有 windows 平台下会生成
main.rs
2. Hello Cargo
编写并运行这个简单的程序
- Rust 官方提供了一个项目管理工具
Cargo
Cargo
可以为你处理很多任务,比如构建代码、下载依赖库并编译这些库。- 现在我们通过
Cargo
编写一个入门程序 - 在项目文件夹
projects
内打开终端 - 输入以下命令
> cargo new hello_cargo # 创建新项目
> cd hello_cargo
> cargo build # 编译项目文件
> cargo run # 运行项目, 项目默认会输出 Hello, world!
Hello, world!
分析以下 Cargo 的工作
cargo new hello_cargo
为我们创建了一个新的项目
> dir
...
.gitignore
Cargo.toml
src
-
进入 hello_cargo 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 文件,一个 src 目录,以及位于 src 目录中的 main.rs 文件。它也在 hello_cargo 目录初始化了一个 git 仓库,以及一个 .gitignore 文件。
-
用文本编辑器打开 Cargo.toml 文件。
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
edition = "2018"
[dependencies]
这个文件使用 TOML (Tom's Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。
第一行,[package]
,是一个片段(section)标题,表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,还将增加其他片段(section)。
接下来的四行设置了 Cargo 编译程序所需的配置:项目的名称、版本、作者以及要使用的 Rust 版本。Cargo 从环境中获取你的名字和 email 信息,所以如果这些信息不正确,请修改并保存此文件。
最后一行,[dependencies]
,是项目依赖的片段的开始。在 Rust 中,代码包被称为 crates。这个项目并不需要其他的 crate。
- 用文本编辑器打开 main.rs 文件。
fn main() {
println!("Hello, world!");
}
Cargo 自动为我们生成了一个 “Hello, world!” 程序
与之前的项目相比,Cargo 将代码放在 src 目录,同时项目根目录包含一个 Cargo.toml 配置文件。
Cargo 期望源文件存放在 src 目录中。项目根目录只存放 README、license 信息、配置文件和其他跟代码无关的文件。使用 Cargo 帮助我们保持项目干净整洁,一切井井有条。
如果没有使用 Cargo 开始项目,比如我们创建的 Hello,world! 项目,可以将其转化为一个 Cargo 项目。将代码放入 src 目录,并创建一个合适的 Cargo.toml 文件。
cargo build
命令
这个命令会创建一个可执行文件 target/debug/hello_cargo.exe,它不是放在项目的根目录下。
cargo run
命令
正如字面语义一样,他会先检查我们的代码,然后构建项目,最后执行它。
cargo check
命令
这个命令我们没有用到,它会快速检查我们的代码确保其可以编译。
- 项目发布
当项目最终准备好发布时,可以使用 cargo build --release
来优化编译项目。
这会在 target/release 而不是 target/debug 下生成可执行文件。
这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。
求推荐 求收藏 求转发 求关注