「Rust每日新闻」本周精选 • 第二十五期

前言:

从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛tg channelSteemitGitHub语雀订阅都开通了Rust每日新闻,分享我每天的见闻,偶尔也夹杂了一些个人的观点。大半年过去了,Rust每日新闻已经成为了Rust社区群大家每天必看的内容。在这个知乎专栏里,每周会精选几篇Rust社区中的动态,和大家分享。分享的内容就不按时间排序了。

2018-12-23


「付费阅读」系列


官方新闻

通告Rust 1.31.1发布

修复了一些问题。

Read More

「官方」Rust 2018中的过程宏

官方博客介绍了Rust 2018 edition中过程宏的支持,重点介绍了过程宏基于TokenStream的工作机制,值得一阅。

Read More

Withoutboats眼中的Rust 2019:组织债务

Read More

Rust最新动态摘要

#rust

审核中的PR:

已合并的PR:

「官方」Rust 2018 edition 工具集

#devtool

本文介绍了Rust 2018 edition包含的工具集

  • Rustfix
  • Clippy
  • Rustfmt
  • IDE support

未来:

  • 改进LLDB和GDB的Rust调试支持
  • 完善RLS
  • 让Cargo更强大
  • Rustdoc改进

Read More


社区新闻

LeetCode现在已支持Rust

中国版和美国版都支持了,另外了解到的消息是,目前是基于Rust stable 1.31版,而且还会持续跟进Rust Stable版本。在未来会逐渐加入常用的crate,这个看使用者反馈来持续改进。

刷Leetcode Rust代码的碰到问题可以加QQ群反馈。qq群号: 950323896,进群以后可以加微信群,直接向官方反馈问题。

Leetcode中国

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来推动

大家也不要太亦可赛艇,他只是先分享了计划,还未动工。不过已经有了代码仓库:

Read More

「嵌入式Rust」Rust对Arduino支持进展调查

因为Arduino使用的是AVR微控制器,但Rust目前还未支持AVR。但Rust嵌入式开发组已经有计划支持AVR。

感兴趣的朋友可以关注此issues: AVR support

目前也有一个avr-project GitHub项目组独立fork了Rust,提供了对AVR的支持。在官方Rust未支持AVR之前,可以使用这个,看上去还非常活跃。

avr-rust

「访谈」Josh Triplett访谈

Josh Triplett是一个开源软件贡活跃献者,他最近正和另外一个匿名资助者,准备向非盈利性开源组织Conservancy捐赠9万美元,用于继续推动开源软件的发展。这是对他的采访。

采访中,他提到Rust是他今年在开源社区看到的最激动人心的项目。他说:Rust给了我对计算未来的巨大希望。

也许Conservancy在拿到这笔捐赠后,可能帮助Rust完成组织治理的工作。(猜想)

Read More

Warp 0.1.10发布

Wary是另一个Rust Web框架,由Hyper作者开发。 新版本的功能简要:

  • TLS支持
  • CORS
  • Websocket检测助手

依然计划和tower-web进行合并,但下一步主要是完善service trait。将来可以通过Service方便地添加tower式中间件。

(那官方Tide框架的中间件协议呢?也许tower式中间件协议在官方中间件协议稳定以后也会支持吧)

Read More

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。

Read More

「嵌入式Rust」实时消息框架RTFM发布0.4版

嵌入式工作组的老大japaric发布的库,用于构建并发的实时系统,貌似基于RTFM语言。

RTFM语言旨在促进并发编程或嵌入式实时软件的开发。

www.rtfm-lang.org

Read More

如何成为一个超级的Rust开发者

这是一个「真香」的故事。

作者在去年看到Rust语言的时候,心想:"呵呵,继续吹,继续炒。呵呵,我用C++照样可以完成同样的事,而且还拥有更多的控制权"。

然而,今天这位作者写下了这篇博文,他说:“我之前的想法真是大错特错,错到底了!,当我潜下心来研究Rust,我发现,它是一门经过深思熟虑的语言,它的工作方式有别于我所知道的一切。”

