4.11.4 async/await 和 Stream 流处理 async/await 和 Stream 流处理 在入门章节中,我们简单学习了该如何使用 async/.await, 同时在后面也了解了一些底层原理,现在是时候继续深入了。 async/.await 是 Rust 语法的一部分,它在遇到阻塞操作时( 例如 IO )会让出当前线程的所有权而不是阻塞当前线程,这样就允许当前线程继续去执行其它代码,最终实现并发。 有两种方式可以使用 asyn 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.11.3 定海神针 Pin 和 Unpin 定海神针 Pin 和 Unpin 在 Rust 异步编程中,有一个定海神针般的存在,它就是 Pin,作用说简单也简单,说复杂也非常复杂,当初刚出来时就连一些 Rust 大佬都一头雾水,何况瑟瑟发抖的我。好在今非昔比,目前网上的资料已经很全,而我就借花献佛,给大家好好讲讲这个 Pin。 在 Rust 中,所有的类型可以分为两类: 类型的值可以在内存中安全地被移动,例如数值、字符串、 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.11.2 底层探秘:Future 执行与任务调度 底层探秘: Future 执行器与任务调度 异步编程背后到底藏有什么秘密?究竟是哪只幕后之手在操纵这一切?如果你对这些感兴趣,就继续看下去,否则可以直接跳过,因为本章节的内容对于一个 API 工程师并没有太多帮助。 但是如果你希望能深入理解 Rust 的 async/.await 代码是如何工作、理解运行时和性能,甚至未来想要构建自己的 async 运行时或相关工具,那么本章节终究不 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.11.1 async 编程入门 Async 编程简介 众所周知,Rust 可以让我们写出性能高且安全的软件,那么异步编程这块儿呢?是否依然在高性能的同时保证了安全? 我们先通过一张 web 框架性能对比图来感受下 Rust 异步编程的性能: actix-vs-gin screenshot 上图并不能说 Rust 写的 actix 框架比 Go 的 gin 更好、更优秀,但是确实可以一定程度上说明 Rust 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.11 async/await 异步编程 异步编程 在艰难的学完 Rust 入门和进阶所有的 70 个章节后,我们终于来到了这里。假如之前攀登的是珠穆朗玛峰,那么现在攀登的就是乔戈里峰( 比珠峰还难攀爬... )。 如果你想开发 Web 服务器、数据库驱动、消息服务等需要高并发的服务,那么本章的内容将值得认真对待和学习。 接下来,我们将深入了解 async/await 的使用方式及背后的原理。 本章在内容上大量借鉴和翻译 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.10 Macro 宏编程 Macro 宏编程 在编程世界可以说是谈“宏”色变,原因在于 C 语言中的宏是非常危险的东东,但并不是所有语言都像 C 这样,例如对于古老的语言 Lisp 来说,宏就是就是一个非常强大的好帮手。 那话说回来,在 Rust 中宏到底是好是坏呢?本章将带你揭开它的神秘面纱。 事实上,我们虽然没有见过宏,但是已经多次用过它,例如在全书的第一个例子中就用到了:println!("你好,世界") 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.9.2 内联汇编 内联汇编 本章内容对于学习 Rust 不是必须的,而且难度很高,大家简单知道有这回事就好,不必非要学会 :D Rust 提供了 asm! 宏,可以让大家在 Rust 代码中嵌入汇编代码,对于一些极致高性能或者底层的场景还是非常有用的,例如操作系统内核开发。但通常来说,大家并不应该在自己的项目中使用到该项技术,它为极客而生! 本章的例子是基于 x86/x86-64 汇编的,但是其 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.9.1 五种兵器 五种兵器 古龙有一部小说,名为"七种兵器",其中每一种都精妙绝伦,令人闻风丧胆,而 unsafe 也有五种兵器,它们可以让你拥有其它代码无法实现的能力,同时它们也像七种兵器一样令人闻风丧胆,下面一起来看看庐山真面目。 1. 解引用裸指针 裸指针(raw pointer,又称原生指针) 在功能上跟引用类似,同时它也需要显式地注明可变性。但是又和引用有所不同,裸指针长这样: *const 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.9 Unsafe Rust unsafe 简介 虽然在本章之前,我们学到的代码都是在编译期就得到了 Rust 的安全保障,但是在其内心深处也隐藏了一些阴暗面,在这些阴暗面里,内存安全就存在一些变数了:当不娴熟的开发者接触到这些阴暗面,就可能写出不安全的代码,因此我们称这种代码为 unsafe 代码块。 1. 为何会有 unsafe 几乎每个语言都有 unsafe 关键字,但 Rust 语言使用 unsafe 的原 2025-02-05 rust > rust圣经 > rust高级进阶 #rust
4.8 错误处理 错误处理 在之前的返回值和错误处理章节中,我们学习了几个重要的概念,例如 Result 用于返回结果处理,? 用于错误的传播,若大家对此还较为模糊,强烈建议回头温习下。 在本章节中一起来看看如何对 Result ( Option ) 做进一步的处理,以及如何定义自己的错误类型。 1. 组合器 在设计模式中,有一个组合器模式,相信有 Java 背景的同学对此并不陌生。 将对象组 2025-02-05 rust > rust圣经 > rust高级进阶 #rust