理解 ISO 基本媒体文件格式 (ISOBMFF)

前段时间用 Rust 写了一个 Exif/Metadata 解析库 nom-exif,里面涉及到对 ISOBMFF 的解析,趁着还有点印象,总结一下这种文件格式。 ISOBMFF 英文全称 ISO Base Media File Format ,顾名思义主要用于封装多媒体文件。…

理解 Rust 异步编程

Rust 的异步特性很强大,相对也比较复杂。 为了更好的理解 Rust 的异步特性,本文分别从 Rust 异步的特点、与多线程的对比、异步的用法介绍及注意事项、内部实现机制、和其他语言的横向…

Rust 中的 Pin, Unpin 和 !Unpin

为什么需要 Pin? 引入 Pin 的目的主要是为了支持 自引用类型 (self-referential types) 。下面我们以 Future 为例,解释一下自引用类型以及引入 Pin 的必要性。 由于异步块/异步函数中可能包含对局部变量的引用,例…

理解 Rust 的 生命周期 (Lifetime)

Lifetime 的主要目的是防止悬空引用 (dangling references) 下面的例子中, borrow checker 会检查 r 的生命周期 'a 比其引用的数据的生命周期 'b 要长,因此会拒绝编译通过。 1 2 3 4 5 6 7 8 9 10 11 // ❌ borrowed value does not live long enough…

Rust 的 move 和 C++ 的 std::move

Rust 的 move 和 C++ 的 std::move 在表面上看有些相似之处,因为它们都涉及到数据或资源的转移。然而,它们在设计理念、实现方式以及它们在各自语言中所扮演的角色上有着根本的区别。 Rust 中的 Move…