他变成了Rust传道者。

Read More

crates.io可视化报告

截止2018年11月,已经达到2w个crates,但很多crate版本发布都小于6次release版本,生态系统依然很年轻。另外一些crate有100多个发布版本,有很多crate都是零依赖,但有3000个crate都依赖serde,所以,serde当之无愧是最流行的crate。

img
img
img
img
img

Read More


学习资源

Rust Quiz解读已更新到Quiz 21

去专栏 Read More

「嵌入式Rust」Cortex-M3 入门指南(二):寄存器与 GPIO

Read More

Serverless HTTP

该文作者探索aws lambda平台的无服务器HTTP应用,并编写了一个crate,叫做lando,它以http crate为核心接口,以lambda为部署目标,来部署API网关。本文就是对lando的介绍。

「Rust扩展Python案例」快速JSON解析库

基于PyO3库

orjson

解析工具选择之书

有人写了一本书,罗列了现在的解析工具,比如nom、combine、pest等,提供了一些文档和示例,帮助你选择适合使用场景的解析工具。目测还在完善中。

Read More

「系列文章」Rust vs Swift

作者从2015年开始写这一系列博客,直到昨天才发布了一个整理页面。感兴趣可以看看。

Read More

rust-derivative: 提供了替代derive属性的宏

「Slides」魅力wasm-bindgen

Read More


项目

下沙:Rust+WASM+WebGL实现的游戏

新的MQTT异步客户端

基于tokio,目前正在召人审核代码

「嵌入式Rust」可用于串行热敏打印机的embedded-hal驱动

thermal_printer

encoding_rs: Web兼容字符编码库

这是WHATWG编码标准的高性能实现。被用于Firefox 56版本中,替代了uconv库。

用Rust编写的roguelike游戏发布了

基于wasm和Rust,可以在线玩,也可以下载到Windows、Mac和Linux平台。
在Reddit贴中,还记录了感人的开发故事。

「深度学习」运行时前端TVM支持(预发布)

TVM的Rust绑定。TVM介绍:

有了 TVM,业界与学界开发者们可以快速、轻松地在各个系统(包括手机、嵌入式设备与低功耗芯片)上部署深度学习应用程序,同时无须担心资源与速度的限制。「TVM 作为神经网络和硬件后端之间的共同层,消除了为每类设备或服务器优化各自基础架构的需要。」TVM 项目负责人陈天奇表示,「我们的框架允许开发人员快速、轻松地部署和优化大量硬件设备上的深度学习系统。」

tvm-rust

p2p: 支持自定义协议的多路p2p网络库

群友漂流的作品,据说是libp2p的轻量版本。

p2p

ferrugo: JVM的Rust实现

ferrugo


工具与库

使用dutree分析磁盘使用情况

该文是dutree的使用教程,dutree是Rust实现的磁盘分析工具。

cargo-expand:查看宏展开结果

serde作者实现的新包,包括声明宏和#[derive]过程宏。

$ cargo expand

是对rustc命令的包装:

$ cargo rustc --profile=check -- -Zunstable-options --pretty=expanded

cargo-expand

「小工具」验证代码中内存使用

QADAPT库可以验证代码中何时分配或丢弃内存。作者写了篇文章,以构建自定义内存分配器为例来讲解如何使用QADAPT库提供的debug_assert!验证代码中内存分配情况。

nymic: 一个可以打印类型名字的库

nymic

加速并校准Rust的浮点数解析

作者实现了一个库:rust-lexical,比Rust内置的浮点数解析器快4000倍,并且更加正确。而且支持no_std。

Read More

structview-rs: 用于将二进制数据转换为更高级的数据结构

structview提供了更安全的API来转换

structview-rs

juniper-from-schema 发布

作者用Juniper的过程中,发现需要Juniper缺少一个关键的东西:可以和客户端共享实际的Graphql架构的文件。虽然可以手工编写,但代码和scheme文件不会实时同步。作者用过程宏实现了可以自动生成scheme的库。

juniper-from-schema

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center