【Rust日报】 2019-05-22:Mozilla图像团队发布WebRender MVP
Rust 1.35 稳定版预发布测试
RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup update stable
1.35增加的一些特性摘要:
- 为
Box<FnOnce>
,Box<FnMut>
, 和Box<Fn>
实现了FnOnce/FnMut/Fn。(来自社区 @crlf0710的贡献 ),相关PR:#59500 - 支持将闭包转换为usnafe的函数指针。
- 增加了
wasm32-unknown-wasi
Target。 - 线程在Debug模式下将显示ID。
alloc::System
实现了Default
。dbg!()
支持无参数调用。- ASCII转换速度提升了4倍速。
- 稳定了一些API。
Rust 1.35 release note
kakoune编辑器已经支持了async/await关键字高亮
#kakoune #IDE #editor
(头一次听说kakoune这个编辑器,恕我无知)。期待其他编辑器也支持,最好是能支持自定义各种emoji。
Read More
不过VSCode又多了一个语法高亮的插件:Tree Sitter,号称可以提供更好的Rust高亮。
Tree Sitter
「异步Explained系列」Rust异步如何工作
#futures #async
- Explained: How does async work in Rust
- Explained: Futures in Rust for Web Development
cargo-permissions: 检测篡改依赖的Cargo权限
#crate #cargo #security #PoC
为了在crates.io中保持健康安全的包(crate),需要尽可能多地强制检测任何类型的漏洞。随着软件包之间依赖关系的使用增加,漏洞传播的风险也会增加。在NPM等其他平台上,我们已经看到了很多这样的安全问题。Rust开发人员需要一个工具来回答有关其依赖关系的问题:
- 为什么png库使用网络层?
- 为什么http库使用文件系统层?
- 可能的场景(Possible scenarios)
- 读取未授权文件
- 请求不可信域名
- 执行未授权代码
- 盗取信息
- 盗用CPU资源
- 不安全地执行代码
cargo-permissions是一个概念证明的库(PoC),基于通过查找代码中的特定路径来检测恶意代码的想法,来保证crate的安全。此项目的主要思想是拥有一组与某些特定标准包列表相关联的权限。另一方面,通过AST分析,检查crate中使用的标准库。例如,如果包A开始使用std::net
库,则将获得net权限。所有使用包A作为依赖的crate都会间接获得net权限。遵循此方法,可以构建具有所有获取权限的依赖关系树。通过这组权限可以获取「超出控制范围的crate」尽可能多的信息。
- 讨论
- cargo-permissions
### 「官方」Unsafe Rust安全检查:栈借用模型 2.1
#miri #unsafe_ub_check #stack_borrow
ralfj比较高产,他负责Unsafe下内存模型相关的工作,目的是用miri来检测unsafe中的UB行为。为了达成这个目标,他陆续研究出以下一些借用模型:
栈借用模型1:
他在去年引入了栈借用模型1用于定义在unsafe内存模型中允许哪种别名。建立合理的别名规则,才能基于miri来检查unsafe下的UB行为。
该模型的核心思想是: 对于一个内存位置,逐步建立可跟踪的引用,形成一个栈结构。比如有一个&mut i32,可以对其重新借用获得一个新引用。这个新引用是必须用于此位置的引用,建立在旧引用之上。当新引用过期的时候,旧引用会被激活,就好像是栈结构push和pop。
在Safe Rust中,通常有借用检查来保护内存。但是在编写Unsafe代码的时候,借用检查就无法提供帮助了。所以,Rust核心团队就必须要定义一组规则,即使对于Unsafe代码来说也是非常有意义的。
栈借用模型2:
在上一篇文章中,ralfj又带来了栈借用模型的升级,栈借用2。
在栈借用1模型中,有一个概念叫做「frozen」,处于frozen位置的指针,只能读取,不能写入。它允许可变借用也能读取(检查粒度比较粗,把可变指针和共享指针同一化处理)。但是现在该模型被发现一个问题:当使用可变借用的时候,在该模型下可能会把某些未定义行为判断为合法。为了改进这个问题,栈借用模型2将精确跟踪允许访问的原生指针(更细粒度的检查,区分了共享指针和可变指针),而不是「frozen」。检查粒度比模型1更细。
栈借用模型2还有很多已知的问题,比如其实并没有真正使用到「栈」,反而更像「树」。但这还不是最后的结论。本文比较长,去原文信息。
栈借用模型2.1:
在今天这篇文章中,ralfj又发现了上次的栈借用2模型存在一些问题:结合内部可变性,行为并不总是他们想要的。在模型2.0中,说到其实没有真正使用「栈结构」是在读取访问的时候,事实上进行「写访问」的时候,还是可以维护一个「栈结构」。
fn main() { unsafe {let c = &UnsafeCell::new(UnsafeCell::new(0));let inner_uniq = &mut *c.get();// stack: [c: SharedReadWrite, inner_uniq: Unique]let inner_shr = &*inner_uniq; // adds a SharedReadWrite// stack: [c: SharedReadWrite, inner_uniq: Unique, inner_shr: SharedReadWrite]*c.get() = UnsafeCell::new(1); // invalidates inner_shr// stack: [c: SharedReadWrite]let _val = *inner_shr.get(); // error because the tag is not on the stack any more
} }
对于这段代码,之前是「合法的」,但是用栈模型2.1来处理的话,就是UB。UnsafeCell是一个内部可变性容器,栈借用模型2.1会在栈中维护SharedReadWrite指针。像上面代码第4行,如果在设置了inner_shr之后,又重置了c变量容器内的值,栈借用结构就会改变,最后一行再使用inner_shr指针就可以检测到非法了,它是一个UB。但是在栈借用模式2.0中,最后代码执行的时候,堆栈将改为[c:SharedReadWrite,inner_shr:SharedReadWrite],从而允许最终访问,这就是问题所在。
这样一来,相当于是栈模型1.0和栈模型2.0的结合?还可以在Unsafe代码导读中看到栈借用模型2.1的完整描述。
后续:ralfj将会写一篇关于栈借用模型的完整论文,当然,可能还是他自己的博士论文更重要吧,毕业最重要了。
- Read More
- Unsafe代码导读:wip/stacked-borrows
Rendy 0.2发布
#gfx #Amethyst #Render
Rendy是基于gfx-hal的一个渲染引擎,属于Amethyst的项目。提供各种工具,如内存分配,资源管理,渲染图执行等。gfx-hal是99%的Vulkan API。 这就是Rendy存在的原因。而不是解决内存分配和纹理上传等低级任务,用户可以专注于创建令人敬畏的高性能渲染器。
Rendy
case-studies: Rust实例探究
#learning #study
该库展示了一些棘手的Rust代码示例,这些代码是dtolnay(syn作者,Rust宏的高手)在使用Rust(他自己和其他人)中的各种高级宏库时遇到的问题集合。该项目致力于对Rust宏开发的一个深刻洞察:擅长使用宏的人和宏专家之间的区别主要与他们擅长“宏”的程度是无关的。
这也许是学习Rust宏的一个非常好的案例。
case-studies
Mozilla图像团队发布WebRender MVP
#mozilla #webrender
WebRender使用与游戏相同的基于GPU的加速技术重写了Firefox渲染架构,现在适用于一些选定的Win10设备。WebRender使用的现代架构主要是:
- 合成器中页面的表示不再是一组栅格化图层,而是现在的一个未经过图形化的显示列表。
- 合成和光栅化步骤已加入到单个GPU驱动的渲染步骤中。
有关更多详细信息,请参阅Lin Clark的Hacks系列文章。
- Read More
- Lin Clark的Hacks系列文章:WebRender如何摆脱jank
- webrender
Rust Nightly 1.36.0中已经弃用了mem::uninitialized
#nightly
Rust的臭名昭著的mem::uninitialized
方法在今天的每晚构建中已被弃用。它的替代品MaybeUninit
已经开始稳定。如果你正在使用前者,则应尽快迁移到使用后者(可能在6周内达到稳定)。因为这是一个break change的修改。
这篇文章主要讨论了未初始化内存的性质以及如何在Rust中使用它。并且探讨了mem::uninitialized
为什么会被弃用,以及MaybeUninit
是什么。
- Read More
- Reddit 讨论
多语言混合项目的一些经验
#ffi #C #Polyglot
长文预警!作者在写自己的库bitvec的时候,开始考虑,如何将其用于其他语言,比如他如果在一个C++程序中想用bitvec怎么办?所以他开始设计一套针对为Rust crate编写FFI的惯用法。这篇文章记录了他从API设计到实现的一些经验,值得一读。
- Read More
- bitvec
- bitvec ffi branch
From 日报小组 @Chaos
日报订阅地址:
独立日报订阅地址:
- Telgram Channel
- 阿里云语雀订阅
- Steemit
- GitHub
社区学习交流平台订阅:
- Rust.cc论坛: 支持rss
- Rust Force: 支持rss
- 微信公众号:Rust语言学习交流
【Rust日报】 2019-05-22:Mozilla图像团队发布WebRender MVP相关推荐
- 【Rust日报】 2019-08-12:Tokio alpha 版发布,新版本支持async/await
Tokio alpha 版发布 #tokio 新版本支持async/await tokio = "=0.2.0-alpha.1" #![feature(async_await)]u ...
- 【Rust日报】 2020-02-25 KAS GUI 0.3 发布
KAS GUI 0.3 发布 KAS 0.3 版本发布, 此版本已经在主题,图形和绘图API上进行了大量工作,包括用于Mandlebrot分形的交互式查看器(通过WebGPU着色器),模拟钟面(通过某 ...
- rust主播排行_「Rust日报」2019每周精选 • 第四期
前言: 从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛.tg channel.Steemit.GitHub.语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹 ...
- D2 日报 2019年5月20日
? 新闻 ➡️ Faster smarter JavaScript debugging in Firefox DevTools - Mozilla Hacks - the Web developer ...
- Unity3d 周分享(19期 2019.6.22 )
选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. #UnityTips您知道OnOpenAsset属性吗? 它允许您在项目窗口中 ...
- 【每日早报】2019/05/29
早报概要 每日早报 2019/05/29 国内要闻 文娱影游 科技通信 金融财经 每日早报 2019/05/29 国内要闻 阿里巴巴回应"香港二次上市":市场传言,不予置评 微信& ...
- D2 日报 2019年4月18日
? 新闻 ➡️ 今天,小程序正式支持 SVG juejin.im ➡️ Facebook:公司曾「无意中上传」150 万用户邮件联系人 readhub.cn ? 开源项目 ➡️ NtesEyes/py ...
- 没有终结点在侦听可以接受消息的_【大卫聊股】2019.05.05 周末重要消息分析及下周一走势预判...
2019.05.05 重要消息: 1. [发改委:适当降低新增分布式光伏发电补贴标准] 显然是利空光伏股. 2. [电报|7只科创基金最终募资金额出炉 首募合计超1200亿]多家基金公司发布公告,科创 ...
- 【Rust日报】2020-11-03 《Rust日报》总第1000期
今日头版 <Rust日报>第1000期,感谢有你 两年半的时间,我们一期期走来,到了今天发行的第1000期.回想我第一次看<Rust日报>,还是在Rust 2018刚推出的时候 ...
- 【阅读材料精选 From-to-Date:2019.05.25~2019.06.28】
[阅读材料精选 From-to-Date:2019.05.25~2019.06.28] 重点内容 [文本数据集] github:https://github.com/imhuster/funNLP [ ...
最新文章
- 聊一聊2020年实例分割领域的进展和未来展望
- 选择排序和Java实现、C++ vector 模板类实现
- 河北大学计算机二级报名时间,河北大学关于2018年下半年学位授予工作安排的通知...
- 谈谈我的移动端rem适配方案
- 全球19家值得关注的物联网安全初创企业
- 随机给出三十道四则运算题目
- mysql什么情况会刷脏页_mysql-刷脏页(12)
- div探索系列(二):让多个div显示在一行(浮动的div)
- gcc编译时rpath可以使用多个路径,用:分隔
- Unity3d 无人机
- 基于词典方法和机基于器学习方法的中文情感倾向分析(Web)
- delphi 7无法运行提示 Borland license information was found, but it is not valid for Delphi
- TSL1.0升级到TSL1.2遇到的问题
- web页面PC端和移动端的区别
- 根号3表白html,数字表白公式 表白套路情话
- C++中的tolower()函数与toupper()函数
- 挖掘肖特基二极管保护电路的小窍门
- [Swift]LeetCode38. 报数 | Count and Say
- 2022-12-01:从不订购的客户。找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C
- android中的插件开发框架,设计并开发一个 Android 的插件化框架