【Rust日报】2023-12-11 Rust 超越面向对象编程: 第三部分 继承

2023-12-13 15:35:30 浏览数 (2)

何时可传递 Non-Send的 Future ?

本文深入探讨了异步Rust中有关跨越 .await 时借用非Sync数据的问题。首先回顾了Send和Sync自动traits,这些traits是Rust库中支持无畏并发的特性,通过静态检查确保非线程安全的数据结构不会从其原始线程中逃逸。作者解释了这两个特性的关系,并通过例子说明了在异步Rust中,尽管Rust强调无畏并发,但在处理异步编程时仍存在一些限制。特别是,作者提到了一个与Tokio工作窃取运行时结合使用的例子,展示了在异步环境中使用非线程安全数据结构的限制。最后,作者提出了一种更好的spawn方法,以更好地支持异步环境中的非Send类型。

原文链接 https://matklad.github.io/2023/12/10/nsfw.html

for await以及和stream的斗争

for await 上是对当前异步流最常见迭代方式的一种简写,但是在处理并发查询时可能导致其他的问题。

代码语言:javascript复制
for await item in stream { /* process item */ }

while let Some(item) = stream.next().await { /* process item */ }

作者通过一个实际的批处理作业的例子,作者描述了使用buffered combinator来同时执行多个异步查询时可能出现的问题。具体来说,当一个异步任务的执行时间较长时,可能导致其他任务在等待时长时间内处于暂停状态,从而引发超时问题。作者提出了几种解决方案,涉及到是否在关键位置使用spawn、修改组合器的文档以提醒用户可能的问题,以及是否应该重新设计组合器。文章最后呼吁对异步Rust的原语进行更多的实际测试和实验,并探讨了未来可能的语言特性

原文链接 https://tmandry.gitlab.io/blog/posts/for-await-buffered-streams/

Rust 超越面向对象编程: 第三部分 继承

本文讨论了 继承 在Rust中的角色以及为何它在面向对象编程中可能并不是理想选择的文章。作者通过分析继承的起源和在静态OOP语言中的使用情况,提出了Rust中没有直接的继承概念,而是通过其他方式达到相同效果。文章还讨论了继承对记录类型和模块的影响,并强调了在涉及虚拟方法时继承可能导致的问题。最后,作者提供了一些替代继承的设计模式,以及在Rust中如何更好地表示这些模式。

原文链接 https://www.thecodedmessage.com/posts/oop-3-inheritance/

Rust playgound 现在支持 stdin 输入

Rust Playground现在在执行面板下方添加了一个输入字段。这个字段允许你写入stdin,因此你可以运行类似于Rust书第2章中的猜数字游戏的交互式程序.

猜数字游戏的Playground地址 https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9c3f8db40093fba040aadd3c7fcdac1e

YDLIDAR Tmini Pro Rust 驱动实现

ydlidar_driver 是 YDLIDAR Tmini Pro(一款激光雷达) 的 Rust驱动. 下面是他的演示效果.

github 地址 https://github.com/tier4/ydlidar_driver

--

0 人点赞