Rust 知识点

6855 人参与 | 时间:2024年04月24日 10:48:41
点击跳转 blog.csdn.net
内容

rustup 是rust官方的版本管理工具。应当作为安装 Rust 的首选。
项目主页是: https://github.com/rust-lang-nursery/rustup.rs

rustup default [toolchain] 配置默认工具链。
rustup show 显示当前安装的工具链信息。
rustup update 检查安装更新。
rustup toolchain [SUBCOMMAND] 配置工具链
rustup override [SUBCOMMAND] 配置一个目录以及其子目录的默认工具链
rustup target [SUBCOMMAND] 配置工具链的可用目标
rustup component 配置 rustup 安装的组件




racer是一个由rust的爱好者提供的rust自动补全和语法分析工具,被用来提供基本的补全功能和定义跳转功能。其本身完全由rust写成,补全功能已经比较完善了。


cargo install racer


cargo install rustfmt




Rust中一般使用cargo管理项目,比如:


创建项目 cargo new hellorust --bin
编译项目 cargo build --release
运行项目 cargo run --release
清理项目 cargo clean




布尔类型:bool, 有两个值true和false。
字符类型:char, 表示单个Unicode字符,存储为4个字节。
数值类型:分为有符号整数 (i8, i16, i32, i64, isize)、 无符号整数 (u8, u16, u32, u64, usize) 以及浮点数 (f32, f64)。
字符串类型:最底层的是不定长类型str,更常用的是字符串切片&str和堆分配字符串String, 其中字符串切片是静态分配的,有固定的大小,并且不可变,而堆分配字符串是可变的。
数组:Array,[T;N] 具有固定大小,并且元素都是同种类型。
动态数组:Vec被表示为Vec<T>, 其中T是一个泛型。它不是基础类型,但是用的很广泛。
切片:Slice, &[T] 或者&mut [T]引用一个数组的部分数据并且不需要拷贝。
元组:Tuple, (1,true,"xxx")具有固定大小的有序列表,每个元素都有自己的类型,通过解构或者索引来获得每个元素的值。
指针:最底层的是裸指针const T和mut T,但解引用它们是不安全的,必须放到unsafe块里。
函数:fn, 具有函数类型的变量实质上是一个函数指针。
元类型:unit, 即(),其唯一的值也是()。类似void的作用。


// boolean type
let t = true;
let f: bool = false;
// char type
let c = 'c';
// numeric types
let x = 42;
let y: u32 = 123_456;
let z: f64 = 1.23e+2;
let zero = z.abs_sub(123.4);
let bin = 0b1111_0000;
let oct = 0o7320_1546;
let hex = 0xf23a_b049;
// string types
let str = "Hello, world!";
let mut string = str.to_string();
// arrays and slices
let a = [0, 1, 2, 3, 4];
let middle = &a[1..4];
let mut ten_zeros: [i64; 10] = [0; 10];
// tuples
let tuple: (i32, &str) = (50, "hello");
let (fifty, _) = tuple;
let hello = tuple.1;
// raw pointers
let x = 5;
let raw = &x as *const i32;
let points_at = unsafe { *raw };
// functions
fn foo(x: i32) -> i32 { x }
let bar: fn(i32) -> i32 = foo;

有几点是需要特别注意的:


数值类型可以使用_分隔符来增加可读性。
Rust还支持单字节字符b'H'以及单字节字符串b"Hello",仅限制于ASCII字符。 此外,还可以使用r#"..."#标记来表示原始字符串,不需要对特殊字符进行转义。
使用&符号将String类型转换成&str类型很廉价, 但是使用to_string()方法将&str转换到String类型涉及到分配内存, 除非很有必要否则不要这么做。
数组的长度是不可变的,动态的数组称为Vec (vector),可以使用宏vec!创建。
元组可以使用==和!=运算符来判断是否相同。
不多于32个元素的数组和不多于12个元素的元组在值传递时是自动复制的。
Rust不提供原生类型之间的隐式转换,只能使用as关键字显式转换。
可以使用type关键字定义某个类型的别名,并且应该采用驼峰命名法。
// explicit conversion
let decimal = 65.4321_f32;
let integer = decimal as u8;
let character = integer as char;


// type aliases
type NanoSecond = u64;
type Point = (u8, u8);