 Rust语言核心竞争力-庄晓立Borrowing(租借使用权) Shared borrow (多人共享/只 读) Mutable borrow (独家修改和使用权) &T &mut T &T Owners Clients 好借好还再借不难 我死之前必须还我 Lifetime • Lifetime('a)修饰Reference,是引用的属性 • 限制Reference的生效范围,避免无效引用 fn get<'a>(&'a self) -> does // not live long enough } 因为t将先于v被析构(这一点易被忽视) v的析构函数可能访问到无效的t引用! 此处潜在的内存“不安全”代码没能逃过borrowck的法眼。 http://is.gd/HVy7yk fn test1(s: String) {} fn test2(s: &String) {} fn main() { Unsafe // A unsafe { // B } // A Rust类型系统和编译器从机制上保证,unsafe 代码块以外的代码(A区),一定是内存安全的。 不能被编译器确认是内存安全的代码,必须且 只能写在unsafe代码块内(B区)。 尽量把unsafe代码块限制在最小范围内,并且 用关键字unsafe突出标识出来,便于集中审查 review。 Redox OS kernel:0 码力 | 51 页 | 1.09 MB | 1 年前3 Rust语言核心竞争力-庄晓立Borrowing(租借使用权) Shared borrow (多人共享/只 读) Mutable borrow (独家修改和使用权) &T &mut T &T Owners Clients 好借好还再借不难 我死之前必须还我 Lifetime • Lifetime('a)修饰Reference,是引用的属性 • 限制Reference的生效范围,避免无效引用 fn get<'a>(&'a self) -> does // not live long enough } 因为t将先于v被析构(这一点易被忽视) v的析构函数可能访问到无效的t引用! 此处潜在的内存“不安全”代码没能逃过borrowck的法眼。 http://is.gd/HVy7yk fn test1(s: String) {} fn test2(s: &String) {} fn main() { Unsafe // A unsafe { // B } // A Rust类型系统和编译器从机制上保证,unsafe 代码块以外的代码(A区),一定是内存安全的。 不能被编译器确认是内存安全的代码,必须且 只能写在unsafe代码块内(B区)。 尽量把unsafe代码块限制在最小范围内,并且 用关键字unsafe突出标识出来,便于集中审查 review。 Redox OS kernel:0 码力 | 51 页 | 1.09 MB | 1 年前3
 Rust 语言学习笔记并发和内存控制。尽管 Rust 借用了 C 和 C++ 的语法,它不允许空指针和悬 挂指针,二者是 C 和 C++ 中系统崩溃、内存泄露和不安全代码的根源。 Rust 中有诸如 if else 和循环语句 for 和 while 的通用控制结构。和 C 和 C++ 风格的编程语言一样,代码段放在花括号中。 Rust 使用实现(implementation)、特征(trait)和结构化类型 (structured 程序设计语言的本质在于赋能(empowerment):无论你现在编写的是何 种代码,Rust 能让你在更为广泛的编程领域走得更远,写出自信。 比如,“系统层面”(“systems-level”)的工作,涉及内存管理、数据表示 和并发等底层细节。从传统角度来看,这是一个神秘的编程领域,只为浸淫多 年的极少数人所触及,也只有他们能避开那些臭名昭著的陷阱。即使谨慎的实 践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这 底层控制的程序员可以使用 Rust,无需冒着常见的崩 溃或安全漏洞的风险,也无需学习时常改变的工具链的最新知识。其语言本身 更是被设计为自然而然的引导你编写出在运行速度和内存使用上都十分高效的 可靠代码。 参考: https://rustcc.gitbooks.io/rustprimer/content/ 《RustPrimer》 https://kaisery.github0 码力 | 117 页 | 2.24 MB | 1 年前3 Rust 语言学习笔记并发和内存控制。尽管 Rust 借用了 C 和 C++ 的语法,它不允许空指针和悬 挂指针,二者是 C 和 C++ 中系统崩溃、内存泄露和不安全代码的根源。 Rust 中有诸如 if else 和循环语句 for 和 while 的通用控制结构。和 C 和 C++ 风格的编程语言一样,代码段放在花括号中。 Rust 使用实现(implementation)、特征(trait)和结构化类型 (structured 程序设计语言的本质在于赋能(empowerment):无论你现在编写的是何 种代码,Rust 能让你在更为广泛的编程领域走得更远,写出自信。 比如,“系统层面”(“systems-level”)的工作,涉及内存管理、数据表示 和并发等底层细节。从传统角度来看,这是一个神秘的编程领域,只为浸淫多 年的极少数人所触及,也只有他们能避开那些臭名昭著的陷阱。即使谨慎的实 践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这 底层控制的程序员可以使用 Rust,无需冒着常见的崩 溃或安全漏洞的风险,也无需学习时常改变的工具链的最新知识。其语言本身 更是被设计为自然而然的引导你编写出在运行速度和内存使用上都十分高效的 可靠代码。 参考: https://rustcc.gitbooks.io/rustprimer/content/ 《RustPrimer》 https://kaisery.github0 码力 | 117 页 | 2.24 MB | 1 年前3
 Comprehensive Rust(繁体中文)取記憶體,推測存取行為 仍可能導致快取填補,而當快取遭到清理或 VM 啟用快取時,存取之間的變更就會遺失 (快取 是以實體位址做為索引鍵,並非使用 VA 或 IPA)。 • 為求簡單,我們只使用寫死的分頁表 (見 idmap.S),其中前 1 GiB 的位址空間是對應至裝置、接下 來 1 GiB 是對應至 DRAM,另外 1 GiB 以上則適用更多裝置。這符合 QEMU 使用的記憶體布局。 • counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); } • 如果在中斷處理常式使用了鎖,請務必小心避免死結。 • spin 也具備排號自旋鎖互斥實作項目;std::sync 中 RwLock、Barrier 和 Once 的同等項 目;以及用於延遲初始化的 Lazy。 • once_cell Crate Vec。 65.4 安裝 捨棄 Future 表示 Future 無法再供輪詢。這稱為「取消」,可能發生在任何 await 時間點。即使 Future 遭到取消,也需審慎確保系統正常運作,例如不應出現死結或遺失資料。 use std::io::{self, ErrorKind}; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt0 码力 | 358 页 | 1.41 MB | 10 月前3 Comprehensive Rust(繁体中文)取記憶體,推測存取行為 仍可能導致快取填補,而當快取遭到清理或 VM 啟用快取時,存取之間的變更就會遺失 (快取 是以實體位址做為索引鍵,並非使用 VA 或 IPA)。 • 為求簡單,我們只使用寫死的分頁表 (見 idmap.S),其中前 1 GiB 的位址空間是對應至裝置、接下 來 1 GiB 是對應至 DRAM,另外 1 GiB 以上則適用更多裝置。這符合 QEMU 使用的記憶體布局。 • counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); } • 如果在中斷處理常式使用了鎖,請務必小心避免死結。 • spin 也具備排號自旋鎖互斥實作項目;std::sync 中 RwLock、Barrier 和 Once 的同等項 目;以及用於延遲初始化的 Lazy。 • once_cell Crate Vec。 65.4 安裝 捨棄 Future 表示 Future 無法再供輪詢。這稱為「取消」,可能發生在任何 await 時間點。即使 Future 遭到取消,也需審慎確保系統正常運作,例如不應出現死結或遺失資料。 use std::io::{self, ErrorKind}; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt0 码力 | 358 页 | 1.41 MB | 10 月前3
 Comprehensive Rust(繁体中文) 202406取記憶體,推測存取行為 仍可能導致快取填補,而當快取遭到清理或 VM 啟用快取時,存取之間的變更就會遺失 (快取 是以實體位址做為索引鍵,並非使用 VA 或 IPA)。 • 為求簡單,我們只使用寫死的分頁表 (見 idmap.S),其中前 1 GiB 的位址空間是對應至裝置、接下 來 1 GiB 是對應至 DRAM,另外 1 GiB 以上則適用更多裝置。這符合 QEMU 使用的記憶體布局。 • counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); } • 如果在中斷處理常式使用了鎖,請務必小心避免死結。 • spin 也具備排號自旋鎖互斥實作項目;std::sync 中 RwLock、Barrier 和 Once 的同等項 目;以及用於延遲初始化的 Lazy。 • once_cell Crate Vec。 65.4 安裝 捨棄 Future 表示 Future 無法再供輪詢。這稱為「取消」,可能發生在任何 await 時間點。即使 Future 遭到取消,也需審慎確保系統正常運作,例如不應出現死結或遺失資料。 use std::io::{self, ErrorKind}; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt0 码力 | 356 页 | 1.41 MB | 1 年前3 Comprehensive Rust(繁体中文) 202406取記憶體,推測存取行為 仍可能導致快取填補,而當快取遭到清理或 VM 啟用快取時,存取之間的變更就會遺失 (快取 是以實體位址做為索引鍵,並非使用 VA 或 IPA)。 • 為求簡單,我們只使用寫死的分頁表 (見 idmap.S),其中前 1 GiB 的位址空間是對應至裝置、接下 來 1 GiB 是對應至 DRAM,另外 1 GiB 以上則適用更多裝置。這符合 QEMU 使用的記憶體布局。 • counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); } • 如果在中斷處理常式使用了鎖,請務必小心避免死結。 • spin 也具備排號自旋鎖互斥實作項目;std::sync 中 RwLock、Barrier 和 Once 的同等項 目;以及用於延遲初始化的 Lazy。 • once_cell Crate Vec。 65.4 安裝 捨棄 Future 表示 Future 無法再供輪詢。這稱為「取消」,可能發生在任何 await 時間點。即使 Future 遭到取消,也需審慎確保系統正常運作,例如不應出現死結或遺失資料。 use std::io::{self, ErrorKind}; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt0 码力 | 356 页 | 1.41 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版位元,可以表示 28 個數字。 ‧ 整數型別 int 佔用 4 位元組 = 32 位元,可以表示 232 個數字。 表 3‑1 列舉了 Java 中各種基本資料型別的佔用空間、取值範圍和預設值。此表格無須死記硬背,大致理解即 可,需要時可以透過查表來回憶。 表 3‑1 基本資料型別的佔用空間和取值範圍 型別 符號 佔用空間 最小值 最大值 預設值 整數 byte 1 位元組 −27 (−128) 部分名詞在簡體中文和繁體中文下的叫法不同。 表 16‑1 資料結構與演算法的重要名詞 English 簡體中文 繁體中文 algorithm 算法 演算法 data structure 数据结构 資料結構 code 代码 程式碼 file 文件 檔案 function 函数 函式 method 方法 方法 variable 变量 變數 asymptotic complexity analysis 渐近复杂度分析0 码力 | 388 页 | 18.82 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Rust 版位元,可以表示 28 個數字。 ‧ 整數型別 int 佔用 4 位元組 = 32 位元,可以表示 232 個數字。 表 3‑1 列舉了 Java 中各種基本資料型別的佔用空間、取值範圍和預設值。此表格無須死記硬背,大致理解即 可,需要時可以透過查表來回憶。 表 3‑1 基本資料型別的佔用空間和取值範圍 型別 符號 佔用空間 最小值 最大值 預設值 整數 byte 1 位元組 −27 (−128) 部分名詞在簡體中文和繁體中文下的叫法不同。 表 16‑1 資料結構與演算法的重要名詞 English 簡體中文 繁體中文 algorithm 算法 演算法 data structure 数据结构 資料結構 code 代码 程式碼 file 文件 檔案 function 函数 函式 method 方法 方法 variable 变量 變數 asymptotic complexity analysis 渐近复杂度分析0 码力 | 388 页 | 18.82 MB | 10 月前3
 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 15.3. 使用 Drop Trait 运行清理代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 16.1. 使用线程同时地运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 赋能(empowerment):无论你现在编写的是何种代码, Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见) 举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来 看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍0 码力 | 562 页 | 3.23 MB | 26 天前3 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 15.3. 使用 Drop Trait 运行清理代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 16.1. 使用线程同时地运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 赋能(empowerment):无论你现在编写的是何种代码, Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见) 举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来 看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍0 码力 | 562 页 | 3.23 MB | 26 天前3
 Rust 程序设计语言简体中文版将智能指针当作常规引用处理 ........................................................ 377 15.3. 使用 Drop Trait 运行清理代码 ................................................................................... 384 15.4. Rc Rust 程序设计语言简体中文版将智能指针当作常规引用处理 ........................................................ 377 15.3. 使用 Drop Trait 运行清理代码 ................................................................................... 384 15.4. Rc- .............................................................................. 413 16.1. 使用线程同时地运行代码 ........................................................................................... 414 16 赋能(empowerment):无论你现在编写的是何种代码, Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见) 举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来 看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍 0 码力 | 600 页 | 12.99 MB | 1 年前3
 Comprehensive Rust(简体中文) 202412. . . . . . . . . . . . . . . . . . . . 17 2.2 本培训中的代码示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 使用 Cargo 在本地运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.3.1 Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.4 代码块和作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1 6.4.1 作用域和遮蔽(Shadowing) 2.2 Rust Bridge Declarations . . . . . . . . . . . . . . . . . . . . . . . . . 211 37.2.3 生成的 C++ 代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 37.2.4 C++ 桥接声明 . . . . . . . . .0 码力 | 359 页 | 1.33 MB | 10 月前3 Comprehensive Rust(简体中文) 202412. . . . . . . . . . . . . . . . . . . . 17 2.2 本培训中的代码示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 使用 Cargo 在本地运行代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.3.1 Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.4 代码块和作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1 6.4.1 作用域和遮蔽(Shadowing) 2.2 Rust Bridge Declarations . . . . . . . . . . . . . . . . . . . . . . . . . 211 37.2.3 生成的 C++ 代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 37.2.4 C++ 桥接声明 . . . . . . . . .0 码力 | 359 页 | 1.33 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 Rust 版Hello 算法 Rust 语言版 作者:靳宇栋(@krahets) 代码审阅:伍志豪(@night‑cruise)、荣怡(@rongyi) Release 1.2.0 2024‑12‑06 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言0 码力 | 387 页 | 18.51 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Rust 版Hello 算法 Rust 语言版 作者:靳宇栋(@krahets) 代码审阅:伍志豪(@night‑cruise)、荣怡(@rongyi) Release 1.2.0 2024‑12‑06 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.1.0 Rust版Hello 算法 Rust 语言版 作者:靳宇栋(@krahets) 代码审阅:伍志豪(@night‑cruise) Release 1.1.0 2024‑04‑15 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言0 码力 | 388 页 | 18.50 MB | 1 年前3 Hello 算法 1.1.0 Rust版Hello 算法 Rust 语言版 作者:靳宇栋(@krahets) 代码审阅:伍志豪(@night‑cruise) Release 1.1.0 2024‑04‑15 序 两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 0 章 前言0 码力 | 388 页 | 18.50 MB | 1 年前3
共 35 条
- 1
- 2
- 3
- 4














