Press "Enter" to skip to content

Rust入门第一课:写个Hello World

2021 年了,学一下 Rust 吧。

参考官方文档,按照国际惯例,先来写一个 Hello World 程序。

安装

对比其他编程语言的安装方式,rust 除了支持源码编译外,还提供了一个安装器( rustup )来快速安装。

通过命令行安装 rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

修改环境变量:

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

查看版本

$ rustup --version
rustup 1.23.1 (3df2264a9 2020-11-30)

$ rustc --version
rustc 1.49.0 (e1884a8e3 2020-12-29)

$ cargo --version
cargo 1.49.0 (d00d64df9 2020-12-05)

rustup 是 rust 版本管理器

rustc 是 rust 编译器

cargo 是 rust 包管理工具。

编写 rust 代码

创建一个 rust 文件,开始编写 Hello World 代码

vim hello.rs 创建代码文件,编写代码:

fn main() {
    println!("Hello World!");
}

跟一般的编译型语言一样,rust 的执行过程也分为编译和运行两部分。

先编译 rust 代码

$ rustc hello.rs 

编译完成在同目录下生成了同名的可执行二进制文件

运行可执行文件,可以看到控制台输出了 Hello World!

$ ./hello 
Hello World!

包管理配置

就像 nodejs 使用 npm,php 使用 composer、python 使用 pypi 一样

rust 使用 cargo 作为包管理工具

一般的包管理平台都是用的境外服务器,在国内下载依赖包通常需要配置镜像来加速。

使用中科大的 rust 镜像,修改 cargo 配置文件:vim ~/.cargo/config

写入镜像配置

[source.crates-io]
replace-with='ustc'

[source.ustc]
registry="https://mirrors.ustc.edu.cn/crates.io-index"

后续安装 rust 依赖包的时候,就会使用配置的镜像进行拉取。

VS Code 开发配置

我们一般使用 VS Code 作为日常的开发编辑器,如果用来开发 rust 程序,需要安装几个插件

  1. Rust 官方插件,提供 rust 代码检查、格式化、自动完成等功能。

  1. Code Runner,通用代码运行插件,可编译单个 rust 文件。

在代码编写窗口,调用 Code Runner 将会使用 rustc 工具对代码进行编译,需要提前配置 rustc 编译工具的位置

{
  "code-runner.executorMap": {
    "rust": "/root/.cargo/bin/rustc"
  }
}

可以为 Code Runner 插件绑定一个运行快捷键:

[
  {
    "key": "cmd+r",
    "command": "code-runner.run"
  },
  {
    "key": "ctrl+alt+n",
    "command": "-code-runner.run"
  }
]

在编写 rust 代码过程中,按下快捷键 cmd+r 就可以实时编译了。

rust 项目开发

在完成了前面的试水之后,我们可以开始用 rust 开发项目了。

使用 cargo 创建一个新项目

$ cargo new rust-demo
     Created binary (application) `rust-demo` package

生成的 rust-demo 项目的目录结构为

$ tree
.
|-- Cargo.toml
`-- src
    `-- main.rs

Cargo.toml 为项目的配置文件,定义了项目的基本信息,依赖的包信息等。

文件内容类似:

[package]
name = "rust-demo"
version = "0.1.0"
authors = ["艾逗笔 <me@idoubi.cc>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

src 目录下是项目的源代码。

编写完项目代码后,在项目根目录运行 cargo run 完成项目的编译与运行。

$ cargo run  
   Compiling rust-demo v0.1.0 (/data/code/rust-demo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.66s
     Running `target/debug/rust-demo`
Hello, world!

如果运行 cargo build ,则只会完成编译过程。编译生成的内容在 target 目录下。

$ tree target 
target
|-- CACHEDIR.TAG
`-- debug
    |-- build
    |-- deps
    |   |-- rust_demo-974597d25eb24ddf
    |   `-- rust_demo-974597d25eb24ddf.d
    |-- examples
    |-- incremental
    |   `-- rust_demo-chnzk7pgkxdz
    |       |-- s-fvfqrhmisp-1vg0edz-jzrwf6vs8k72
    |       |   |-- 1c13zz2y1hzbcwk8.o
    |       |   |-- 1d3qur61nopxku2b.o
    |       |   |-- 1nfhfokemfsf2727.o
    |       |   |-- 31xgledb84l6sbed.o
    |       |   |-- 49i6i3y832wqo40p.o
    |       |   |-- 4my21cnst159etff.o
    |       |   |-- 4siqxfrw9lh3axbk.o
    |       |   |-- 5cdc43ijbx4jimih.o
    |       |   |-- dep-graph.bin
    |       |   |-- query-cache.bin
    |       |   `-- work-products.bin
    |       `-- s-fvfqrhmisp-1vg0edz.lock
    |-- rust-demo
    `-- rust-demo.d

7 directories, 17 files

可以直接运行编译后的二进制文件

$ ./target/debug/rust-demo 
Hello, world!