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相关推荐

  1. 【Rust日报】 2019-08-12:Tokio alpha 版发布,新版本支持async/await

    Tokio alpha 版发布 #tokio 新版本支持async/await tokio = "=0.2.0-alpha.1" #![feature(async_await)]u ...

  2. 【Rust日报】 2020-02-25 KAS GUI 0.3 发布

    KAS GUI 0.3 发布 KAS 0.3 版本发布, 此版本已经在主题,图形和绘图API上进行了大量工作,包括用于Mandlebrot分形的交互式查看器(通过WebGPU着色器),模拟钟面(通过某 ...

  3. rust主播排行_「Rust日报」2019每周精选 • 第四期

    前言: 从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛.tg channel.Steemit.GitHub.语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹 ...

  4. D2 日报 2019年5月20日

    ? 新闻 ➡️ Faster smarter JavaScript debugging in Firefox DevTools - Mozilla Hacks - the Web developer ...

  5. Unity3d 周分享(19期 2019.6.22 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. #UnityTips您知道OnOpenAsset属性吗? 它允许您在项目窗口中 ...

  6. 【每日早报】2019/05/29

    早报概要 每日早报 2019/05/29 国内要闻 文娱影游 科技通信 金融财经 每日早报 2019/05/29 国内要闻 阿里巴巴回应"香港二次上市":市场传言,不予置评 微信& ...

  7. D2 日报 2019年4月18日

    ? 新闻 ➡️ 今天,小程序正式支持 SVG juejin.im ➡️ Facebook:公司曾「无意中上传」150 万用户邮件联系人 readhub.cn ? 开源项目 ➡️ NtesEyes/py ...

  8. 没有终结点在侦听可以接受消息的_【大卫聊股】2019.05.05 周末重要消息分析及下周一走势预判...

    2019.05.05 重要消息: 1. [发改委:适当降低新增分布式光伏发电补贴标准] 显然是利空光伏股. 2. [电报|7只科创基金最终募资金额出炉 首募合计超1200亿]多家基金公司发布公告,科创 ...

  9. 【Rust日报】2020-11-03 《Rust日报》总第1000期

    今日头版 <Rust日报>第1000期,感谢有你 两年半的时间,我们一期期走来,到了今天发行的第1000期.回想我第一次看<Rust日报>,还是在Rust 2018刚推出的时候 ...

  10. 【阅读材料精选 From-to-Date:2019.05.25~2019.06.28】

    [阅读材料精选 From-to-Date:2019.05.25~2019.06.28] 重点内容 [文本数据集] github:https://github.com/imhuster/funNLP [ ...

最新文章

  1. 聊一聊2020年实例分割领域的进展和未来展望
  2. 选择排序和Java实现、C++ vector 模板类实现
  3. 河北大学计算机二级报名时间,河北大学关于2018年下半年学位授予工作安排的通知...
  4. 谈谈我的移动端rem适配方案
  5. 全球19家值得关注的物联网安全初创企业
  6. 随机给出三十道四则运算题目
  7. mysql什么情况会刷脏页_mysql-刷脏页(12)
  8. div探索系列(二):让多个div显示在一行(浮动的div)
  9. gcc编译时rpath可以使用多个路径,用:分隔
  10. Unity3d 无人机
  11. 基于词典方法和机基于器学习方法的中文情感倾向分析(Web)
  12. delphi 7无法运行提示 Borland license information was found, but it is not valid for Delphi
  13. TSL1.0升级到TSL1.2遇到的问题
  14. web页面PC端和移动端的区别
  15. 根号3表白html,数字表白公式 表白套路情话
  16. C++中的tolower()函数与toupper()函数
  17. 挖掘肖特基二极管保护电路的小窍门
  18. [Swift]LeetCode38. 报数 | Count and Say
  19. 2022-12-01:从不订购的客户。找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C
  20. android中的插件开发框架,设计并开发一个 Android 的插件化框架

热门文章

  1. 用Obsidian实现自动日记
  2. python制作fnt字体打包工具
  3. 李雅普诺夫稳定性理论
  4. 【线性代数】20 基变换,基变换公式,坐标变换公式
  5. 恩智浦智能车电机驱动程序_恩智浦智能车电机驱动-HIP4082+LR7843
  6. 电工学(上)-电工技术 秦曾煌(7版)
  7. nlp基础—12.LSTM-CRF模型介绍
  8. svn添加新项目的步骤
  9. 原画学习步骤,零基础一步步学原画!
  10. 视频教程-ArcGIS开发arcpy教程-其他