【Rust日报】 2019-09-05
hyper 0.13 alpha 版本发布,支持 async/await
hyper 0.13 alpha 版本发布,它是一个使用 Rust 编写的成熟 HTTP 库,并且是速度最快的 HTTP 库之一,同时因其正确性得到了许多人的认可。
这个 alpha 版本为 std::future::Future
提供了支持。让人兴奋的是,这意味着可以使用即将在 Rust 1.39 版本中稳定的 async/await
语法。
如下是一个使用示例:
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = Client::new();
let resp = client.get("http://httpbin.org/ip".parse()?).await?;
println!("Status: {}", resp.status());
println!("Headers: {:#?}\n", resp.headers());
while let Some(chunk) = resp.body_mut().next().await {
stdout().write_all(&chunk?)?;
}
Ok(())
}
在浏览器之外调试WebAssembly
WebAssembly 很有前景也很有吸引力,但它也带来了新的挑战,例如:如何调试 .wasm
二进制文件。
在 Mozilla,我们一直使用传统工具(如 GDB 和 LLDB )对 .wasm
文件进行源级调试的方法进行原型设计。
如下视频(
演示了使用 Wasmtime 和 LLDB 来调试使用 Rust 编写并最终编译为 WebAssembly 的程序:
Rust 如何优化
<video src="https://youtu.be/PevI_Mn-UUE" controls="controls">
Your browser does not support the video tag.
</video>
Fluvio
Fluvio 是一个云端原生动态数据平台,可在 Kubernetes 上运行。它带来了集中控制,可以在整个组织内连接,转换和分发实时数据。
它具备一下特性:
- 声明式管理 - 独特的数据管理方法。
- Cloud Native - 为 Kubernetes 而建。
- 实时架构 - 完全异步设计,适用于低延迟和高吞吐量环境。
- 灵活部署 - 控制器可以同时管理云和内部部署服务。
- 功能强大的 CLI - 用户友好且易于使用的命令行界面。
- 用 Rust 编写 - 安全,快速,小尺寸:专为高性能分布式系统而构建。
- 与 Kafka 兼容 - 与 Kafka 客户端和服务器 API一起使用。
Fluvio CLI 用于管理 Kafka 主题,以及生成和使用 Kafka 日志。
Rust 如何优化 async/await
(二):程序分析
在第1部分中,我们介绍了如何将 Rust 中的异步 fns 编译为状态机。 我们看到内部编译器实现使用 generator
和 yield
语句来促进这种转换。 我们还看到在内存中布置其中一个状态机的最佳方法是使用类似枚举的表示,类似于以下内容:
enum SumGenerator {
Unresumed { xs: Vec<i32> },
Suspend0 { xs: Vec<i32>, iter0: Iter<'self, i32>, sum: i32 },
Suspend1 { xs: Vec<i32>, iter1: Iter<'self, i32>, sum: i32 },
Returned
}
存储在此枚举中的每个变量都是我们原始函数的局部变量,用于跟踪状态机的内部状态。 这里,关键点是 iter0
和 iter1
不会同时使用,因此我们可以回收 iter0
的字节,当我们的状态机转换到下一阶段时,将它们用于 iter1
。
From 日报小组 @Jancd
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅: