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(())
}
Read more
WebAssembly 很有前景也很有吸引力,但它也带来了新的挑战,例如:如何调试 .wasm
二进制文件。
在 Mozilla,我们一直使用传统工具(如 GDB 和 LLDB )对 .wasm
文件进行源级调试的方法进行原型设计。
如下视频(https://youtu.be/PevI_Mn-UUE) 演示了使用 Wasmtime 和 LLDB 来调试使用 Rust 编写并最终编译为 WebAssembly 的程序:
Read more
Fluvio 是一个云端原生动态数据平台,可在 Kubernetes 上运行。它带来了集中控制,可以在整个组织内连接,转换和分发实时数据。
它具备一下特性:
了解更多
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
。