Rust 基础(一)
admin
2024-01-22 18:42:27
0

一、windows 安装

1.1 Rustup

Rust安装程序和版本管理工具

1.1.1 RUSTUP_HOME

Rustup元数据工具链将被安装到Rustup主目录中
默认: %USERPROFILE%\.rustup

1.1.2 使用

rustup.exe [FLAGS] [+toolchain] 

FLAGS

ARGS

<+toolchain>    release channel (e.g. +stable) or custom toolchain to set override

SUBCOMMANDS

1) doc
打开当前工具链的文档

# 打开 The Rust Programming Language
rustup docs --book 

2) update
更新Rust工具链和 rustup

3)self
修改rustup安装
To uninstall Rust and rustup

rustup self uninstall

1.2 Cargo

Rust 构建工具和包管理器
有关Cargo的更多信息

1.2.1 CARGO_HOME

Cargo主目录
cargo、rustc、rustup等命令将被添加到Cargo的bin目录,位于:
%USERPROFILE%\.cargo\bin

1.2.2 使用

cargo [+toolchain] [OPTIONS] [SUBCOMMAND]

cargo build / b

编译当前包

cargo run

运行项目

cargo test

运行测试

cargo doc / d

构建这个包及其依赖项的文档

cargo publish

将库发布到crates.io

cargo install

Install a Rust binary. Default location is $HOME/.cargo/bin

为了测试已经安装了Rust和Cargo,可以在终端上运行:

cargo --version
#cargo 1.65.0 (4bc8f24d3 2022-10-20)

cargo new(init)

cargo new --help

为我们生成“Hello, world!”项目!我们可以通过移动到我们创建的新目录并在终端中运行这个程序: cargo run

init : 在现有目录中创建一个新的 cargo 包

cargo add

Add dependencies to a manifest file

Cargo check

这个命令可以快速检查你的代码,确保它可以编译,但不会生成可执行文件

1.2.3 rustc

Rust编译器

在Linux或macOS上安装rust

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

该命令下载一个脚本并开始安装Rust工具,该工具将安装Rust的最新稳定版本。
Rustup 默认目录:$HOME/.rustup
Cargo 默认目录:$HOME/.cargo

查看环境变量

In Windows CMD, use: echo %PATH%
In PowerShell, use: echo $env:Path
In Linux and macOS, use: echo $PATH

二、入门

2.1 编写和运行Rust程序

Rust文件总是以.rs扩展名结束。
如果在文件名中使用了多个单词,约定使用下划线分隔它们。例如,使用hello_world。Rs而不是helloworld.rs。

文件:main.rs

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

编译并运行该文件:

$ rustc main.rs
$ ./main
Hello, world!

2.1.1 Rust程序的解剖

1)

fn main() {}

这几行定义了一个名为main的函数。main 函数很特殊:它总是运行在每个可执行Rust程序中的第一个代码。
如果有参数,它们将放在括号()中。
函数体被包装在{}中

将左花括号与函数声明放在同一行上,中间加一个空格是很好的风格。
如果想在Rust项目中坚持一个标准的样式,可以使用一个名为rustfmt的自动格式化工具以特定的样式格式化您的代码(关于rustfmt的更多信息)。
2)

    println!("Hello, world!");

首先,Rust样式是用四个空格缩进,而不是制表符。
第二, println !调用了一个 Rust宏(Rust macro)。
如果它调用了一个函数,那么它将被输入为println(不带!)。

使用!意味着调用的是宏而不是普通函数,而且宏并不总是遵循与函数相同的规则。

第三,我们将“Hello, world!”字符串作为参数传递给println!
第四,我们用分号(;)结束这一行,这表示这个表达式结束了,下一个已经准备好开始了。Rust代码的大多数行都以分号结尾

2.1.2 编译和运行是独立的步骤

在运行Rust程序之前,必须使用Rust编译器编译它,输入rustc命令并传入源文件的名称,像这样:

rustc main.rs

如果有C或c++背景,您会注意到这类似于gcc或clang。编译成功后,Rust输出一个二进制可执行文件。

在使用Windows时,包含扩展名为.pdb的调试信息的文件(main.pdb)

