「Rust日报」2019每周精选 • 第八期

in rust •  6 years ago 

前言:

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

2019-03-03


通告两则

「正式介绍」 首届 RustCon Asia大会将在北京举行

#RustConAsia

欢迎大家来面基。

「通告」Rusty 棒球帽团购活动已截止

购买的朋友请关注你的邮件,将在一两周内发货。


官方新闻

Rust 1.33 稳定版发布

1.33的更新简要:

  • Pin API稳定,向async/await迈进了一步
  • 整数类型在match中可以使用范围表达式穷尽了,比如u8类型,可以用0..=255来匹配,不再需要_ => unreachable!()了。
  • if letwhile let支持多模式匹配。
  • const functions中现在可以使用let绑定、赋值、表达式语句以及irrefutable的模式匹配
  • 支持unsafe const fn。
  • 可使用cfg_attr指派多个属性
  • 可以使用#[repr(packed)]指定特殊的对齐方式
  • extern函数在恐慌时的行为默认是Abort,以前这里是未定义行为。
  • LLVM支持的最低版本是6.0
  • 编译器新增了很多平台的编译target支持。

Release Note

「官方」Async/Await状态报告

Read More

「提案」Rust标准库即将更换新的Channel

最近有标准库即将会有两个更新,已经提交了PR:

  • 使用Parking_lot替代互斥锁/读写锁等(Mutex/RwLock/condvar/),性能将会提升: pull/56410
  • HashMap内部会换成基于hashbrown实现的SwissTable,API未变: pull/56241

这篇文章里,提议Rust标准库将Channel更换为crossbeam的Channel,并列举了mpsc的一些缺陷。该文作者是Crossbeam-rs和tokio的贡献者stjepang。

Read More


社区新闻

Rust和npm白皮书

npm Registry实用Rust来解决CPU密集型任务产生的瓶颈问题。在该PDF中阐述了具体的问题以及解决方案。

在寻找解决方案的过程中,NPM团队最先排除了C/CPP/Java。因为在他们的工程思想中,C/Cpp不再是一个合理的选择。主要是担心安全问题。由于需要部署jvm,也排除了Java。然后选择了Go或Rust。

然后团队使用Go花了两天时间重写了授权服务,在这个过程中,该团队对Go的依赖管理失望了。因为NPM本身就是一个包管理工具,他们的工程文化不接受这样的Go。而他们对Rust的评价是这样的:惊人的依赖管理,以及促使你必须思考程序的正确性。用Rust重写服务,确实比用js和Go耗费时间长。当然这段时间也包含了他们的学习成本。并且Rust社区非常友好,有问题可以及时回复。

Rust编写的第一个简单的服务程序用在生产中一年半,没有发出任何的警报。这导致他们团队很快就忘记了该程序的存在。。

用Rust重写Node.js实现的接口之后

作者用Rust重写了Node.js实现的一个小接口,但是流量很大,每秒180个请求。

之前Node.js版本技术栈:

  • koa,框架
  • pino,日志
  • request,转发请求

Rust版本技术栈:

  • actix-web, 框架
  • serde-json, 序列化处理json
  • slog-json,日志
  • reqwest,转发请求

作者使用的是reqwest::async异步请求。Rust版本部署之后,CPU使用率较Node.js版本下降了90%,内存使用量降下了一半。

这些数据更有助于作者说服他的同事们使用Rust,分享出来也可以帮助大家来说服公司使用Rust。

img
img

Reddit 讨论

「系列博客」 Rust与科学计算 Part 0

有博主宣布要写Rust和科学计算的系列文章,本文是该系列的首篇文章。该作者的日常工作是机器学习,他在多次使用Rust进行相关的实验之后发现,Rust语言在这个领域将大有可为,并让他感觉非常激动。

作者反观了Python统治下的机器学习世界,其生态系统爆炸的原因是因为有很多基础库,比如NumPy,SciPy,Pandas等。大多数项目是构建在NumPy和SciPy之上。

如果Rust也拥有这些核心的基础库会怎么样?抱着这样的想法,作者加入了维护ndarray库的队伍中。他贡献了一堆PR之后,诞生了一个独立的crate:ndarray-stats。这个系列的文章,将围绕ndarray来阐述。

在这篇文章中,他着重讲解了Rust中的Vector数组,以及使用Vector来计算线性代数中的点积(scalar product)。并且他和Python做了相应的性能测试比较:

