「Rust每日新闻」本周精选 • 第二十五期
前言:
从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛、tg channel、Steemit、GitHub、语雀订阅都开通了Rust每日新闻,分享我每天的见闻,偶尔也夹杂了一些个人的观点。大半年过去了,Rust每日新闻已经成为了Rust社区群大家每天必看的内容。在这个知乎专栏里,每周会精选几篇Rust社区中的动态,和大家分享。分享的内容就不按时间排序了。
2018-12-23
「付费阅读」系列
官方新闻
通告Rust 1.31.1发布
修复了一些问题。
「官方」Rust 2018中的过程宏
官方博客介绍了Rust 2018 edition中过程宏的支持,重点介绍了过程宏基于TokenStream的工作机制,值得一阅。
Withoutboats眼中的Rust 2019:组织债务
Rust最新动态摘要
审核中的PR:
- 稳定化Pin API
- 重构core::iter模块(值得一看)
- 升级stdsimd子模块
- 稳定化
#[repr(packed(N))] - rustc依赖的库:parking_lot升级到0.7版本
- 代码优化(没想到Rust代码中也有乱用clone的情况)
- 稳定化
Vec(Deque)::resize_with - RalfJung改进了miri的内存分配精准度
- 为
Arc<T>/Rc<T>增加Into<NonNull<T>>实现(引起了较多讨论) - 在Release版本中提供最基本的CTFE跟踪(为了Debug?)
已合并的PR:
- 扩展Pin文档并且将std::pin::Pinned改成了std::marker::PhantomPinned
- miri得到了更新
- TokeStream得到了改进: 优化了TokenStream以及其他类型
- 允许胖指针实现Hash
- Rust 1.31.1 Release Note已更新
- 修复trait对象的Bug
- 更新LLVM子模块
「官方」Rust 2018 edition 工具集
本文介绍了Rust 2018 edition包含的工具集
- Rustfix
- Clippy
- Rustfmt
- IDE support
未来:
- 改进LLDB和GDB的Rust调试支持
- 完善RLS
- 让Cargo更强大
- Rustdoc改进
社区新闻
LeetCode现在已支持Rust
中国版和美国版都支持了,另外了解到的消息是,目前是基于Rust stable 1.31版,而且还会持续跟进Rust Stable版本。在未来会逐渐加入常用的crate,这个看使用者反馈来持续改进。
刷Leetcode Rust代码的碰到问题可以加QQ群反馈。qq群号: 950323896,进群以后可以加微信群,直接向官方反馈问题。
nitric: Specs的继承者
nitric是Specs作者新写的库,那么他为什么在苦心研究两年Specs之后,要革自己的命呢?在本文中他阐述了如下理由:
- 并非是对specs的重构,也不是和specs竞争,也不会对Specs有任何影响,Specs也不会被弃用
- nitric是打算提供一个更通用的解决方案
- Specs已经有了自己的生态,所以需要独立出另外一个库继续开发
- nitric是一个通用的数据处理库,一旦完成这个库,specs将成为nitric的前端
- nitric的愿景是提供一系列的crate,这些crate是解决数据处理问题的标准方案
- 未来可以使用nitric的领域:游戏开发、游戏物理、模拟器、编译器、数据验证、图形用户界面等
- nitric的哲学是:1. 只能以合理的组合方式解决单个问题。 2. 公开一个通用、可组合和强大的API
- nitric会与其他数据结构兼容,比如ECS/CGS库等
- 也可以使用nitric来作为ECS,比如通过nitric-entity库。文章里也介绍了几个计划中的其他nitric crate。
- Amethyst将继续使用Sepcs,未来是否会迁移到nitric,需要由RFC来推动
大家也不要太亦可赛艇,他只是先分享了计划,还未动工。不过已经有了代码仓库:
「嵌入式Rust」Rust对Arduino支持进展调查
因为Arduino使用的是AVR微控制器,但Rust目前还未支持AVR。但Rust嵌入式开发组已经有计划支持AVR。
感兴趣的朋友可以关注此issues: AVR support
目前也有一个avr-project GitHub项目组独立fork了Rust,提供了对AVR的支持。在官方Rust未支持AVR之前,可以使用这个,看上去还非常活跃。
「访谈」Josh Triplett访谈
Josh Triplett是一个开源软件贡活跃献者,他最近正和另外一个匿名资助者,准备向非盈利性开源组织Conservancy捐赠9万美元,用于继续推动开源软件的发展。这是对他的采访。
采访中,他提到Rust是他今年在开源社区看到的最激动人心的项目。他说:Rust给了我对计算未来的巨大希望。
也许Conservancy在拿到这笔捐赠后,可能帮助Rust完成组织治理的工作。(猜想)
Warp 0.1.10发布
Wary是另一个Rust Web框架,由Hyper作者开发。 新版本的功能简要:
- TLS支持
- CORS
- Websocket检测助手
依然计划和tower-web进行合并,但下一步主要是完善service trait。将来可以通过Service方便地添加tower式中间件。
(那官方Tide框架的中间件协议呢?也许tower式中间件协议在官方中间件协议稳定以后也会支持吧)
Tokio 2019展望
主要是两件事:
一、 Async/Await支持
Tokio预计在Rust语言async/await稳定之后,正式支持该语法。如果你想在nightly上面使用async/await,可以使用async-await-preview。
目前tokio是以实验性功能来探索async/await的支持,比如一些特定的API会添加_async后缀,一旦async/await稳定了,Tokio将立马采取重大的更新并去除这些后缀。默认情况下,比如,会将tokio::run_async改成tokio::run。
那么futures-rs 0.1怎么办?然而并不能立马放弃对0.1的支持。
这是一个不断增长的生态系统,包括一些生产环境的应用,也使用了futures 0.1。Tokio会以向后兼容的方式来支持async/await,也就是说,同时支持async/await和futures 0.1。对于已经形成生态的系统而言,变革很困难,还需要和社区共同商讨过渡策略:关注此track issues
二、团队扩展
是时候扩展Tokio的开发和维护团队了,准备像Rust团队学习,分成多个工作组,不同的组负责Tokio的不同方面。当然这个过程还在讨论中。
同时也需要一些新手加入,帮助使用和发展Tokio。
「嵌入式Rust」实时消息框架RTFM发布0.4版
嵌入式工作组的老大japaric发布的库,用于构建并发的实时系统,貌似基于RTFM语言。
RTFM语言旨在促进并发编程或嵌入式实时软件的开发。
如何成为一个超级的Rust开发者
这是一个「真香」的故事。
作者在去年看到Rust语言的时候,心想:"呵呵,继续吹,继续炒。呵呵,我用C++照样可以完成同样的事,而且还拥有更多的控制权"。
然而,今天这位作者写下了这篇博文,他说:“我之前的想法真是大错特错,错到底了!,当我潜下心来研究Rust,我发现,它是一门经过深思熟虑的语言,它的工作方式有别于我所知道的一切。”
他变成了Rust传道者。
crates.io可视化报告
截止2018年11月,已经达到2w个crates,但很多crate版本发布都小于6次release版本,生态系统依然很年轻。另外一些crate有100多个发布版本,有很多crate都是零依赖,但有3000个crate都依赖serde,所以,serde当之无愧是最流行的crate。
学习资源
Rust Quiz解读已更新到Quiz 21
「嵌入式Rust」Cortex-M3 入门指南(二):寄存器与 GPIO
Serverless HTTP
该文作者探索aws lambda平台的无服务器HTTP应用,并编写了一个crate,叫做lando,它以http crate为核心接口,以lambda为部署目标,来部署API网关。本文就是对lando的介绍。
「Rust扩展Python案例」快速JSON解析库
基于PyO3库
解析工具选择之书
有人写了一本书,罗列了现在的解析工具,比如nom、combine、pest等,提供了一些文档和示例,帮助你选择适合使用场景的解析工具。目测还在完善中。
「系列文章」Rust vs Swift
作者从2015年开始写这一系列博客,直到昨天才发布了一个整理页面。感兴趣可以看看。
rust-derivative: 提供了替代derive属性的宏
「Slides」魅力wasm-bindgen
项目
下沙:Rust+WASM+WebGL实现的游戏
新的MQTT异步客户端
基于tokio,目前正在召人审核代码
「嵌入式Rust」可用于串行热敏打印机的embedded-hal驱动
encoding_rs: Web兼容字符编码库
这是WHATWG编码标准的高性能实现。被用于Firefox 56版本中,替代了uconv库。
用Rust编写的roguelike游戏发布了
基于wasm和Rust,可以在线玩,也可以下载到Windows、Mac和Linux平台。
在Reddit贴中,还记录了感人的开发故事。
「深度学习」运行时前端TVM支持(预发布)
TVM的Rust绑定。TVM介绍:
有了 TVM,业界与学界开发者们可以快速、轻松地在各个系统(包括手机、嵌入式设备与低功耗芯片)上部署深度学习应用程序,同时无须担心资源与速度的限制。「TVM 作为神经网络和硬件后端之间的共同层,消除了为每类设备或服务器优化各自基础架构的需要。」TVM 项目负责人陈天奇表示,「我们的框架允许开发人员快速、轻松地部署和优化大量硬件设备上的深度学习系统。」
p2p: 支持自定义协议的多路p2p网络库
群友漂流的作品,据说是libp2p的轻量版本。
ferrugo: JVM的Rust实现
工具与库
使用dutree分析磁盘使用情况
该文是dutree的使用教程,dutree是Rust实现的磁盘分析工具。
cargo-expand:查看宏展开结果
serde作者实现的新包,包括声明宏和#[derive]过程宏。
$ cargo expand
是对rustc命令的包装:
$ cargo rustc --profile=check -- -Zunstable-options --pretty=expanded
「小工具」验证代码中内存使用
QADAPT库可以验证代码中何时分配或丢弃内存。作者写了篇文章,以构建自定义内存分配器为例来讲解如何使用QADAPT库提供的debug_assert!验证代码中内存分配情况。
nymic: 一个可以打印类型名字的库
加速并校准Rust的浮点数解析
作者实现了一个库:rust-lexical,比Rust内置的浮点数解析器快4000倍,并且更加正确。而且支持no_std。
structview-rs: 用于将二进制数据转换为更高级的数据结构
structview提供了更安全的API来转换
juniper-from-schema 发布
作者用Juniper的过程中,发现需要Juniper缺少一个关键的东西:可以和客户端共享实际的Graphql架构的文件。虽然可以手工编写,但代码和scheme文件不会实时同步。作者用过程宏实现了可以自动生成scheme的库。
Leave 「Rust每日新闻」本周精选 • 第二十五期 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.