Rust枚举类
Rust 枚举类枚举类在 Rust 中并不像其他编程语言中的概念那样简单,但依然可以十分简单的使用:实例#[derive(Debug)] enum Book { Papery, Electronic} fn main() { let book = Book::Papery; println!(“{:?}”, book);} 运行结果:Papery书分为纸质书(Papery book)和电子书(Electronic book)。如果你现在正在开发一个图书管理系统,你需要描述两种书的不同属性(纸质书有索书号,电子书只有 URL),你可以为枚举类成员添加元组属性描述: enum Book { Papery(u32), Electronic(String),} let book = Book::Papery(1001);let ebook = Book::Electronic(String::from(“url://…”)); 如果你想为属性命名,可以用结构体语法:enum Book { Papery...
Rust条件语句
Rust 条件语句 在 Rust 语言中的条件语句是这种格式的:实例fn main() { let number = 3; if number < 5 { println!(“条件为 true”); } else { println!(“条件为 false”); }} 在上述程序中有条件 if 语句,这个语法在很多其它语言中很常见,但也有一些区别:首先,条件表达式 number < 5 不需要用小括号包括(注意,不需要不是不允许);但是 Rust 中的 if 不存在单语句不用加 {} 的规则,不允许使用一个语句代替一个块。尽管如此,Rust 还是支持传统 else-if 语法的:实例fn main() { let a = 12; let b; if a > 0 { b = 1; } else if a < 0 { b = -1; } else { b =...
Rust智能指针
Rust 智能指针智能指针(Smart pointers)是一种在 Rust 中常见的数据结构,它们提供了额外的功能和安全性保证,以帮助管理内存和数据。在 Rust 中,智能指针是一种封装了对动态分配内存的所有权和生命周期管理的数据类型。智能指针通常封装了一个原始指针,并提供了一些额外的功能,比如引用计数、所有权转移、生命周期管理等。在 Rust 中,标准库提供了几种常见的智能指针类型,例如 Box、Rc、Arc 和 RefCell。智能指针的使用场景: 当需要在堆上分配内存时,使用 Box。当需要多处共享所有权时,使用 Rc 或 Arc。当需要内部可变性时,使用 RefCell。当需要线程安全的共享所有权时,使用 Arc。当需要互斥访问数据时,使用 Mutex。当需要读取-写入访问数据时,使用 RwLock。当需要解决循环引用问题时,使用 Weak。 Box 智能指针Box 是 Rust 中最简单的智能指针之一,它允许在堆上分配一块内存,并将值存储在这个内存中。由于 Rust 的所有权规则,使用 Box 可以在堆上创建具有已知大小的数据。实例let b =...
Rust文件与IO
Rust 文件与 IO本章介绍 Rust 语言的 I/O 操作。接收命令行参数命令行程序是计算机程序最基础的存在形式,几乎所有的操作系统都支持命令行程序并将可视化程序的运行基于命令行机制。命令行程序必须能够接收来自命令行环境的参数,这些参数往往在一条命令行的命令之后以空格符分隔。在很多语言中(如 Java 和 C/C++)环境参数是以主函数的参数(常常是一个字符串数组)传递给程序的,但在 Rust 中主函数是个无参函数,环境参数需要开发者通过 std::env 模块取出,过程十分简单:实例fn main() { let args = std::env::args(); println!(“{:?}”, args);} 现在直接运行程序:Args { inner: [“D:\rust\greeting\target\debug\greeting.exe”] }也许你得到的结果比这个要长的多,这很正常,这个结果中 Args 结构体中有一个 inner...
Rust数据类型
Rust 数据类型Rust 语言中的基础数据类型有以下几种。整数型(Integer)整数型简称整型,按照比特位长度和有无符号分为以下种类: 位长度 有符号 无符号 8-bit i8 u8 16-bit i16 u16 32-bit i32 u32 64-bit i64 u64 128-bit i128 u128 arch isize usize isize 和 usize 两种整数类型是用来衡量数据大小的,它们的位长度取决于所运行的目标平台,如果是 32 位架构的处理器将使用 32 位位长度整型。整数的表述方法有以下几种: 进制 例 十进制 98_222 十六进制 0xff ...
Rust教程
Rust 教程 Rust 是由 Mozilla 主导开发的高性能编译型编程语言,遵循”安全、并发、实用”的设计原则。 Rust 语言由 Mozilla 开发,首次发布于 2010 年。Rust 支持多种编程范式,包括函数式、并发式、过程式和面向对象风格。Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。Rust 系列文章内容由 Sobin 收集整理。 Rust 语言的特点 内存安全:Rust 的所有权系统在编译时防止空悬指针、数据竞争等内存错误,无需垃圾收集器。 并发编程:Rust 提供了现代的语言特性来支持并发编程,如线程和消息传递,使得编写并发程序更加安全和容易。 性能:Rust 编译为机器码,没有运行时或垃圾收集器,能够提供接近 C 和 C++ 的性能。 类型系统:Rust 的类型系统和模式匹配提供了强大的抽象能力,有助于编写更安全、更可预测的代码。 错误处理:Rust 的错误处理模型鼓励显式处理所有可能的错误情况。 宏系统:Rust...
Rust所有权
Rust 所有权计算机程序必须在运行时管理它们所使用的内存资源。大多数的编程语言都有管理内存的功能:C/C++ 这样的语言主要通过手动方式管理内存,开发者需要手动的申请和释放内存资源。但为了提高开发效率,只要不影响程序功能的实现,许多开发者没有及时释放内存的习惯。所以手动管理内存的方式常常造成资源浪费。Java 语言编写的程序在虚拟机(JVM)中运行,JVM 具备自动回收内存资源的功能。但这种方式常常会降低运行时效率,所以 JVM 会尽可能少的回收资源,这样也会使程序占用较大的内存资源。所有权对大多数开发者而言是一个新颖的概念,它是 Rust 语言为高效使用内存而设计的语法机制。所有权概念是为了让 Rust 在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念。所有权规则所有权有以下三条规则: Rust 中的每个值都有一个变量,称为其所有者。一次只能有一个所有者。当所有者不在程序运行范围时,该值将被删除。这三条规则是所有权概念的基础。接下来将介绍与所有权概念有关的概念。变量范围我们用下面这段程序描述变量范围的概念:{ //...
Rust循环
Rust 循环 Rust 除了灵活的条件语句以外,循环结构的设计也十分成熟。这一点作为身经百战的开发者应该能感觉出来。while 循环while 循环是最典型的条件语句循环:实例fn main() { let mut number = 1; while number != 4 { println!(“{}”, number); number += 1; } println!(“EXIT”);} 运行结果:123EXITRust 语言到此教程编撰之日还没有 do-while 的用法,但是 do 被规定为保留字,也许以后的版本中会用到。在 C 语言中 for 循环使用三元语句控制循环,但是 Rust 中没有这种用法,需要用 while 循环来代替:C 语言int i;for (i = 0; i < 10; i++) { // 循环体} Rustlet mut i = 0;while i < 10 { //...
Rust异步编程asyncawait
Rust 异步编程 async/await在现代编程中,异步编程变得越来越重要,因为它允许程序在等待 I/O 操作(如文件读写、网络通信等)时不被阻塞,从而提高性能和响应性。 异步编程是一种在 Rust 中处理非阻塞操作的方式,允许程序在执行长时间的 I/O 操作时不被阻塞,而是在等待的同时可以执行其他任务。Rust 提供了多种工具和库来实现异步编程,包括 async 和 await 关键字、futures 和异步运行时(如 tokio、async-std 等),以及其他辅助工具。 Future:Future 是 Rust 中表示异步操作的抽象。它是一个可能还没有完成的计算,将来某个时刻会返回一个值或一个错误。 async/await:async 关键字用于定义一个异步函数,它返回一个 Future。await 关键字用于暂停当前 Future 的执行,直到它完成。 实例 以下实例展示了如何使用 async 和 await 关键字编写一个异步函数,以及如何在异步函数中执行异步任务并等待其完成。实例//...
Rust并发编程
Rust 并发编程安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。并发(concurrent)的概念是指程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是”同时执行”。并发往往会造成并行。本章讲述与并发相关的编程概念和细节。线程线程(thread)是一个程序中独立运行的一个部分。线程不同于进程(process)的地方是线程是程序以内的概念,程序往往是在一个进程中执行的。在有操作系统的环境中进程往往被交替地调度得以执行,线程则在进程以内由程序进行调度。由于线程并发很有可能出现并行的情况,所以在并行中可能遇到的死锁、延宕错误常出现于含有并发机制的程序。为了解决这些问题,很多其它语言(如 Java、C#)采用特殊的运行时(runtime)软件来协调资源,但这样无疑极大地降低了程序的执行效率。C/C++ 语言在操作系统的最底层也支持多线程,且语言本身以及其编译器不具备侦察和避免并行错误的能力,这对于开发者来说压力很大,开发者需要花费大量的精力避免发生错误。Rust 不依靠运行时环境,这一点像 C/C++...