【Rust日报】 2019-07-31
「SO问答」既然两个可变引用不能别名为啥Rust编译器没有对其进行优化
该问题的作者描述,比如C代码中:
void adds(int *a, int *b) {
*a += *b;
*a += *b;
}
两个指针a和b有可能互为别名(俩指针指向同一数据),所以clang在编译该代码的时候,会在寄存器中存储两次(%rsi),%eax来防止这种情况。当然也可以使用restrict关键字来对参数进行约束,显式地告诉编译器这俩指针不可能互为别名(但在C语言中,restrict关键字仅仅是告诉编译器可以优化,它不会帮助开发者进行检查,也就是说,很可能因为开发者没有遵循此契约而引发未定义行为)。从而生成的优化代码中只存储一次寄存器。
但是作者发现在Rust中虽然有编译器检查,两个可变引用不存在互为别名的情况,但是编译器并没有因此而进行任何优化:
#![crate_type = "staticlib"]
#[no_mangle]
fn adds(a: &mut i32, b: &mut i32) {
*a += *b;
*a += *b;
}
所以他比较担忧,是不是在Safe Rust之下也可能存在别名?
该贴的回复给出了答案:
Rust最初启用了LLVM的noalias属性,但这导致了非预期的编译结果(算是LLVM的一个Bug,等issues 54878修复以后就正常了)。现在也可以使用-Zmutable-noalias=yes参数进行编译就能得到预期结果。
「学术」使用类型化指针反转进行高效析构
HAL INRIA貌似是法国国家信息及自动化研究院。该论文提出了ML风格编程语言的资源管理模型,旨在兼容OCmal理念和运行时模型,提议使用析构函数扩展OCmal,在系统编程所有权和借用模式之上来提升OCmal的安全性、效率。
没错,借用了Rust/C++中的一些概念。感兴趣的可以看看,对资源管理应该会有深入的了解。
该组织已经发布了多篇关于Rust研究的论文了。
Python和Rust实现神经网络
这篇文章是作者探索Rust是否适合数据科学的工作。他分别用python和rust实现了一个小型的神经网络,然后进行了性能测试,利用火焰图进行分析,最终得出一个结论:
- 大部分时间都花在做线性代数上,不管Rust还是Python,所以使用Rust永远也不会有10倍的加速。
- Python进行优化以后,性能可以提升两倍,Rust原则上可以进行相同的优化,但目前ndarray还不支持2维数据以上的矩阵乘法。
- 作者认为,Rust目前还没有做好胜任数据科学的工作。未来还需要更完善的生态系统。
关于Rust依赖安全的最新思考
很高兴有人在帮我们思考这个问题:当一个crate依赖越来越多的crates时,我们有什么办法可以审计它们?
paperclip: OpenAPI的代码生成工具
0.3发布,支持OpenAPI V2接口。
rocket-lamb: 方便在aws lambda上面跑rocket的库
async-injector: Rust的异步反应式依赖注入库
新库,WIP状态。该库是从作者的另外一个项目OxidizeBot(高性能Twitch机器人)中提取出来的。
「讨论」Rust如何实现代数效应
看样子该贴作者是一个函数式粉丝。评论回复中有人用Rust实现了一个代数效应库effective-rust。
代数效应目前是一个学术/实验概念,它允许你通过使用类似于throw catch的机制来改变称为“效果”的某些计算元素(如函数调用,打印语句等)。
Debian Buster 将会预装Rust编译器
2019年7月6日发布的Debian GNU/Linux 10 “Buster” 操作系统将预装Rust编译器。
From 日报小组 Chaos
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
Leave 【Rust日报】 2019-07-31 to:
Read more #rust posts
Best Posts From ChaosBot
We have not curated any of blackanger's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From ChaosBot
- 【Rust日报】 2019-09-06
- 【Rust日报】 2019-09-05
- 【Rust日报】2019-09-04
- 【Rust日报】 2019-09-03
- 【Rust日报】 2019-09-01
- 【Rust日报】 2019-08-30
- 【Rust日报】 2019-08-29
- 【Rust日报】 2019-08-28
- 【Rust日报】 2019-08-27
- 【Rust日报】2019-08-26
- 【Rust日报】 2019-08-25
- 【Rust日报】 2019-08-24
- 【Rust日报】 2019-08-23
- 【Rust日报】 2019-08-22
- 【Rust日报】 2019-08-21
- 【Rust日报】2019-08-20
- 【Rust日报】2019-08-19
- 【Rust日报】2019-08-18
- 【Rust日报】 2019-08-17
- 【Rust日报】 2019-08-16