Language    Time (us)   Notes
Python  1720    Same function, using Python’s lists
Python  12.2    NumPy, using np.array - (v * w).sum()
Python  6.1 NumPy, using np.array - v.dot(w)
Rust    1.8 Super naive

Rust的Vector的性能是Python List的近1000倍。是Numpy库的近6、7倍快(有点欺负Python的感觉)。本文的目的只是通过简单的例子介绍一下Rust的所有权,下一篇将进入正式的科学计算内容。

Read More

tokio入选为Google编程之夏的开源项目

Read More

chucklefish不再使用Rust开发该公司新游戏Witchbrook

该公司的这个决定和Rust语言本身并无关系。主要是因为该项目之前的主程kyrenn离职了。并不意味着Rust不能做游戏开发,Rust完全胜任该公司游戏的开发,估计他离职了公司没有找到合适的Rust主程,游戏也比较着急吧。

但是不可否认的是Rust在游戏的生态现在还未成熟,kyrenn说,他自己仍然会用Rust开发游戏,但是他可能会是世界上最慢的游戏开发者,因为你需要做更多的底层的「脏活累活」。

Read More

Firefox Reality浏览器即将登陆Microsoft's HoloLens 2

HoloLens 2是微软混合现实眼镜的第二代。Rust为HoloLens 2提供了更安全的体验。

Read More

Mozilla正在寻找懂UWP的专业人士

希望协助Moziila将Rust带到Hololens平台。目前Firefox Reality浏览器即将登陆Hololens2。

img

「Mozilla」用Rust重写浏览器组件的意义

该文以Quantum CSS为案例,探讨「用Rust重写」对真实世界的影响。

概要: Rust虽然无法捕捉全部的安全漏洞,但是可以消除重大的安全漏洞,并且可以让开发人员专注于程序逻辑的正确性和健壮性。

Read More

wasmer : 性能提升100倍

wasmer是一个服务端wasm解释器。最近发布了0.2.0版本,号称性能提升了100倍。

Read More

「视频」是时候用Rust重写操作系统了吗?

来自去年QCon San Francisco 2018的视频。作者非常看好Rust。

编写桌面版和Web版Roguelike游戏

该作者准备参加Roguelike游戏挑战赛,用Rust实现了一个可跨平台运行的游戏demo。本文是该demo的一个教程。

Pop周报

System76公司(Redox背后的公司)的PopOS周报。这篇报告里说,System76公司的桌面项目都是用Rust实现的。那是不是意味着他们的PopOS中的桌面项目都是Rust实现的呢?popOS看上去还不错。

「视频」Rust Auckland 2019-02-25:Amethyst游戏引擎介绍

skribo:底层文本布局库启动

Xi Editor的作者raphlinus之前写的博文说,文本布局是Rust GUI生态缺失的部分。skribo就是他为了弥补这个缺失的生态而开的新坑,用于全面改进文本处理。


学习资源

来自Rust读者群的分享:Rust生命周期

作者:月泉

针对Rust的生命周期及所有权机制的一些知识写了一篇文章,希望能够帮助群里的各位书友理解这些知识。

期待更多的学习分享。

Read More

「嵌入式Rust」Cortex-M3 入门指南(三):时钟总线与复位时钟控制器

Read More

Rust优化小技巧

Read More

「嵌入式Rust讨论」用什么硬件可以更容易地开始用Rust进行嵌入式开发

有人在Reddit发帖询问此问题,他用的是Arduino,但是使用Cpp和Rust都非常痛苦。即便使用针对Arduino的Rust版本avr也不太稳定,所以他想问问什么硬件更适合入门者?

回复中有人提到,使用基于ARM Cortex-M的硬件,比如STM-32 uC更好,Rust对该硬件体系支持的更好。可以配合discovery book一书学习。 评论中也有其他建议可以看看。

「视频」从零开始使用Rust构建嵌入式传感器节点平台

Rust 胖指针探秘

Read More

如何使用命令行参数

这篇文章帮你揭开Rust命令行参数的神秘面纱。

Read More

用Rust实现一个mod播放器 Part 1

mod是一种音乐格式。

Clojure,Rust,Pony,Erlang和Dart分别如何实现无畏并发

该文分别展示了五种语言的安全并发模型:

  • Clojure: Alternative 并发模型
  • Rust: 所有权机制(ownership)
  • Pony:引用能力(Reference Capabilities),Pony 语言中每种变量的类型都包含了有关如何在 actor 之间分享数据的信息。有点像Rust的借用检查器。
  • Erlang:Actor模型
  • Dart:Actor模型,在Dart里叫Isolates(逻辑上隔离内存)。

