< 返回版块

EAHITechnology 发表于 2021-07-02 19:51

Tags:rust, 日报

Facebook 从 Java 到 Rust | Buck 的未来

Buck 是 Facebook 在 2013 年的Facebook Mobile DevCon上亮相的一个快速的 Android 构建系统。从那时起,它已经扩展到支持用15种以上的语言编写的应用程序,目标平台包括手机、服务器、智能设备和VR头盔等等。不过,随着时间的推移,Buck并没有跟上这种功能和灵活性的增长,没有进行必要的架构改变和改进来管理这种复杂性。随着Facebook内部和外部开发新的功能,发现这导致了巨大的实施复杂性,对核心和语言规则进行修改的挑战越来越大。虽然该团队在近4年前就开始了一项举措,逐步对 Buck 进行一些这样的跨领域的架构改进,但这些改变是非常困难的。 所以,从2020年开始,该团队开始构思,如果从零开始构建 Buck 会怎么样?怎样才能写出一个可以在未来10年或20年中继续扩展的构建系统?以下是Facebook团队的思考

  • https://developers.facebook.com/blog/post/2021/07/01/future-of-buck
  • 翻译from rust社区--张汉东

Rust错误处理项目组正在朝着什么方向努力

rust错误处理项目组要解决的第一个挑战是在reporte错误时很容易丢失上下文,eg:

use std::fmt;

// We have a program that loads a config and expects that
// loading the config will always succeed.
fn main() {
    let _config = load_config()
        .expect("config is always valid and exists");
}

// We have a dummy implementation of load_config which
// always errors, since we're just focusing on diagnostics
// here.
fn load_config() -> Result<(), Error> {
    Err(Error(SourceError))
}

// And we have an error type that just prints "invalid
// config" and has a source error which just prints "config
// file does not exist"
#[derive(Debug)]
struct Error(SourceError);

impl fmt::Display for Error {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str("invalid config")
    }
}

impl std::error::Error for Error {
    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
        Some(&self.0)
    }
}

#[derive(Debug)]
struct SourceError;

impl fmt::Display for SourceError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.write_str("config file does not exist")
    }
}

impl std::error::Error for SourceError {}

我们实际获得的:

$ cargo run
thread 'main' panicked at 'config is always valid and exists: Error(SourceError)', main.rs:4:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

当我们运行它时,我们更希望看到类似这样的输出:

$ cargo run
thread 'main' panicked at 'config is always valid and exists', src/main.rs:4:33

Error:
    0: invalid config
    1: config file does not exist

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

在这个错误消息中,我们可以看到程序因为panic而退出。我们可以看到通过访问的错误链中每个错误找到错误源. 项目组希望这些更改将显着改善Rust错误处理的体验,这使错误报告更加一致和灵活,并让最终的应用程序开发人员定义他们自己的格式化错误报告。错误处理的工具将更紧密地集成到标准库和语言本身中,通过更普遍地对Error特征进行标准化为嵌入式生态系统带来额外的好处

  • https://blog.rust-lang.org/inside-rust/2021/07/01/What-the-error-handling-project-group-is-working-towards.html

在 Rust 中使用'wasmi'轻松托管wasm模块

我们一直在Web浏览器中托管WebAssembly模块,但这并不托管的唯一的方法。我们可以用Rust程序在Web浏览器之外托管wasm模块。博文介绍了如何做到这一点

  • https://blog.knoldus.com/hosting-wasm-modules-in-rust-easily-using-wasmi/

RFC 3107 即将被合并 | 允许枚举类型使用

#[derive(Default)]
enum Option<T> {
    #[default]
    None,
    Some(T),
}
  • https://github.com/rust-lang/rfcs/pull/3107

From 日报小组 北纬27度 侯盛鑫

社区学习交流平台订阅:

Rust.cc 论坛: 支持 rss

微信公众号:Rust 语言中文社区

评论区

写评论

还没有评论

1 共 0 条评论, 1 页