Rust集合与字符串集合(Collection)是数据结构中最普遍的数据存放形式,Rust标准库中提供了丰富的集合类型帮助开发者处理数据结构的操作。向量向量(Vector)是一个存放多值的单数据结构,该结构将相同类型的值线性的存放在内存中。向量是线性表,在Rust中的表示是Vec。向量的使用方式类似于列表(List),我们可以通过这种方式创建指定类型的向量:letvector:Vec=Vec::new();//创建类型为i32的空向量letvector=vec![1,2,4,8];//通过数组创建向量我们使用线性表常常会用到追加的操作,但是追加和栈的push操作本质是一样的,所以向量只有pus
Rust文件与IO本章介绍Rust语言的I/O操作。接收命令行参数命令行程序是计算机程序最基础的存在形式,几乎所有的操作系统都支持命令行程序并将可视化程序的运行基于命令行机制。命令行程序必须能够接收来自命令行环境的参数,这些参数往往在一条命令行的命令之后以空格符分隔。在很多语言中(如Java和C/C++)环境参数是以主函数的参数(常常是一个字符串数组)传递给程序的,但在Rust中主函数是个无参函数,环境参数需要开发者通过std::env模块取出,过程十分简单:实例fnmain(){ letargs=std::env::args(); println!("{:?}",args);}现在直接运
Rust文件与IO本章介绍Rust语言的I/O操作。接收命令行参数命令行程序是计算机程序最基础的存在形式,几乎所有的操作系统都支持命令行程序并将可视化程序的运行基于命令行机制。命令行程序必须能够接收来自命令行环境的参数,这些参数往往在一条命令行的命令之后以空格符分隔。在很多语言中(如Java和C/C++)环境参数是以主函数的参数(常常是一个字符串数组)传递给程序的,但在Rust中主函数是个无参函数,环境参数需要开发者通过std::env模块取出,过程十分简单:实例fnmain(){ letargs=std::env::args(); println!("{:?}",args);}现在直接运
Rust生命周期Rust生命周期机制是与所有权机制同等重要的资源管理机制。之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。引用是对待复杂类型时必不可少的机制,毕竟复杂类型的数据不能被处理器轻易地复制和计算。但引用往往导致极其复杂的资源管理问题,首先认识一下垂悬引用:实例{ letr; { letx=5; r=&x; } println!("r:{}",r);}这段代码是不会通过Rust编译器的,原因是r所引用的值已经在使用之前被释放。上图中的绿色范围'a表示r的生命周期,蓝色范围'b表示x的生命周期。很显然,'b比'a小得多,引用必须在值的生命周期以内才有效。一直
Rust生命周期Rust生命周期机制是与所有权机制同等重要的资源管理机制。之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。引用是对待复杂类型时必不可少的机制,毕竟复杂类型的数据不能被处理器轻易地复制和计算。但引用往往导致极其复杂的资源管理问题,首先认识一下垂悬引用:实例{ letr; { letx=5; r=&x; } println!("r:{}",r);}这段代码是不会通过Rust编译器的,原因是r所引用的值已经在使用之前被释放。上图中的绿色范围'a表示r的生命周期,蓝色范围'b表示x的生命周期。很显然,'b比'a小得多,引用必须在值的生命周期以内才有效。一直
Rust泛型与特性泛型是一个编程语言不可或缺的机制。C++语言中用"模板"来实现泛型,而C语言中没有泛型的机制,这也导致C语言难以构建类型复杂的工程。泛型机制是编程语言用于表达类型抽象的机制,一般用于功能确定、数据类型待定的类,如链表、映射表等。在函数中定义泛型这是一个对整型数字选择排序的方法:实例fn max(array: &[i32]) -> i32 { let mut max_index = 0; let mut i = 1; while i array.len() { if array[i] > array[max_index] {
Rust泛型与特性泛型是一个编程语言不可或缺的机制。C++语言中用"模板"来实现泛型,而C语言中没有泛型的机制,这也导致C语言难以构建类型复杂的工程。泛型机制是编程语言用于表达类型抽象的机制,一般用于功能确定、数据类型待定的类,如链表、映射表等。在函数中定义泛型这是一个对整型数字选择排序的方法:实例fn max(array: &[i32]) -> i32 { let mut max_index = 0; let mut i = 1; while i array.len() { if array[i] > array[max_index] {
错误处理Rust有一套独特的处理异常情况的机制,它并不像其它语言中的try机制那样简单。首先,程序中一般会出现两种错误:可恢复错误和不可恢复错误。可恢复错误的典型案例是文件访问错误,如果访问一个文件失败,有可能是因为它正在被占用,是正常的,我们可以通过等待来解决。但还有一种错误是由编程中无法解决的逻辑错误导致的,例如访问数组末尾以外的位置。大多数编程语言不区分这两种错误,并用Exception(异常)类来表示错误。在Rust中没有Exception。对于可恢复错误用Result类来处理,对于不可恢复错误使用panic!宏来处理。不可恢复错误本章以前没有专门介绍Rust宏的语法,但已经使用过了p
错误处理Rust有一套独特的处理异常情况的机制,它并不像其它语言中的try机制那样简单。首先,程序中一般会出现两种错误:可恢复错误和不可恢复错误。可恢复错误的典型案例是文件访问错误,如果访问一个文件失败,有可能是因为它正在被占用,是正常的,我们可以通过等待来解决。但还有一种错误是由编程中无法解决的逻辑错误导致的,例如访问数组末尾以外的位置。大多数编程语言不区分这两种错误,并用Exception(异常)类来表示错误。在Rust中没有Exception。对于可恢复错误用Result类来处理,对于不可恢复错误使用panic!宏来处理。不可恢复错误本章以前没有专门介绍Rust宏的语法,但已经使用过了p
Rust组织管理任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习Rust语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。Rust中有三个重要的组织概念:箱、包、模块。箱(Crate)"箱"是二进制程序文件或者库文件,存在于"包"中。"箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。注意:"二进制程序文件"不一定是"二进制可执行文件",只能确定是是包含目标机器语言的文件,文件格式随编译环境的不同而不同。包(Package)当我们使用Cargo执行new