- Rust 教程
- 铁锈 - 主页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- 铁锈 - 恒定
- Rust - 字符串
- Rust - 运算符
- Rust - 决策
- 铁锈 - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- 铁锈 - 切片
- Rust - 结构
- Rust - 枚举
- Rust - 模块
- Rust - 收藏
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用的资源
- Rust - 快速指南
- Rust - 有用的资源
- Rust - 讨论
Rust - 快速指南
Rust - 简介
Rust 是一种系统级编程语言,由 Graydon Hoare 开发。Mozilla Labs 后来收购了该程序。
应用程序与系统编程语言
Java/C#等应用程序编程语言用于构建软件,直接向用户提供服务。它们帮助我们构建电子表格、文字处理器、Web 应用程序或移动应用程序等业务应用程序。
C/C++ 等系统编程语言用于构建软件和软件平台。它们可用于构建操作系统、游戏引擎、编译器等。这些编程语言需要大量的硬件交互。
系统和应用程序编程语言面临两个主要问题 -
- 编写安全的代码很困难。
- 编写多线程代码很困难。
为什么生锈?
Rust 专注于三个目标 -
- 安全
- 速度
- 并发性
该语言旨在以简单的方式开发高度可靠且快速的软件。Rust 可用于将高级程序编写为特定于硬件的程序。
表现
Rust 编程语言在设计上没有垃圾收集器 (GC)。这提高了运行时的性能。
编译时的内存安全
使用 Rust 构建的软件不会出现悬空指针、缓冲区溢出和内存泄漏等内存问题。
多线程应用程序
Rust 的所有权和内存安全规则提供了没有数据竞争的并发性。
支持 Web 组装 (WASM)
Web Assembly 有助于在浏览器、嵌入式设备或其他任何地方执行高计算密集型算法。它以本机代码的速度运行。Rust 可以编译为 Web Assembly,以实现快速、可靠的执行。
Rust - 环境设置
通过rustup可以轻松安装 Rust ,这是一个基于控制台的工具,用于管理 Rust 版本和相关工具。
在 Windows 上安装
让我们学习如何在 Windows 上安装 RUST。
要在 Windows 上运行 Rust 程序,必须安装带有 C++ 工具的 Visual Studio 2013 或更高版本。首先,从这里下载Visual Studio VS 2013 Express
下载并安装适用于 Windows 的rustup工具。rustup-init.exe可在此处下载 - Rust Lang
双击rustup-init.exe文件。单击后,将出现以下屏幕。
按Enter 键进行默认安装。安装完成后,将出现以下屏幕。
从安装屏幕可以清楚地看出,Rust 相关文件存储在该文件夹中 -
C:\Users\{PC}\.cargo\bin
该文件夹的内容是 -
cargo-fmt.exe cargo.exe rls.exe rust-gdb.exe rust-lldb.exe rustc.exe // this is the compiler for rust rustdoc.exe rustfmt.exe rustup.exe
Cargo是 Rust 的包管理器。要验证货物是否已安装,请执行以下命令 -
C:\Users\Admin>cargo -V cargo 1.29.0 (524a578d7 2018-08-05)
Rust 的编译器是rustc。要验证编译器版本,请执行以下命令 -
C:\Users\Admin>cargo -V cargo 1.29.0 (524a578d7 2018-08-05)
Linux/Mac 上的安装
要在 Linux 或 macOS 上安装rustup,请打开终端并输入以下命令。
$ curl https://sh.rustup.rs -sSf | sh
该命令下载脚本并开始安装rustup工具,该工具将安装 Rust 的最新稳定版本。系统可能会提示您输入密码。如果安装成功,将出现以下行 -
Rust is installed now. Great!
下次登录后,安装脚本会自动将 Rust 添加到系统路径中。要立即开始使用 Rust 而无需重新启动终端,请在 shell 中运行以下命令以手动将 Rust 添加到系统路径 -
$ source $HOME/.cargo/env
或者,您可以将以下行添加到 ~/.bash_profile 中 -
$ export PATH="$HOME/.cargo/bin:$PATH"
注意- 当您尝试编译 Rust 程序并收到指示链接器无法执行的错误时,这意味着您的系统上未安装链接器,您需要手动安装链接器。
使用 RUST 教程点编码基础
读取-评估-打印循环 (REPL) 是一种易于使用的交互式 shell,用于编译和执行计算机程序。如果您想在浏览器中在线编译和执行 Rust 程序,请使用 Tutorialspoint Coding Ground。
Rust - HelloWorld 示例
本章通过HelloWorld示例讲解Rust语言的基本语法。
创建HelloWorld-App文件夹并导航到终端上的该文件夹
C:\Users\Admin>mkdir HelloWorld-App C:\Users\Admin>cd HelloWorld-App C:\Users\Admin\HelloWorld-App>
要创建 Rust 文件,请执行以下命令 -
C:\Users\Admin\HelloWorld-App>notepad Hello.rs
Rust 程序文件的扩展名为 .rs。上面的命令创建一个空文件Hello.rs并在记事本中打开它。将下面给出的代码添加到该文件中 -
fn main(){ println!("Rust says Hello to TutorialsPoint !!"); }
上面的程序定义了一个函数 main fn main()。fn关键字用于定义函数。main ()是一个预定义函数,充当程序的入口点。打印!是 Rust 中预定义的宏。它用于将字符串(此处为 Hello)打印到控制台。宏调用始终标有感叹号 – ! 。
使用rustc编译Hello.rs文件。
C:\Users\Admin\HelloWorld-App>rustc Hello.rs
程序编译成功后,会生成一个可执行文件( file_name.exe )。要验证是否生成.exe文件,请执行以下命令。
C:\Users\Admin\HelloWorld-App>dir //lists the files in folder Hello.exe Hello.pdb Hello.rs
- 执行 Hello.exe 文件并验证输出。
什么是宏?
Rust 提供了一个强大的宏系统,允许元编程。正如您在前面的示例中所看到的,宏看起来像函数,只是它们的名称以 bang(!) 结尾,但宏不是生成函数调用,而是扩展为与程序其余部分一起编译的源代码。因此,与函数不同,它们为程序提供了更多运行时功能。宏是函数的扩展版本。
使用 println! 宏语法
println!(); // prints just a newline println!("hello ");//prints hello println!("format {} arguments", "some"); //prints format some arguments
Rust 中的评论
注释是提高程序可读性的一种方法。注释可用于包含有关程序的附加信息,例如代码作者、有关函数/构造的提示等。编译器会忽略注释。
Rust 支持以下类型的注释 -
单行注释 ( // ) - // 和行尾之间的任何文本都被视为注释
多行注释 (/* */) - 这些注释可能跨越多行。
例子
//this is single line comment /* This is a Multi-line comment */
在线执行
Rust 程序可以通过Tutorialspoint Coding Ground在线执行。在编辑器选项卡中编写HelloWorld程序,然后单击执行查看结果。
Rust - 数据类型
类型系统表示该语言支持的不同类型的值。在程序存储或操作所提供的值之前,类型系统会检查它们的有效性。这确保了代码的Behave符合预期。类型系统还允许更丰富的代码提示和自动化文档。
Rust 是一种静态类型语言。Rust 中的每个值都具有特定的数据类型。编译器可以根据分配给变量的值自动推断变量的数据类型。
声明一个变量
使用let关键字声明变量。
fn main() { let company_string = "TutorialsPoint"; // string type let rating_float = 4.5; // float type let is_growing_boolean = true; // boolean type let icon_char = '♥'; //unicode character type println!("company name is:{}",company_string); println!("company rating on 5 is:{}",rating_float); println!("company is growing :{}",is_growing_boolean); println!("company icon is:{}",icon_char); }
在上面的示例中,变量的数据类型将从分配给它们的值推断出来。例如,Rust 会将字符串数据类型分配给变量company_string,将浮点数据类型分配给rating_float等。
打印!宏有两个参数 -
- 特殊语法{ },即占位符
- 变量名或常量
占位符将被变量的值替换
上述代码片段的输出将是 -
company name is: TutorialsPoint company rating on 5 is:4.5 company is growing: true company icon is: ♥
标量类型
标量类型表示单个值。例如,10,3.14,'c'。Rust 有四种主要标量类型。
- 整数
- 浮点
- 布尔值
- 人物
我们将在后续部分中了解每种类型。
整数
整数是没有小数部分的数字。简单来说,整数数据类型用于表示整数。
整数可以进一步分为有符号整数和无符号整数。有符号整数可以存储负值和正值。无符号整数只能存储正值。下面给出整数类型的详细描述 -
先生。 | 尺寸 | 签 | 未签名 |
---|---|---|---|
1 | 8位 | i8 | u8 |
2 | 16位 | i16 | u16 |
3 | 32位 | i32 | u32 |
4 | 64位 | i64 | u64 |
5 | 128位 | i128 | u128 |
6 | 拱 | 大小 | 乌斯泽 |
整数的大小可以是arch。这意味着数据类型的大小将从机器的体系结构中得出。大小为arch的整数在 x86 计算机上为 32 位,在 x64 计算机上为 64 位。拱形整数主要在对某种集合进行索引时使用。
插图
fn main() { let result = 10; // i32 by default let age:u32 = 20; let sum:i32 = 5-15; let mark:isize = 10; let count:usize = 30; println!("result value is {}",result); println!("sum is {} and age is {}",sum,age); println!("mark is {} and count is {}",mark,count); }
输出如下 -
result value is 10 sum is -10 and age is 20 mark is 10 and count is 30
如果将age值替换为浮点值,上面的代码将返回编译错误。
整数范围
每个有符号变体可以存储从-(2^(n-1) 到 2^(n-1) -1 的数字,其中 n 是变体使用的位数。例如,i8 可以存储从-(2^ 7) 到 2^7 -1 − 此处我们将n替换为 8。
每个无符号变体可以存储从0到(2^n)-1 的数字。例如, u8 可以存储从0到(2^8)-1 的数字,相当于 0 到 255。
整数溢出
当分配给整数变量的值超出 Rust 为数据类型定义的范围时,就会发生整数溢出。让我们通过一个例子来理解这一点 -
fn main() { let age:u8 = 255; // 0 to 255 only allowed for u8 let weight:u8 = 256; //overflow value is 0 let height:u8 = 257; //overflow value is 1 let score:u8 = 258; //overflow value is 2 println!("age is {} ",age); println!("weight is {}",weight); println!("height is {}",height); println!("score is {}",score); }
无符号 u8 变量的有效范围是 0 到 255。在上面的示例中,变量被分配的值大于 255(Rust 中整型变量的上限)。执行时,上面的代码将返回警告 - warning - Literals out of range for u8 for Weight, height and Score Variables。255之后的溢出值将从0、1、2等开始。没有警告的最终输出如下所示 -
age is 255 weight is 0 height is 1 score is 2
漂浮
Rust 中的浮点数据类型可以分为f32和f64。f32类型是单精度浮点数,f64类型是双精度。默认类型是 f64。请考虑以下示例以了解有关浮点数据类型的更多信息。
fn main() { let result = 10.00; //f64 by default let interest:f32 = 8.35; let cost:f64 = 15000.600; //double precision println!("result value is {}",result); println!("interest is {}",interest); println!("cost is {}",cost); }
输出如下所示 -
interest is 8.35 cost is 15000.6
自动铸型
Rust 中不允许自动类型转换。考虑以下代码片段。整数值被分配给浮点变量interest。
fn main() { let interest:f32 = 8; // integer assigned to float variable println!("interest is {}",interest); }
编译器会抛出类型不匹配的错误,如下所示。
error[E0308]: mismatched types --> main.rs:2:22 | 2 | let interest:f32=8; | ^ expected f32, found integral variable | = note: expected type `f32` found type `{integer}` error: aborting due to previous error(s)
数字分隔符
为了方便大数字的可读性,我们可以使用视觉分隔符 _ 下划线来分隔数字。即 50,000 可以写成 50_000 。下面的示例显示了这一点。
fn main() { let float_with_separator = 11_000.555_001; println!("float value {}",float_with_separator); let int_with_separator = 50_000; println!("int value {}",int_with_separator); }
输出如下 -
float value 11000.555001 int value 50000
布尔值
布尔类型有两个可能的值 - true或false。使用bool关键字声明布尔变量。
插图
fn main() { let isfun:bool = true; println!("Is Rust Programming Fun ? {}",isfun); }
上述代码的输出将是 -
Is Rust Programming Fun ? true
特点
Rust 中的字符数据类型支持数字、字母、Unicode 和特殊字符。使用char关键字来声明字符数据类型的变量。Rust 的 char 类型表示 Unicode 标量值,这意味着它可以表示的不仅仅是 ASCII。Unicode 标量值范围从U+0000到U+D7FF以及U+E000到U+10FFFF(含)。
让我们考虑一个示例来了解有关字符数据类型的更多信息。
fn main() { let special_character = '@'; //default let alphabet:char = 'A'; let emoji:char = '