20240410-Rust-00-前言
发表于|更新于|笔记
|浏览量:
你说得对,但是Rust 是由 Mozilla 自主研发的一款全新零开销抽象编程语言。语言采用一种被称作「RAII」 的资源管理机制,在这里,退出作用域的对象将触发「drop」方法,进而被销毀。你将扮演一位名为「Rustacean」的神秘角色,在编码过程中邂逅形状各异、形式独特的生命周期们,和它们一起击败编译错误,找回失去的内存安全——同时,逐步发掘「servo」的真相。
文章作者: Billy
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Billy 的博客!
相关推荐

2024-09-20
20240410-Rust-05-控制流
控制流 根据条件是否为真来决定是否执行某些代码,或根据条件是否为真来重复运行一段代码,是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是 if 表达式和循环。 if 表达式每个分支的代码块都必须以{}包裹,哪怕只有一行或一条表达式。 条件(谓词)表达式不必(不是不可以)使用()包裹。 条件(谓词)表达式必须是布尔值,Rust不会进行非布尔到布尔的自动类型转换。 在 let 语句中使用 if因为 if 是一个表达式,我们可以在 let 语句的右侧使用它来将结果赋值给一个变量,例如在示例 3-2 中: 文件名: src/main.rs 123456fn main() { let condition = true; let number = if condition { 5 } else { 6 }; println!("The value of number is: {}", number);} 示例 3-2:将 if 表达式...

2024-09-20
20240409-Rust-02-变量与可变性
变量与可变性1234567891011121314151617181920212223242526272829#![allow(unused)]fn main() { // 变量默认是不可变的,如要声明可变变量,应使用mut关键字 // let x = 5; let mut x = 5; println!("The value of x is {}", x); // 5 x = 6; println!("The value of x is {}", x); // 6 // 常量,命名约定是全部字母大写,并以下划线分隔单词 // 在声明的作用域内,常量在程序运行的整个过程中都有效 const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3; // 遮蔽(shadow),可以通过使用相同的变量名并重复使用 let 关键字来遮蔽之前的变量 let x = 5; let x = x + 1; ...

2024-09-20
20240409-Rust-03-数据类型
数据类型 Rust 的每个值都有确切的数据类型(data type),该类型告诉 Rust 数据是被指定成哪类数据,从而让 Rust 知道如何使用该数据。在本节中,我们将介绍两种数据类型:标量类型和复合类型。 请记住 Rust 是一种静态类型(statically typed)的语言,这意味着它必须在编译期知道所有变量的类型。 当类型可能是多种情况或编译器无法推导和确定时,必须加上一个类型标注: 1let guess: u32 = "42".parse().expect("Not a number!"); 标量类型 标量(scalar)类型表示单个值。Rust 有 4 个基本的标量类型:整型、浮点型、布尔型和字符。你可能从其他语言了解过这些类型。下面我们深入了解它们在 Rust 中的用法。 整数类型 整数(integer)是没有小数部分的数字。我们在第 2 章使用过一个整数类型(整型),即 u32 类型。此类型声明表明它关联的值应该是占用 32 位空间的无符号整型(有符号整型以 i 开始,i 是英文单词 integer 的首字母,与之...

2024-09-20
20240411-Rust-08-切片
切片 Slice 类型另一个没有所有权的数据类型是 slice。slice 允许你引用集合中一段连续的元素序列,而不用引用整个集合。 这里有一个编程小习题:编写一个函数,该函数接收一个字符串,并返回在该字符串中找到的第一个单词。如果函数在该字符串中并未找到空格,则整个字符串就是一个单词,所以应该返回整个字符串。 让我们考虑一下这个函数的签名: 1fn first_word(s: &String) -> ? first_word 函数有一个参数 &String。因为我们不需要所有权,所以这没有问题。不过应该返回什么呢?我们并没有一个真正获取 部分 字符串的办法。不过,我们可以返回单词结尾的索引。试试如示例 4-7 中的代码。 文件名: src/main.rs 1234567891011fn first_word(s: &String) -> usize { let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() {...

2024-09-20
20240411-Rust-06-所有权
所有权 所有权(系统)是 Rust 最为与众不同的特性,它让 Rust 无需垃圾回收器(garbage collector)即可保证内存安全。因此,理解 Rust 中所有权的运作方式非常重要。在本章中,我们将讨论所有权以及相关功能:借用、slice 以及 Rust 如何在内存中存放数据。 什么是所有权?Rust 的核心功能(之一)是 所有权(ownership)。虽然该功能很容易解释,但它对语言的其他部分有着深刻的影响。 所有运行的程序都必须管理其使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时不断地寻找不再使用的内存;在另一些语言中,开发者必须亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。在运行时,所有权系统的任何功能都不会减慢程序。 因为所有权对很多开发者来说都是一个新概念,需要一些时间来适应。好消息是随着你对 Rust 和所有权系统的规则越来越有经验,你就越能自然地编写出安全和高效的代码。持之以恒! 当你理解了所有权,你将有一个坚实的基础来理解那些使 Rust 独特的功能。在本章中,你将通...

2024-09-20
20240408-Rust-01-猜数字游戏
猜数字游戏123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960use rand::Rng;use std::cmp::Ordering;use std::io;/** * The main function of the program. * It starts the game by printing a welcome message, generating a secret number, and then entering a loop where it prompts the user to guess the number. * It continues to loop until the user guesses the correct number. */fn main() { println!("Guess the number!"); /** ...