ChaosBot avatar

【Rust日报】 2019-04-05

blackanger

Published: 05 Apr 2019 › Updated: 05 Apr 2019【Rust日报】 2019-04-05

【Rust日报】 2019-04-05

「系列文章」审阅Sled源码 Part I

#CodeReview #sled

Sled项目是一个用Rust编写的嵌入式数据库。该文作者在日程工作中用到了它,为了掌握它的工作原理,准备开始写这个系列的博客。也可以通过学习此文,掌握一些阅读开源项目源码的技巧或其他启示,比如:

  • 先找你擅长领域的项目去阅读,事半功倍。
  • 从整体上先把握代码组织结构、依赖库,从所获得的信息中去推测更多信息。
  • 携带某个主要的问题去看源码是如何实现的。

该文作者还有一个完整的review LevelDB的系列文章:reviewing-leveldb


Smithy: 一个Rust实现的WebAssembly框架

#wasm #smithy

状态:0.0.2 Alpha版本。


案例:使用Rust和Lucet

#wasm #lucet

Lucet是一个本地WASM编译器和运行时。基于Lucet运行时,Rust编译为wasm32-unknown-wasi target就可以创建一个运行于服务端的wasm程序。目前wasm32-unknown-wasi只支持Rust Nightly(2019-04-01版本确定可用)


Gloo更新:Onion层、计时器和事件

#Gloo

Gloo是一个用Rust和Wasm构建快速可靠的Web应用程序和库的模块化工具包,于两周前开始构建。最新的进展如下:

  • 增加了「“洋葱”分层API」。

也就是说,API的构建就像是洋葱一样,分好几个抽象层。他们希望在raw-sys库之上构建一层中级的API,然后在中级API层再构建一层高级的面向用户的API。并且每一层都是公开暴露接口并可复用。这样设计是为了最高限度地提高大型生态系统的可重用性、通用性等。

其中核心层API是构建在wasm-bindgen,js-sys和web-sys之上的原始绑定。中间层是回调(callback)层,比如gloo_timers就包含在这一层。高级层是Futures和Steams层,当然现在是futures 0.1,等异步稳定以后再切换到最新的。未来也有可能增加更高的抽象层。比如某些Web API或是为了生态系统而集成的层。

  • 另一个正在进行的设计是如何制作事件目标和监听器层。

Read More


深入字体回退(Font Fallback)机制

#font #xi_editor

XiEditor作者新博文,深入介绍了字体回退机制。

在操作系统介面和网页等现代排版环境下,如果指定用字体 A 来显示某字符 x 但该字体并不支持这个字符(甚至该字体当前不可用),排版引擎通常不会直接放弃,它会根据一个预先记好的列表来尝试寻找能显示字符 x 的字体,如果找到字体 B 能行,那就用字体 B 来显示字符 x。字体 B 就是当前这个情况的 fallback。


json_in_type: 快速JSON编码库

#json

特点:

  • 编译时执行更多编码操作,运行时更少。
  • 在类型中编码JSON对象的结构。
  • 性能据说比serde的json!高出一个数量级。

比如:


// JSON String
 r#"{"void":null,"list":[42,true],"hello":"world"}"#,

//  Type
InlinedJSONObjectEntry<
    (),
    InlinedJSONObjectEntry<
        JSONListElem< u8, JSONListElem<JSONtrue, JSONListEnd> >
    >,
    JSONObjectEntry< &str, &str, JSONObjectEnd>
>

json_in_type


「视频」纯Rust实现SCTP以便支持WebRTC数据通道

#webrtc #sctp

SCTP: Stream Control Transport Protocol


编译器性能和LLVM

#llvm #compiler

本文作者以他自己实现的Cone编译器为案例深度探索了编译器架构和LLVM的性能,并比较全面地阐述了LLVM的性能概况。

  • 编译器架构。Cone选择了C,而非Rust,是因为作者对性能更关心一些,他认为C更好。还介绍了一些前端架构的优化原则。
  • LLVM后端性能。作者测量了LLVM后端各个编译阶段的性能,顺带阐述了LLVM的构建流程。

LLVM构建流程:

  • Setup。初始化有关目标计算机,数据布局和全局上下文的信息。这个阶段的执行时间是固定的,不会随着源程序的增大而变长。
  • Gen LLVM IR。Cone和LLVM的混合阶段,作者的Cone编译器会生成LLVM IR,就像Rust一样。同时作者也实现了一个Cone IR,类似于Rust的MIR。但Cone可能比Rust更快一些,因为没有Rust这么多分析。
  • 验证LLVM IR。这个过程是对LLVM IR的有效语义进行分析。确保IR的格式正确、通过类型检查,其算法复杂度为O(n),与LLVM IR节点的数量成正比。
  • 优化LLVM IR。将执行6次LLVM优化:将栈变量转换为寄存器、函数内联、窥孔优化(peephole optimization)、位操作优化(bit twiddling)、公共子表达式消除和控制流程简化。一些优化过程可能是O(n),但某些复杂的可能是指数级的。
  • 生成目标,并将其存储于磁盘。此阶段占整个LLVM运行时间的73%。

小百科

窥孔优化可以在四个方面寻找优化机会:冗余指令删除,包括冗余的load和store指令以及死代码(不会执行的代码);控制流优化;强度削弱;利用特有指令。

作者也从LLVM架构上探讨了LLVM缓慢的原因。并且作者还打算继续研究优化LLVM的方案以及替代LLVM的方案。更多详细请阅读原文。


Wafer: 并行三维FDTD 薛定谔(Schrödinger)方程求解器

#scientifc_computing #quantum_mechines

科学计算库


像素级Ferris动态表情

#gif

Read More
pixelferris.gif


mdbook-bookimport:支持从其他文件将代码或文本导入到mdbook中

#mdbook


rust-slothgl: 命令行3D软件光栅化工具

#tui #termion

由termion,tobj和nalgebra制作的独一无二的命令行3D软件光栅化工具。目前支持没有纹理或材质的OBJ文件格式。

preview.gif


UFO: 用于无人机/无人机/四轴飞行器/RC航模的Rust库

#Drone #UAV #Quadcopter #RCPlane

状态:WIP

ufo


orderly: 可提供有序、受控的一组进程

#erlang #supervisor #process

该库从erlang supervisor树汲取灵感,它提供了构建监督进程树的机制,当进程重启率超过指定限制时,失败可以传播。旨在为服务/容器等提供稳定支持。


Witnet Foundation: Rust区块链工程师招聘

#job

新加坡公司,非远程。Witnet-将智能合约连接到任何外部数据源。


minitt-rs: Mini-TT的Rust实现

#lang #learning

Mini-TT是一个简单的依赖类型语言。minitt-rs是它的Rust实现,并且还提供了一个REPL。 作者是ice1000Hive account@ice1000


「官方」当前Async已经修复的问题

#async

在最近的一条已merge的PR中,顺便列出了所有已被修复的async中已知的生命周期问题。

rust/pull/59286


日报订阅地址:

Leave 【Rust日报】 2019-04-05 to:

Written by

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.

More Posts From ChaosBot