前言:
从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛、tg channel、Steemit、GitHub、语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹杂了一些个人的观点。新的一年过去了,Rust每日新闻已经成为了Rust社区群大家每天必看的内容。每周也会精选几篇Rust社区中的动态,和大家分享。分享的内容就不按时间排序了。
2019-04-14
通告两则
RustCon Aisa 2019 大会在下周六即将开启
关于大会动态,请关注此帖。包含讲师介绍、议题等信息。
大会期间吃货指南: 土生土长北京饮食达人姜军为你推荐:RustCon 期间的北京特色餐饮
关于门票:
我手头有两份优惠码:IZHKfP6 和 fAp7FK1,给有需要的朋友。但不知道有没有被使用了。如果你已经买了票,但是大会期间有事不能去,可以提前联系日报小组,可以帮你吆喝一嗓子,转购给有需要的人。
RustCC论坛坛主Mike新上线了公众号
以后Rust日报也将同步到该公众号,多了一个推送渠道。
官方新闻
Rust 1.34 稳定版发布
$ rustup update stable
该稳定版本包括如下变动:
- 引入了cargo registries,此功能允许你指定crates.io之外发布的crate,甚至一些闭源的crate。
- 文档测试支持
?
语法 - 过程宏中的自定义属性
#[attr()]
,#[attr[]]
, 和#[attr{}]
可以接受token流。之前的unrestricted_attribute_tokens Features。 - TryFrom和TryInto稳定
- 弃用
fn before_exec
而使用unsafe fn pre_exec
- 稳定了一些标准库API,比如Instant::checked_add/ Instant::checked_sub等
- 支持
extern crate self as foo;
将当前crate的root导出为指定别名 - 支持新的target:
riscv64imac-unknown-none-elf
和riscv64gc-unknown-none-elf
,以及powerpc64-unknown-freebsd
- 可以使用
-C linker-plugin-lto
启用链接器插件LTO优化, 使得rustc将Rust代码编译为LLVM bitcode,从而允许LLVM跨C / C ++ FFI边界执行LTO优化
更多内容请看官方release notes。
Rust异步进展:Future-proof the Futures API的PR已经被合并
该PR解决的问题是:Future::poll
应该获取&Waker还是可以获得&Waker的&Context?
最终答案是:Context
- Future-proof the Futures API :PR 59119
- 相关:Tracking issue for RFC 2592, futures_api
- 相关: [Stabilization] Future APIs #59725
社区新闻
Rust又一次获得StackOverflow程序员最喜欢语言第一
今天SO发布的这个统计很有意思,先来看看Rust,三点:
- 80%以上的开发者想用Rust开发
- SO有65%的开发者是开源贡献活跃者,这其中使用Rust、WebAssembly和Elixir的人贡献速率最高
- Rust的薪资较去年增高了(去年65k)
继续SO统计。图1是SO统计各大语言生态的原图,上面没有Rust。但其实,以我运营Rust日报近两年的观察,Rust的生态目前确实比不上在各个领域已经成熟的语言,但是它正在底层默默地在这些领域构建自己的生态。如图2。用群友的话来说:Rust正在聚沙成塔。
另外,SO统计上关于区块链的统计也很有意思。
「讨论」如何解读StackOverflow上面Rust连续四年成为最受开发者喜欢语言的这一事实?
该贴作者对这个结果做出了以下可能的解释:
- 跨越了学习曲线的人真的都喜欢Rust
- 开发人员喜欢新的技术,即使他们还没了解Rust,但他们认为应该重视它。(这个角度来看的话,排名第二的Python看上去就比较诡异)
- Rust社区是一个非常友好的社区
- Rust社区营销的比较好
- 有许多C++开发者因为Rust的安全性而选择它
到底是什么原因呢?这个话题下评论区讨论比较激烈。
(我喜欢Rust,是因为Rust这门语言恰好符合我对理想编程语言的某些预期。你是什么原因喜欢Rust呢?虽然目前还没有太多Rust的职位招聘,但实际上暗流涌动,有很多公司都已或多或少地在生产中使用了Rust,也就是说,Rust正在聚沙成塔)
偶尔也看到一条额外信息:Apple也在使用Rust构建分布式文件系统,据说在在西雅图举行过一次小型演讲,试图招募相关人才,在网上还找不到相关信息。
「远程工作」Rust软件工程师
关键字:远程(美国境内)、Rust、容器服务、创业
「通告」image的GitHub仓库现已迁移到新的image-rs组织
image是纯Rust实现的图像库,这次迁移主要是遵循以下计划:
准备邀请一些人可以加入组织做贡献
准备建立两个团队:发布团队(拥有crates.io的访问权限)和开发团队(拥有仓库代码的写入权限)。这样做是为了安全性。
移动其他相关的库到统一的组织下
「讨论」为什么Deno的基准测试中Hyper的最大延迟如此高?
max latency >1000ms
目前讨论还未有结果,可以持续关注。
Deno作者提交了一个PR,使用O3优化,目测也未有改善。后续也有热心人提交了新的补丁,还在尝试。
一封写给Rust宏的情书
本文不是宏教程,作者写这篇文章的目的就是为了让还没有使用过Rust宏的人,早点尝试一下宏。(真香预警)
作者比较了Rust和其他语言(C/C++/Java)中的元编程,摘要:
- C宏和Cpp模板元编程。很容易引入难以发现的错误,并且会扰乱编译时间,在构建中引入不必要的复杂性。你是否见过错误使用模板而引发的编译器错误呢?
- Java注解。Java的注解功能很强大,可以在编译时使用,也可以在运行时执行,既可以用于代码生成,又可以拿来反射。Java中最受欢迎的Spring框架大量使用Java注解。但正因为如此,Java的注解功能导致你写的代码可能超越语言自身的语义,而更像是另外一种语言。而且通过注解实现的代码,调试起来也非常痛苦。
那么Rust的宏是不是完全避免了上面的问题呢?并不是百分百的避免,但是Rust已经努力避免了常见的问题,并且可以发挥出Rust语言自身的优势。作者介绍了声明宏和过程宏的一些优势,并且在文章底部列出了一些学习宏的资料。
使用Rust开发跨平台组件的新策略
Mozilla工程师最新分享,将Rust实现的核心业务逻辑封装到一个中间层,然后通过新的共享策略,达到Web、iOS、Android三端共享。实施这个策略遇到的一个问题就是如何安全地使用FFI,并且还能与Rust的所有权良好地配合。因此该团队写了一个ffi-support库来帮助达成此目的。
该库最初的实现方案是通过序列化为JSON字符串在FFI中传递。但是缺点是,JSON序列化和反序列化会很慢。最重要的问题是,Java中字符串编码是UTF-16-ish。在Kotlin中,必须反序列化每个数据结构,这个过程会可能会发生异常。最严重的问题是,没有返回JSON字符串,而是某个C指针,忘记更新Kotlin中或者ObjectiveC中的数据结构,导致严重的内存问题。
值得庆幸的是,团队发现了使用Protocol BufferV2替代JSON,可以解决上面的问题。在Rust中直接使用prost库,可以通过Rust的宏生成非常干净的结构。而且,PB比JSON的性能高。
Atom 1.36选用了ripgrep
使用Ripgrep极大地提升了Atom项目内查找的性能,在文件量很大的情况下尤为明显。不过需要专门通过设置使用Rip Grep
选项手动打开。
Mozilla 準備跟一些"合格"的Linux使用者測試 WebRender
現在Linux使用者可以手動開啟WebRender了
這是一個實驗特性
他可以開啟rust寫的gpu渲染程序
給"合格"的Linux設備使用
ndarray-stats v0.2 发布
此库为 ndarray 的 ArrayBase
类型提供了统计方法。
到目前为止,Scipy.stats (Python)
和 StatsBase.jl (Julia)
中的大部分统计特性都已经移植过来了。用 Rust 做机器学习的同学是不是可以上手了?
本库作者还邀请大家一起来讨论这个库的未来走向,好机会。
学习资源
如何为TiKV做贡献
Rust编程之道 关于闭包和所有权相关规则
读者frostRed和Yim先后总结出来的规则,大家可以参考讨论。
在随书源码选择「精选」label也可看到。
Rust和Actix-web基本Web编程
使用Actix Web进行人脸检测
这是上次日报里报道过「使用tensorflow与rust人脸检测」文章作者的续篇。在这篇内容里,作者介绍了如何将上一篇文章的成果通过HTTP API来提供。并且作者使用了actix-web = "1.0.0-alpha.4"
版本。在mtcnn库的actix-web分支里可以看到具体实现。
这两篇文章是实践性很强的文章,建议大家跟着玩玩。
「系列博客」 Rust与科学计算 Part 2: 数组
该作者的日常工作是机器学习,他在多次使用Rust进行相关的实验之后发现,Rust语言在这个领域将大有可为,并让他感觉非常激动。作者反观了Python统治下的机器学习世界,其生态系统爆炸的原因是因为有很多基础库,比如NumPy,SciPy,Pandas等。大多数项目是构建在NumPy和SciPy之上。如果Rust也拥有这些核心的基础库会怎么样?抱着这样的想法,作者加入了维护ndarray库的队伍中。他贡献了一堆PR之后,诞生了一个独立的crate:ndarray-stats。这个系列的文章,将围绕ndarray来阐述。
「嵌入式Rust」一个TM1637的demo
来自Rust国内社区 @洛佳。查看该Demo项目Readme,有详细的内容说明。
crust - 一个Rust实现的简单C编译器
从头开始写 C 编译器,很好的学习教程。谁在学习编译原理,可以参考参考。
rust-wasi-tutorial
帅气的 wasi 教程 的 rust 实现版本。跟进最新的 wasi 的同学不能错过。
使用actix-web实现魔术登录链接的示例
“魔术链接(Magic links)”是每次需要登录时,Web应用程序都会生成一个新的,唯一的密码,而不是单个长期存在的密码。 然后,Web应用程序会向用户发送一封电子邮件或一条带有登录链接的短信。 此链接包含此唯一密码:短暂共享密钥。
该demo是使用actix-web 0.7。
使用Tokio实现自定义协议(i3 IPC)
该文作者介绍了使用tokio实现i3wm(i3窗口管理器)的IPC接口
「系列文章」Python开发者的Rust教程 Part 2: 所有权和借用
electron-wasm-rust-example: 一个最小化的Electron + WebAssembly (WASM) + 🦀 Rust的示例
「视频」深入WASM和WASI
如何在Rust测试中Mock时间
「系列文章」JavaScript解析和求值
该文作者在之前分享了如何使用Rust实现一个基于状态机的高性能的JS词法分析器。这之后,又开始写系列文章分享他的心得。
- Javascript evaluator part 1: Lexing
- Javascript evaluator part 2: Parser and Basic evaluator
- javascript-es9-parser
使用Sonr构建pub/sub服务器
sonr建立在mio之上的网络库,相比于Tokio来说,更加轻量。
项目、工具与库
BlockLang Installer 是一款专用于部署 Spring boot 项目的自动化安装工具
来自Rust国内社区 @xiaohulu 投稿。
源代码托管在 https://github.com/blocklang/blocklang-installer
BlockLang Installer 安装在应用服务器上,支持:
下载 JDK 和 Spring boot Jar 文件;
安装 JDK;
启动 Spring boot Jar。
功能示意图:
rust-notifica: Rust实现的跨平台系统通知工具
hunter - 终端下的文件浏览器
看起来操作性很高,比linux之前的MC好用多了。本工具受 ranger 和 emacs 启发。
lopdf - 用于操作PDF文档的库
flashback - 将adobe的SWF文件转换为SVG或WASM等格式
转换后,就不需要运行模拟器来执行swf了。开坑不久,可以参与。
simdjson-rs - simdjson库的Rust实现
simdjson 这个库这段时间非常火,因为它确实很快啊,用 SIMD 指令集来加速。这个库是 rust 的实现版本,不是包装版本。
fluid - 一个单元测试库 发布了0.4版本
写人类可读的单元测试的框架。看起来非常不错。
Fact
#[fact]
fn cerberus_has_3_heads() {
number_of_faces("Cerberus").should().be_equal_to(3);
}
Theory
#[theory]
#[case("Cerberus", 3)]
#[case("Hydra", 7)]
#[case("Janus", 2)]
#[case("Normal guy", 1)]
fn each_creature_has_a_correct_number_of_faces(name: &str, nbr_faces: u8) {
number_of_faces(name).should().be_equal_to(nbr_faces);
}
nom-peg: 基于nom实现的PEG解析器生成器工具
和pest类似,但它是基于nom实现的。
Rust实现的IRC机器人
chit: 可在终端查询crate信息的工具
$ cargo install chit
$ chit serde
wasmer: 可执行wasm二进制文件的Python库
ppcp - 带进度条的文件复制工具
cp 的替代品啊。什么都不说了,炫酷上图吧
neat-flappy-bird
NEAT算法玩Flappy Bird(像素鸟) ,群友贡献,棒棒哒!JiaYe(planet0104)
Congratulations @blackanger! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
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!
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit