从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛、tg channel、Steemit、GitHub、语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹杂了一些个人的观点。新的一年过去了,Rust每日新闻已经成为了Rust社区群大家每天必看的内容。每周也会精选几篇Rust社区中的动态,和大家分享。分享的内容就不按时间排序了。
2019-03-10
预计下周可以发货。
摘要:
主要是独立出来一个核心(core)工具组作为领导,来解决子工具组的各种协调和规划问题。
本贴记录了Rust语言工作组会议相关跟踪记录,感兴趣的可以关注,还会有讨论的油管视频放出。
该贴作者是做大数据的,使用Spark。Spark因为输入数据的大小变化和GC的原因,导致运行时内存会产生难以预测的波动。他接触了Rust之后产生了这个问题,Rust的类型系统能否减少或消除运行时内存的不确定性?
T1HA是Fast Positive Hash的实现,基于SIMD在avx2平台上可达到40GiB/s的性能。
作者整理这个列表的目的是为了促进0.3的稳定,这些库还在用0.1,如果一直不用0.3,那么futures 0.3就很难更快地稳定。另外也方便社区的开发者为其做贡献。
Rust是工业编程语言的一个重大进步,它重点是弥合了底层系统编程和高级应用程序编程之间的鸿沟。但目前Rust编程的缺点是缺乏一个用于证明Rust程序的有效工具,之前也有很多类似的工作但是不太理想。
该论文展示了Oxide了形式化语义,重新使用类型系统构建了Rust所有权和借用这个核心机制,来推理Rust的行为,并且希望研究人员能将其作为Rust工作的基础。
氧化:Rust的本质(Oxide: The Essence of Rust)
Arxiv平台Rust相关论文整理:
有Rust相关的项目入选,包括TiKV,Servo, Tokio-rs等,可以选择参与贡献。
什么是Deno?
可以简单地把Deno看作是Node.js的替代品。但是Deno旨在实现和浏览器相同的功能。你可以用Deno实现一个浏览器和服务器都可以使用的程序。Deno的前景可以,但是目前还属于早期阶段。
新加坡TenX公司,成长型创业公司,产品是基于云的支付平台,并且支持数字货币。其他消息不详。不过据说新加坡支付行业竞争比较激烈。
Speakeasy编程是一门新语言,该组织建立它的目的是为了解决更通用的问题。
只关注语法,语义,生态系统指导等,不包括解释器或编译器。Speakeasy旨在为每个开发人员提供更轻松,更高效的软件开发;经验丰富的退伍军人,好奇的用户,成人,儿童等。我们的范围包括来自其他语言和学科的课程和概念;我们将把目标放在一个简单,有序的开发者体验上。
Torchbear为Speakeasy编程语言提供了一个简单但功能强大的通用解释器。它可以帮助用户进行Web自动化,嵌入式编程,数据分析,数值计算......其他能想到的。目前,以Lua语言为教学语言。没有编程背景的人可以在15分钟内学习Lua。
(没搞懂这个项目,目测是给普罗大众学习编程和解决问题用的,感觉要上天。)
东京在3月20日,要举办一场友好的Rust比赛+派对。该派对的主题是用tokio(会有一个准备好的tokio helper crate)来编写一款多人游戏,然后用此游戏来相互对抗。
(这个活动有意思)
从评论区的actix作者的回复中得知一个消息:actix-web下个版本将支持Rocket风格的路由注册机制。
作者最近使用了crossbeam-channel 0.3,发现有个issues提出一个问题:channel的send是不是默认panic?,基本上每个.send后面都跟着.unwrap()。
该文作者认为这样的写法是有问题的,并且在文章中罗列了两点原因。同步状况下还没什么问题,但是一旦和future异步一起使用,就会有麻烦。
Criterion是第三方Rust基准测试库,还提供了额外的统计和图表功能。
该系列视频,每一集只有五分钟左右。作者是Pat Shaughnessy,《Ruby原理剖析》的原作者,现在在学习Rust。质量挺好的,大家可以看看,他的特色是图文并茂。
#template_engine
ramhorns是一个实验性类Moustache的模板引擎。该作者(Pairtytech的工程师)写了这篇文章,主要记录他为ramhorns中动态模板提升性能的方案。
在Rust的世界里有很多模板引擎,可以分为静态模板和动态模板。
对于静态站点生成器,必须使用动态模板。而动态模板和Askama的性能存在5~30倍左右的差距。这让作者比较困惑,他在阅读了Askama和其他动态模板引擎的源码之后,发现Askama可以直接使用Rust类型渲染模板,而动态模板则需要一个中间结构表示,比如这种:
#[derive(Serialize)]
struct Post<'a> {
title: &'a str,
content: &'a str,
}
然后通过序列化和HashMap这类数据结构在运行时获取相应的字段和值去渲染模板。这虽然有效,但是这种中间结构付出了沉重的代价。并且对于已经存在内存中的数据结构是完全冗余的。作者罗列了可能出现的开销:
而静态模板引擎完全没有上述的开销。ramhorns如何优化?
使用宏来生成代码,并且使用比较字符串的hash值来代替直接比较字符串。使用了Fnv库。并且在模板预处理中使用相同的Hasher。
ramhorns中没有使用serde,而是使用了Content trait。利用宏,为Post结构生成如下代码:
impl<'a> Content for Post<'a> {
fn render_field(&self, hash: u64, buf: &mut String) {
match hash {
// FNV-1a hash of "title"
0xda31296c0c1b6029 => buf.push_str(&self.title),
// FNV-1a hash of "content"
0x420c75b526b35282 => buf.push_str(&self.content),
// In Mustache fashion, do nothing if the field is not found
_ => {},
}
}
}
这样就避免了在运行时使用HashMap。优化的结果如何?作者和其他的模板引擎做了性能测试,发现ramhorns不仅比其他动态引擎更快,而且还比静态引擎Askama更快(其实Askama也有很大改进空间,Wearte项目就是案例)。作者说,也许再过一段时间,Hugo就不会说自己是「世界上最快的」静态网站生成器了。
Cloudflare公司开源的用于解析Wireshark过滤器语法,并将它们编译器为可执行的IR。该库用于该公司提供的防火墙服务规则解析,所以使用Wireshark的过滤器语法作为DSL。
解析语法一般有三种方式:
但是该库并没有用nom或pest,而是选了第一种解析方式。并且在文章里给出了一些提升解析器性能的经验:
该库已经用于Cloudflare公司的生产项目。
说明: Cloudflare是一家提供CDN、DNS、DDoS 防护和安全服务的公司。该公司曾经声称自己抵挡“在一秒钟内的流量接近于谷歌(Google)的全球搜索引擎在一个小时内的流量”的攻击。
本教程教你如何用Rust提供的wasm工具链开发React App。
该文展示了如何使用bulletproofs进行零知识证明
作者用Rust开发了一款个网球主题的模拟小游戏,耗费了大概24个小时,游戏虽然没完成,但是他拥有了一些经验想要分享给你。涉及ECS模式。
第二篇文章阐述了他在实际应用ECS模式的一些经验,结合他的网球类游戏进行了讲解,值得一看。
该文简单介绍了const fn的用法和注意事项。
基于futures 0.3来实现
在这篇文章中,作者将讨论如何将用C#/C++代码库编写的光线跟踪器移植到Rust,然后利用Rust的一些特性来进行简单的优化。
这篇文章主要是写给那些认为将C#/C++代码移植为Rust代码只需要简单的代码翻译的人。如果这么想的话,就会错过真正了解Rust的机会。
结论:构建setter/getter方法是最安全的
该文作者发现await在future被Drop的时候会出现无法返回的情况,并给出了详细的示例代码。
可以通过命令行查看运行时程序状态,这个用来调试代码很方便了。
wgpu-rs是基于gfx-hal的原生WebGPU实现。
状态:WIP。支持从命令行轻松安全地通过Firefox Send服务上传和下载文件。Firefox Send可以通过安全、私密且受加密的链接发送文件,链接到期后文件将从网上彻底抹除。
persy是一个Rust编写的简单事务存储引擎
Approveapi服务可以通过电子邮件、短信、移动推送请求用户可以实时地对任何内容进行批准确认。
该库基于tokio实现
Double Ratchet(双棘轮)算法是端到端即时通信加密算法之一,允许两个用户安全地进行通信:它为用户提供机密和真实的通道,包括前向保密和未来保密。目前Crait和Whatsapp这两款IM产品就使用该算法加密通讯。