如果更熟悉动态语言,如Ruby、Python或JavaScript,可能不习惯将程序编译和运行作为单独的步骤。
Rust是一种预先编译的语言,这意味着您可以编译一个程序并将可执行文件交给其他人,他们甚至可以在没有安装Rust的情况下运行它。如果您给某人一个.rb、.py或.js文件,他们需要(分别)安装一个Ruby、Python或JavaScript实现。

对于简单的程序,用rustc编译就可以了,

2.2 Hello, Cargo!

大多数Rustaceans使用这个工具来管理他们的Rust项目,因为Cargo为您处理了很多任务,比如构建代码、下载代码所依赖的库,以及构建这些库。(我们称代码需要的库为依赖项(dependencies)。)

绝大多数Rust项目都使用Cargo

2.2.1 生成一个新项目

首先,我们将使用Cargo为我们创建一个新项目

cargo new hello-rust
#Created binary (application) `hello-rust` package

这将生成一个名为hello-rust的新目录和项目,包含以下文件:

hello-rust
|- Cargo.toml
|- src|- main.rs

Cargo.toml

[package]
name = "hello_rust"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]

是Rust的清单文件。它是保存项目元数据以及依赖项的地方
该文件是TOML (Tom 's Obvious, Minimal Language)格式,这是Cargo的配置格式。

第一行[package]是一个节(section )的标题,表示下面的语句正在配置一个包
接下来的三行设置了Cargo编译程序所需的配置信息:名称、版本和要使用的Rust版本。我们将在附录E中讨论版本键。
最后一行[dependencies]是列出项目依赖项的部分的开始。在Rust中,代码包被称为crates。在这个项目中我们不需要任何其他的crates

src/main.rs 是我们编写应用程序代码的地方

它还初始化了一个新的Git存储库和一个.gitignore文件。如果在现有的Git存储库中运行cargo new,则不会生成Git文件;你可以通过使用cargo new --vcs=git来覆盖这种行为

注意:Git是一个通用的版本控制系统。通过使用--vcs标志,你可以改变cargo new使用不同的版本控制系统或不使用版本控制系统。运行cargo new --help查看可用选项。

Cargo希望源文件位于src目录中。顶级项目目录仅用于存放README文件、许可信息、配置文件和其他与代码无关的内容。使用Cargo可以帮助您组织项目。每样东西都有一个地方,每样东西都在它的地方。

2.2.2 建立和运行一个Cargo 项目

hello_rust目录中,输入以下命令构建项目:

cargo build

这个命令在target/debug/hello_rust(或在Windows上target\debug\hello_rust.exe)中创建一个可执行文件,而不是在当前目录中。
因为默认构建是调试构建,所以Cargo将二进制文件放在名为debug的目录中。你可以用这个命令运行可执行文件:

$ ./target/debug/hello_rust # or .\target\debug\hello_rust.exe on Windows
Hello, world!

第一次运行cargo build还会导致cargo在顶层创建一个新文件:cargo .lock。该文件跟踪项目中依赖项的确切版本。这个项目没有依赖项,所以文件有点稀疏。你不需要手动修改这个文件;Cargo为您管理它的内容。

我们也可以使用cargo run来编译代码,然后运行可执行文件

Cargo还提供了一个名为Cargo check的命令。这个命令可以快速检查你的代码,确保它可以编译,但不会生成可执行文件
通常,cargo checkcargo build,要快得多,因为它跳过了生成可执行文件的步骤。
使用Cargo的另一个优点是,无论在哪个操作系统上工作,命令都是相同的。

2.2.3 Building for Release

当项目最终准备好发布时,可以使用cargo build --release对其进行优化编译。这个命令将在target/release而不是target/debug中创建一个可执行文件。
如果正在对代码的运行时间进行基准测试,请确保运行cargo build --release和使用target/release中的可执行文件进行基准测试。

2.2.4 Cargo 作为约定

尽管hello_rust项目很简单,但它现在使用了将在Rust职业生涯的其余部分中使用的许多实际工具。
有关Cargo的更多信息

2.2.5 添加依赖

你可以在 crates.io(Rust的包注册中心)上找到各种各样的库。 在Rust中,我们经常将包称为“crate”。
在Cargo.toml文件中,添加以下信息(可从crate 页面):

[dependencies]
ferris-says = "0.2"

Now we can run:

cargo build

Cargo将为我们安装依赖项。

您将看到运行此命令为我们创建了一个新文件Cargo.lock。该文件是本地使用的依赖项的确切版本的日志。
在main.rs中

use ferris_says::say;
use std::io::{stdout, BufWriter};fn main() {let stdout = stdout();let message = String::from("Hello fellow Rustaceans!");let width = message.chars().count();let mut writer = BufWriter::new(stdout.lock());say(message.as_bytes(), width, &mut writer).unwrap();
}

相关内容

热门资讯

原创 4... 写在文章前的声明:在本文之前的说明:本文中所列的投资信息,只是一个对基金资产净值进行排行的客观描述,...
胜宏科技港股大涨49% 做完英... 记者 陈月芹 4月21日,全球AI算力板龙头胜宏科技(02476.HK)登陆港交所,上市首日股价大涨...
永赢基金:聚焦“科技新锐”,科... 数据来源:Wind,时间统计区间为2025/1/1-2026/4/21,指数过往表现不预示未来,不构...
五大阅读趋势显现!当当网发布2... 在第31个世界读书日即将来临之际及首个全民阅读活动周期间,当当网正式发布2026国民阅读洞察报告。 ...
业绩逐季回暖 老百姓大药房一季... 上证报中国证券网讯(记者 夏子航)4月22日晚,老百姓大药房发布2025年年报和2026年一季报。今...
中国20强城市大洗牌:苏州接近... 中国的城市经济竞争格局一直在变化,每年发布的GDP数据都会对城市经济实力进行重新排列。2025年榜又...
直击金宏气体股东会:预期年内氦... 《科创板日报》4月22日讯(记者 郭辉)金宏气体日前举行2025年度股东大会。会上该公司审议了公司年...
5月1日起,俄据悉将叫停哈萨克... 据行业消息人士透露,俄罗斯将于5月1日起停止经友谊管道转运哈萨克斯坦输往德国的石油,相关调整计划已送...
深化具身智能生态布局 京东携手... 4 月 22 日,京东与国内消费级人形机器人头部企业松延动力正式达成三年期战略合作。双方将围绕产品研...
原创 帮... 先问你一个问题,美伊停火今晚到期,按常理避险情绪该升温,黄金应该涨吧?结果恰恰相反——原油涨了,黄金...
300295、600889,将... 三六五网、南京化纤,将被*ST。 公司股票自4月23日开市起停牌一天,于4月24日开市起复牌并实施退...
能源大变天!外媒:羡慕中国的石... 这一次油价突破 110 美元的能源危机,着实魔幻。如果放在十年前,没人会相信中国能在这场风波中获利,...
黄金涨跌两难,现在还能上车吗? 中新网4月22日电(记者 左雨晴) 四月以来,美伊局势反复拉扯,美联储降息预期一变再变。黄金价格在4...
“我身体健康”,库克现身员工大... 当地时间4月21日,受苹果官宣CEO换届影响,公司股价盘中下探超2%,总市值失守4万亿美元关口,收盘...
库克留下一个悬念 工程师能否拯救创新节奏? 听筒Tech(ID:tingtongtech)原创 文 | 赵 森 ...
探索消费信贷与社交支付深度融合... 腾讯这一金融产品再添新功能,4月19日,北京商报记者注意到,微信分付灰度测试转账功能引发热议,在向微...
土耳其主要银行股指早盘下跌2% 每经AI快讯,4月20日,土耳其主要银行股指早盘下跌2%。 每日经济新闻
好用的OTA代运营源头厂家 在如今竞争激烈的酒旅行业中,OTA代运营服务成为了众多酒店、民宿提升竞争力的关键。但市场上的代运营厂...
成都五一出游全国热门第三 “五一”假期临近,同程旅行最新发布的《2026“五一”旅行趋势报告》显示,今年“五一”期间成都同时位...