从下周开始将由ChaosBot、Mike和Damody三位轮流发布日报,其中Damody为台湾同胞,如果大家看到中文繁体日报,就是他发布的。
发日报有什么好处?我来给大家透露一下。至少有三点好处:
所以,也欢迎大家参与Rust日报的内容建设中。
#job_queue
使用Rust/Actix/Redis实现。据作者称已经用于生产环境几个月,每周处理数百万个任务。
特点:
简单讨论了泛型参数的协变和声明周期参数中的子类型概念。
#proc_macro
一个简单的过程宏入门教程
可以配合Dtolnay的proc macro workshop来学习。该workshop是Dtolnay为Rust Latam Conf准备的。
该文作者在他博客里记录下来他学习Rust中感觉困难的部分,主要是所有权相关内容,以便帮助后来者。
课外知识:
喷泉码是一种特殊的前向纠错码(FEC),其理论特征十分简单:如果想发送的数据大小为K个数据包的大小,通过喷泉码编码后可以产生并实际发出K+X个数据包,而接收方只需要这其中的任意K个数据包就可以重建原数据。超出原始数据大小的X个数据包理论可以无穷多地生成,因此可以通过调整X的量以适应不同环境不同丢包率的需求。
RaptorQ(以下简称RQ)作为喷泉码的一种,同时也是系统码(Systematic Code)。这意味着一组数据如果通过RQ进行编码,生成的前K个数据包将与输入数据完全一致。我们称这K个数据包为源码符(source symbols)。而基于源数据额外生成的X个数据包,我们称之为修复码(repair symbols)。修复码被用于恢复在传输过程中丢失的源码符。因此,如果传输过程中没有丢失任何源码符,不需要任何解码运算就可以获重建源数据,可以节省时间与内存占用。这种特性也是系统码的一大优点。
RQ码的某个实现方法高通公司写入RFC6330。可用于视频传输。
在本文中,作者给出了他用Rust实现RQ库的优化历程,包括:
使用unsafe和SIMD
使用ArrayMap替换HashMap
使用cfg(debug_assertions)禁用某些验证检查
更新算法、删除了很多clone调用、使用位图等替换HashSet,在这部分内容作者提到,他最初对借用检查器感到非常沮丧,但是熟悉以后他认为借用检查器不仅仅是有助于所有权,而且还有助于理解性能。
将petgraph库替换为自定义的实现
ugdb是gdb的替代TUI前端,unsegen是一个建立在termion之上的TUI库。
如果你已经知道了,就当作者没说过。
Lucet是一个本地WebAssembly编译器和运行时。它旨在安全地在应用程序中执行不受信任的WebAssembly程序。
不错的项目。快速,轻量级和无架构的搜索后端。 Elasticsearch的替代方案,可在几MB的RAM上运行。
WireGuard是一个科学上网的解决方案。boringtun是它的用户态Rust实现。
#graphic_render
该库解决了图形渲染中动态批处理性能问题。
目前刚支持gcc,nginx,redis等(基于musl libc)在rcore上运行。
#nix_shell
wrangler是一个CLI工具,专为有兴趣在Cloudflare Workers上使用Rust生成的WebAssembly的用户设计。
日报订阅地址: