首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Rust碎碎念
Praying
创建于2021-05-13
订阅专栏
专注Rust编程技术~,翻译/分享Rust相关技术博客
等 64 人订阅
共58篇文章
创建于2021-05-13
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
【译】理解Rust中的Futures(二)
如果你还没有看前面的内容,可以在这里查看(译注:已有译文,可在公众号查看)。 在第一部分,我们介绍了 Future trait,了解了 future 是如何被创建和运行的,并且开始知道它们如何能被链接到一起。 上次内容的代码可以在这个 playground 链接查看,并且本文中…
【译】理解Rust中的Futures (一)
Rust 中的 Futures 类似于 Javascript 中的promise,它们是对 Rust 中并发原语的强大抽象。这也是通往async/await的基石,async/await 能够让用户像写同步代码一样来写异步代码。 Async/await 在 Rust 初期还没有…
【译】为什么Rust中的BTreeMap没有with_capacity()方法?
Rust 的 HashMap(以及 HashSet 和 Vec)集合都提供了一个初始化方法—— fn with_capacity(capacity: usize),该方法预先分配足够的内存空间以存储capacity个元素。为什么 BTreeMap(和 BTreeSet)没有这个…
【译】理解Rust中的局部移动
最近,我一直在研究Rust,虽然从很多方面来看它都是一门十分优秀的语言,但我也发现了很多不易察觉的复杂性。其中一个例子就是,不太引人注意的局部移动(partial move) 。因此,我在想,为什么不写一篇文章来介绍它呢? 我不准备在这里介绍Rust中所有权和借用的全部细节。不…
【译】Arc 在 Rust 中是如何工作的
原子引用计数(Arc)类型是一种智能指针,它能够让你以线程安全的方式在线程间共享不可变数据。我还没有发现能够很好地解释它的工作原理的文章,所以我决定尝试来写一篇。(文章)第一部分是介绍怎样使用Arc和为什么要使用Arc;如果你已经了解这部分内容,只是想知道它是如何工作的,可以直…
【译】理解Rust中的闭包
闭包(closure)是函数指针(function pointer)和上下文(context)的组合。 没有上下文的闭包就是一个函数指针。 不同于其他语言,Rust 对self参数的使用是显式的。当我们实现结构体时,必须把self作为函数签名的第一个参数: 这和那些把self(…
【译】Ringbahn的两个内存Bug
在实现ringbahn[1]的时候,我引入了至少两个 bugs,这些 bugs 引发了内存安全错误,导致段错误,分配器中止以及匪夷所思的未定义行为。我已经修复了我所能找到的 bugs,现在我也无法证明代码库中是否有更多的内存安全问题(当然,这并不意味着没有),我想记录下这两个 …
【译】Rust中的array、vector和slice
在本文中,我将会介绍 Rust 中的 array、vector 和 slice。有 C 和 C++编程经验的程序员应该已经熟悉 array 和 vector,但因 Rust 致力于安全性(safety),所以与不安全的同类语言相比仍有一些区别。另外,slice 是一个全新且非常…
【译】Rust async/await的开销
本项目意在比较手写poll循环和async/await之间的性能差异。它使用在内存中工作的“仿造的” I/O对象。异步执行器(async executor)没有使用分配(allocs)、锁或者线程本地存储,并尝试在进行I/O调用时尽可能地高效。 每个基准测试测量了32个请求/响…
【译】异步迭代语义(二)
支持异步迭代默认使用并行语义的一个重要论点是,它是最普遍需要的语义。或者在今天某些特定领域内是这样,但是在将来异步 Rust 覆盖的全部领域内的真实性如何呢? 如果我们想了解异步 Rust 可能的发展方向,我们可以看一下 Node.js streams: 他们的存在时间比 Ru…
【译】异步迭代语义(一)
在最近的一次语言团队会议[1]上,我们讨论了即将到来的Steeam[2] RFC。我们讨论了将其落实所需的步骤,以及之后想要采取的步骤。对于 stream,我们最终想要的其中一个东西就是:“异步迭代语法(async iteration syntax)”。就像for x in y…
【译】探讨Rust中的动态分发(dynamic dispatch)
在此我先声明,我是一名 Rust 新手(尽管目前为止我还挺喜欢它的),因此,如果我犯了技术上的错误,请告知我,我会努力修正它们。说完这些,让我们开始吧。 我想要仔细研究动态分发(dynamic dispatch)可以从下面的代码片段中看出。假定我想创建一个结构体CloningL…
【译】Rust——理解trait (一)
如今很多语言都是面向对象,支持这种范式,或者不是直接面向对象,而是允许程序员定义自己的数据类型。 通常,我们这些类型在特定条件下表现出特定的trait,例如,当向标准输出打印类型的时候,或者可能要遍历一个特定类型时,我们需要知道如何执行这些操作。这些通过保证我们的类型实现了特定…
【译】引入“可审计(auditable)”:审计Rust二进制在生产中已知的缺陷或漏洞
Rust由于其内存安全保证,在编写安全性至关重要的程序方面前景很好。但是,尽管Rust crates中的漏洞较为少见,但是仍然存在,并且Rust当前缺少处理他们的工具。 例如,如果你运行一个存在漏洞的Linux发行版,它会对你进行提示,你甚至可以选择进行自动安全更新。Cargo…
【译】Rust 中的变量和内存管理
最近,由 Mizilla 团队在 2010 年左右开发的 Rust 编程语言引起了很多争议。 本文的目的是了解更多关于 Rust 是如何处理变量和内存从而在编译期而非运行期捕获错误。这也是使其成为关键应用选择的安全语言的特性之一。 Rust 使用了一个被称为linear typ…
【译】Rust中测试异步函数的两种方式
喜欢Rust的一个原因就是它的测试。不需要安装测试运行程序,不要研读10种不同的单元测试框架,没有兼容性问题... 后者完全在你的掌控之内,只需要做一些语法上的修改(如果你已经熟悉了异步模式(async paradigm)[3] )。那么运行时呢?选择运行时-比如在Scala中…
【译】Rust中的生命周期
对于很多 Rust 初学者而言,生命周期(lifetime)是一个很难掌握的概念。在我意识到生命周期对 Rust 编译器履行职责有多重要之前,也曾与其抗争过一段时间。生命周期本质上并不难。只是因为它是一种新的构思,以至于大多数程序员从未在任何其他语言中见过它们。让事情变得更糟的…
【译】Rust中的Sizedness (七)
第三常见的使用ZST的应该是PhantomData。PhantomData是一个零大小标记结构体,可以用于“标记(mark)”一个包含(containing)结构体含有特定的属性。在使用目的上类似于像Sized,Send和Sync这样的自动标记trait,但是作为一个标记结构体…
【译】Rust中的Sizedness (六)
第二常见的ZST是never类型:!。它被叫做never类型是因为它表示永远不会产生任何值的计算。 !的第二个有趣的属性让我们能够让我们在类型级别把特定的状态标记为不可能。让我们看看下面的函数: 我们知道,如果这个函数返回并且是成功的,Result将会持有Success类型的实…
【译】Rust中的Sizedness (五)
我们可以通过给结构体添加一个不确定大小(unsized)的字段来定义一个不确定大小结构体。不确定大小结构体只能有1个不确定大小字段并且该字段必须是这个结构体里的最后一个字段。这是第一个必要条件,以便于编译器在编译时确定每个字段在结构体中的起始偏移量,这对于高效快速的字段访问是必…
下一页