Read More

「系列文章」从零开始构建数据库

这系列文章不错,教你用C从头开始构建一个sqlite数据库,感兴趣的可以换成Rust来实现。当然,去年也有人写Rust实现关系数据库的文章,可惜烂尾了。

Read More

Rust build脚本与Meson

该文作者在尝试将Rust和Meson集成。这篇文章记录了他在此过程中使用build.rs的一些经验。

「系列视频」如何用Rust构建属于自己的加密货币 Part 1

「教程」min-sized-rust: 该库演示了如何最小化Rust二进制大小

min-sized-rust

「系列文章」WebAssembly的麻烦 Part 4 : Microwasm

该系列文章主要探讨WebAssembly中的缺陷。

Microwasm是与Wasm兼容的格式,可以被运行时有效地使用,并由LLVM等编译器生成。它目前在Lightbeam(将wasm生成机器码的实验工具)的Microwasm分支中实现。由以下三步生成:

  • Compiler IR->Microwasm;
  • Wasm->Microwasm;
  • Microwasm->Native.

该作者团队还在维护一个wasmtime库,它们引入了Microwasm是为了进一步提升性能,并且为Microwasm编写后端比wasm更加容易。因为Microwasm生成的汇编代码比Wasm直接生成的汇编代码更加简单。

为Rust库公开FFI接口

该文作者之前实现了battery库,该库用到了battery-ffi库,专门封装了一些FFI接口,给主库使用。他在这篇文章中写下了编写FFI的一些注意事项。可以看作是一个FFI最佳实践来学习。

Read More

「教程」min-sized-rust: 该库演示了如何最小化Rust二进制大小

min-sized-rust


项目、工具与库

tweek-rust: Rust实现的Tween动画工具包

Tween动画可以对对象进行缩小,放大,旋转,渐变,位移等操作,用于在游戏或应用中实现一些渐变类动画动作。最早是伴随Flash技术出现的。现在该技术已经用在了web前端和手机App中。

该库中包含了两个示例,可以看看。

McEx: Rust和Elixir共同实现的MineCraft服务器

McEx

WAS: 用于捕获wasm编译器和应用程序内存问题的内存分配器

WAS(不是WASM)是一个简单的WASM内存分配器,旨在捕获WebAssembly编译器和应用程序中的内存问题。

was-not-wasm

使用graphviz可视化Rust代码流程图

Rust编译器可以生成flowgraph IR,然后通过graphviz这个软件就可以生成流程(FlowGraph)图。cargo inspect这个工具把graphviz调用命令集成进去了,新版本可以方便地生成流程图了。

img

Read More

git-req: 轻松查看GitLab和GitHub中的合并请求

Rust实现的命令工具,只需要把git-req设置好环境变量,即可成为git的子命令。

「嵌入式Rust」开发环境指引

Read More

psd: PSD文件解析器

Rust实现的PSD文件解析工具,还有个在线使用wasm的demo。

imagene: 通用图像处理工具

基于image库实现

imagene

battery: 用于收集笔记本电脑电池信息的库

支持Linux、Mac、Windows。通过该库提供的命令,可以在终端查看电池相关的信息。

Read More

swym: 实验性软件事务内存库

可用于实现并发数据结构,其性能和无锁数据结构相差无几。

Read More

cargo-deps: 可视化项目中的依赖库

它是对cargo-graph库的分支,同样是基于graphviz库,可以可视化依赖项的关联。作者号称该库是对cargo-graph的改进。

Forge: Rust实现的一种轻量级的动态语言

支持Rust FFI

higher: Rust实现的类Haskell高阶类型

包括applicative、functor、monad以及type class等。

higher

Atto: Rust实现的一个简单的函数式语言

atto

laminar: 用于多人游戏的半可靠UDP协议实现

该库在UDP的基础上实现了TCP的一些功能。它被用于Amethyst游戏引擎中。

laminar

MIRAI: 来自Facebook实验室的Rust MIR抽象解释器

MIRAI的目标是成为Rust的静态分析工具。

MIRAI

rendy-pbr: 玩具版实时物理渲染器

基于rendy和gfx-hal实现

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @blackanger! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published a post every day of the week

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

Carnival Challenge - Collect badge and win 5 STEEM
Vote for @Steemitboard as a witness and get one more award and increased upvotes!