官方新闻
同志们!Rust 2018 RC1 来了
rustup install beta
rustc +beta --version
rustc 1.30.0-beta.2 (7a0062e46 2018-09-19)
str::repeat曝安全漏洞
官方目前正在申请CVE,目前官方已经修复此漏洞,将在9.25发布Rust 1.29.1中稳定此修复。
标准库中的str :: repeat函数允许重复字符串固定次数,返回最终的字符串。最终字符串的容量通过相乘来计算
字符串的长度,这个计算可能会溢出。
str :: repeat的其余实现包含不安全的代码,它依赖于具有计算容量的预分配Vec。在整数溢出时,预分配容量将小于实际需要的容量,然后在分配的缓冲区之外写入,导致缓冲区溢出。
这个漏洞和VecDeque那个类似。
受影响的版本
虽然str :: repeat函数自1.16.0以来一直存在于Rust中,但是这个
漏洞被引入标准库中是在2018年5月10日发布的1.26.0稳定版中。
事后诸葛亮:
查看了一下修复的代码,问题主要是在 slice::repeat方法中。
修复代码就简单了,加检查就好,整数溢出即panic
let mut buf = Vec::with_capacity(self.len().checked_mul(n).expect("capacity overflow"));
Manning直播: Rust in Motion
社区新闻
【RustConf 2018闭幕演讲文稿】使用Rust进行游戏开发的正确姿势
该文来自于RustConf 2018闭幕演讲文稿,但并非是对文章的全文翻译,只是我在阅读过程中的梳理和总结。
Niko工作时间:使用GDB调试Rust代码
Rayon的力量
作者在工作中使用sklearn(一个Python第三方提供的非常强力的机器学习库)的内置工具进行余弦相似度查询,并行性不足,并且会产生很多OOM(内存不足)错误。他们还使用了Gensim和一些其他工具,往往会使用大量内存。
最终他厌倦了这一切,拿起了Rust,装备了Serde,序列化了查询所用的JSON矩阵,架起了Rayon,最终得到了一个成功的并行故事。 480G的内存只用了不到3G。
Rust全文搜索引擎Tantivy 0.7发布
新版本改为使用failure crate进行错误处理
Rust实现的Juniper GraphQL server库发布 0.10
增加了对Warp和Hyper集成支持
Rust开发的城市模拟游戏
作者经过5年的努力,现在基本成形。基于Rust、React、Wasm、WebGL等技术
linkerd 2.0 发布
可以在Kubernetes 1.9+ 集群测试 linkerd 2.0
Linkerd 2.0 数据板块 由Rust 实现,P99延迟小于 1ms,控制板块由Go实现
从Bash到Rust
在过去的一年里,作者自己编写bash脚本来维护一个长期运行的服务,基本一切都挺合适,但是唯一的困难是管理进程id,查找旧的pid,并kill它。
比如当前有如下进程:
PID ARGS
1111 /bin/bash
2222 wiredforge
3333 pizza_freak
444 chat_bot
6666 robertmasen.pizza
为此作者使用了一个很复杂的命令
ps -axo pid,args | egrep "[w]iredforge" | head -1 | sed -e 's/^[ \t]*// ' | cut -d ' ' -f 1
然后得到 2222 wiredforge里的2222
这命令通常可以工作,但是要重新部署脚本的话,则很难记得住。所以作者想要用Rust实现一个小程序来帮助它完成这些工作。
本文就是记录了作者实现这个小工具的过程。该工具还跨平台(linux/ mac)。
计算机图形相关的crate推荐列表
C++ Lifetime profile v1.0 发布
用于检测C++代码中 悬空指针/迭代器/ string_views / spans /等常见情况。
估计是跟Rust学的
LLVM 7.0发布了
博文与库
在FFI中进行不安全的冒险
可以算作一个FFI和Unsafe的教程
系列文章 : 探索Rust生命周期
Rust如何与C#集成
这是来自于Flare 服务团队(已经在每日新闻里出镜多次的存储引擎)的文章,介绍了他们在生产级将C# 和Rust集成的宝贵经验。
本文很长,图文并茂,需耐心阅读。有时间我会翻译一下。
postgres 和 r2d2_postgres使用TLS建立连接池
整数和指针之间有什么区别?
在汇编语言级别,不需要担心混淆整数和指针。对于高级语言来说,高程度的抽象也会将指针和整数完全隔离,不容易混淆。但是对于C/ C++/ Rust这样的语言,需要注意整数和指针的区别。
该文章是一篇论文的预告文,具体的区别估计还在论文中有详细描述。
一个无锁Map
使用有序的Bucket构造的树形多级Hash Table来实现无锁Map
尝试解决孤儿问题
该文作者尝试挑战孤儿规则
非常hack的技术:features gate和条件编译配合突破孤儿规则
一次项目编程语言选择之旅
作者要为新项目选择语言,考量了诸多语言的特点,最终选了Rust。可以看看他的思考过程。
爱上Rust
作者记录了他和Rust的长篇「爱情」故事。长达十年的追逐,从不屑到爱,祝愿这份「爱情」天长地久。
[原文]http://dtrace.org/blogs/bmc/2018/09/18/falling-in-love-with-rust/)
新库 cargo-stabilize
可以帮助开发者将Cargo.toml中所有使用通配符标注的crate替换为最新版,包含依赖项
一个实验性的Rust实现的shell
GitHub趋势榜新上榜项目
- rust-memchr,libc memchr(在某一内存范围中查找一特定字符)的Rust安全接口
- lighthouse, 轻量级以太坊2.0客户端
- slotmap,在Rust 2018 Conf闭幕演讲中提过的slotmap,是分代索引模式的践行库
- relm,之前介绍过,基于GTK+,受Elm语言启发的GUI库