- tags: Rust
Rust Wrapper Types
Links to this note
GitHub: Rust Memory Container Cheat-sheet
tags: Rust Wrapper Types,Rust source: Rust Memory Container Cheat-sheet
Wrapper Types in Rust: Choosing Your Guarantees
tags: Rust,Rust Wrapper Types source: https://manishearth.github.io/blog/2015/05/27/wrapper-types-in-rust-choosing-your-guarantees/
Rust Means Never Having to Close a Socket
tags: Translate,Rust,Rust Wrapper Types 原文链接:Rust Means Never Having to Close a Socket Rust 最酷的特性之一就是它可以自动地帮助你管理资源,同时在仍能保持安全(没有段错误)和高性能。 这是因为 Rust 是一门与众不同地编程语言,要理解我说的可能有点困难,让我来更近一步说明: Rust 就像带垃圾回收的编程语言,你无需手动释放内存 Rust 不同于其他带垃圾回收的编程语言,你无需1手动关闭或者释放像文件、套接字和锁这样的资源 Rust 达到以上这些特性不附带任何运行时开销(垃圾回收或者引用计数),并且不牺牲安全性。 如果你曾经造成过一个套接字或者文件泄漏,或者使用过一些抽象方法造成了这些资源的泄漏,那么你就会知道这有多重要。 你可能已经期望通过“使用后释放”来避免内存问题,而与此同时你并没有考虑到没有明确地关闭套接字可能出现类似的错误。我在这里告诉你,还有更好地办法。 如果你使用的是带垃圾回收的编程语言,则应密切关注本文提到的资源管理方面的内容。如果你使用的是像 C/C++ 这样底层编程语言,你可能会对安全方面更加感兴趣。 Rust 的许多特性都是从其他语言借鉴而来。Rust 之所以变得有趣是因为它把所有的这些特性放在了一起,并且在编程语言层面实现了更严格地保证。 实际上,这种编程语言层面的保证让这些特性更加实用。 所有权系统(The Ownership System) 让这种保证工作的方式是通过 Rust 的「所有权(ownership)」系统。不管任何时候你创建一个新的对象,都被创建它的「作用域(scope)」所拥有。 让我们通过一个例子来进一步说明:我们定义一个函数,函数拷贝输入文件到临时文件去处理它,然后拷贝输入文件到输出文件。 fn process(from: &Path, to: &Path) -> IoResult<()> { // creates a new tempdir with the specified suffix let tempdir = try!(TempDir::new("skylight")); // open the input file let mut from_file = try!...
Rust Borrow and Lifetimes
tags: Rust,Translate,Rust Wrapper Types 原文链接:Rust Borrow and Lifetimes。 Rust 是一门处于往 1.0 活跃开发的新语言(译注:1.0 早已发布,目前最新稳定版本 1.42)。 我必须再写一篇关于我为什么觉得 Rust 牛逼的新博客,但是今天我将关注在它的借用(borrow) 和生命周期(lifetimes)系统,这也是常常让包括我在内的 Rust 新手陷入困境的地方。这篇文章假设 你基本了解 Rust,如果还没推荐你先阅读指南和指针指南。 资源所有权和借用 Rust 通过一个难缠的(sophisticated)借用系统在不用 GC 的情况下达到内存安全。对于任何资源 (栈内存、堆内存、文件句柄等),他们都对应一个唯一的所有者(owner)在需要的情况下处理资源回收。 你可以通过 & 或者 &mut 创建一个新的绑定指向该资源,这被称之为借用或可变借用。编译器确保 所有的所有者(owners)和借用者(borrowers)行为正确。 拷贝和转移(Copy and move) 在我们开始进入借用系统之前,我们需要知道 Rust 如何处理拷贝和转移。这个 StackOverflow 答案非常值得一读。 基本上,在赋值和函数调用上: 如果值是可拷贝的(copyable)(仅涉及原始(primitive)类型,不涉及如内存或文件句柄的资源),编译器默认进行拷贝。 其他情况,编译器转移(moves)所有权(ownership)并使原来的绑定无效。 简而言之,POD(Plan Old Data) => 拷贝,Non-POD(线性类型(linear types))=> 转移。 以下是一些额外的注释供你参考: Rust 拷贝像 C。每一个按值(by-value)使用一个值都是字节拷贝(通过 memcpy 浅拷贝),而不是语义上的拷贝或克隆。 如果想要让一个 POD 结构体变成不可拷贝的,你可以使用一个 NoCopy 标记,或者实现 Drop 特性(trait)。 转移之后,所有权就转移到了下一个所有者那。 资源回收 Rust 会在任何资源的所有权消失后立刻释放该资源,就这些,当:...