[这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战]
一、 安装
1.编译环境选择
rust底层是依赖C环境,所以需要先安装C/C++编译环境, 有两种选择:
- 安装微软的C++ build tools,即 Visual Studio 2019 生成工具;
- 安装mingw/cygwin(模拟linux) ,需要配置 gnu toolchain开发环境(stable-x86_64-pc-windows-gnu):
- Cygwin 提供了Windows下的类Unix环境(Window);
- MinGW 是提供用于开发Window应用的开发环境(Linux)。
二、配置Cygwin
1. 初始化与更新 Cygwin 包
为 64 位版本的 Windows 安装和更新 Cygwin:当您想要更新或安装适用于 64 位 Windows 的 Cygwin 软件包 时,请运行setup-x86_64.exe。该签名的设置,x86_64.exe可以用来验证这个二进制文件的有效性。
验证安装程序的签名:
-
gpg --recv-key 1A698DE9E2E56300 gpg --keyid-format=long --with-fingerprint --verify setup-x86_64.exe.sig setup-x86_64.exe
通过Cygwin Setup 可以更新包,为了能够通过命令安装软件,可以先使用该程序添加GIT。
- 打开后,直接下一步即可;
- 到了包管理页面找到GIT选择版本号即可;
- 再通过GIT安装apt-cyg。
git clone https://github.com/transcode-open/apt-cyg.git
cd apt-cyg/
chmod +x apt-cyg
cp apt-cyg /bin
apt-cyg install wget
注:wget安装会提示缺少lynx,需要通过Cygwin安装程序安装。
2. 在windows命令下使用cygwin
需要添加环境变量,Path 添加 D:\cygwin64\bin,刷新环境变量set PATH=C。
在Window下通过以下命令可以进入类unix环境:
D:\Environment\Rust>bash
86178@LAPTOP-KFPIFLPS /cygdrive/d/Environment/Rust
86178@LAPTOP-KFPIFLPS /cygdrive/d/Environment/Rust exit
3. Rustup前置程序
为了通过 Cygwin配置Rustup,需要通过Cygwin安装程序安装以下包:
- httpd
- make
- ls
- curl
三、Rustup
Rustup是Rust 安装程序和版本管理工具,相关资源
1. 配置环境变量
CARGO_HOME=D:\Environment\Rust\.cargo
RUSTUP_HOME=D:\Environment\Rust\.rustup
RUSTUP_UPDATE_ROOT=http://mirrors.ustc.edu.cn/rust-static/rustup
RUSTUP_DIST_SERVER=http://mirrors.ustc.edu.cn/rust-static
path 添加%CARGO_HOME%\bin
set PATH=C
2. 安装程序
打开rustup-init.exe文件,输入2,自定义安装选项,如下:
host triple:x86_64-pc-windows-gnu 版本
default toolchain:stable 稳定版
profile: complete 表示完全安装
modify PATH variable:y 表示按照环境变量定义的路径安装
查看安装结果:
C:\Users\86178>cargo version
cargo 1.52.0 (69767412a 2021-04-21)
查看版本:
C:\Users\86178>rustup show
Default host: x86_64-pc-windows-gnu
rustup home: D:\Environment\Rust\.rustup
installed toolchains
--------------------
stable-x86_64-pc-windows-gnu (default)
stable-x86_64-pc-windows-msvc
active toolchain
----------------
stable-x86_64-pc-windows-gnu (default)
rustc 1.52.1 (9bc8c42bb 2021-05-09)
3. Hello World
一个Hello World的例子。
3.1 配置
在windows配置项目:
> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world
创建一个新的源文件并将其命名为main.rs。Rust 文件总是以.rs扩展名结尾。如果您在文件名中使用多个单词,请使用下划线将它们分开。例如,使用hello_world.rs而不是 helloworld.rs。
fn main() {
println!("Hello, world!");
}
注:将左大括号与函数声明放在同一行是一种很好的风格,中间加一个空格。如果你想在 Rust 项目中坚持标准风格,你可以使用一个自动格式化工具rustfmt来以特定的风格格式化你的代码.
- Rust 风格是缩进四个空格,而不是一个制表符;
println!调用一个 Rust 宏。如果它改为调用函数,则输入为println(不带!)- 大多数 Rust 代码行都以分号结尾。
3.2 编译与运行
在运行 Rust 程序之前,您必须使用 Rust 编译器通过输入rustc命令并将源文件的名称传递给它来编译它
运行方式如下:
-- Linux
$ rustc main.rs # 编译
$ ./main # 运行
Hello, world!
-- Window
> rustc main.rs
> .\main.exe
Hello, world!
Rust 是一种提前编译语言,这意味着您可以编译程序并将可执行文件提供给其他人,他们甚至可以在没有安装 Rust 的情况下运行它。如果你给某人一个.rb、.py或 .js文件,他们需要安装一个 Ruby、Python 或 JavaScript 实现(分别)。但是在这些语言中,您只需要一个命令来编译和运行您的程序。一切都是语言设计的权衡。
四、Cargo
Cargo 是 Rust 的构建系统和包管理器。大多数 Rustaceans 使用这个工具来管理他们的 Rust 项目,因为 Cargo 为你处理了很多任务,比如构建代码、下载代码依赖的库以及构建这些库。(我们将您的代码需要的库称为依赖项。)
1. Cargo创建项目
查看是否安装cargo:
cargo --version
使用 Cargo 创建项目:
$ cargo new hello_cargo
$ cd hello_cargo
-- 使用现成的git存储库创建项目
cargo new --vcs=git.
2. 文件结构
生成以下文件
- src
- main.rs
- Cargo.toml
- .gitignore
- .git Git存储库
Cargo.toml(Tom's Obvious, Minimal Language)的内容如下:
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["XXX <XXX@gmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
使用 Cargo 可以组织项目结构,使所有对象都有迹可循。
3. 编译与运行项目
$ cargo build
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
$ cargo run
// 此命令会快速检查您的代码以确保它可以编译但不生成可执行文件
$ cargo check
// 为发布而构建
cargo build --release
4. 相关实例
use std::io; //使用use 语句将该类型显式引入作用域
fn main() {
println!("Hello, world!");
println!("Guess Number");
// 存储用户输入
let mut guess = String::new();
// stdin函数返回 的一个实例std::io::Stdin,它是一种表示终端标准输入句柄的类型。
// read_line 表示读取一行到缓冲区guess
// expect 表示异常处理
io::stdin()
.read_line(&mut guess)
.expect("faild");
println!("You guessed: {}", guess);
}
read_line函数源码如下:
#[stable(feature = "rust1", since = "1.0.0")]
pub fn read_line(&self, buf: &mut String) -> io::Result<usize> {
self.lock().read_line(buf)
}
read_line将用户输入的内容放入我们传递给它的字符串中,但它也返回一个值Result,表示函数运行结果,这个模块有不同的实现,例如io::Result。Result类型是enum,通常被称为枚举。枚举是一种可以具有一组固定值的类型,这些值称为枚举的变体。对于Result,变体是Ok或Err。所述Ok变体指示操作是成功的,并且内部Ok是成功生成值。该Err变种意味着操作失败,并Err包含有关操作如何或为何失败的信息。
如果您不调用expect,程序将编译,但会收到警告。