rust_core 1.0.0 版本已发布。根据 r/dartlang subreddit,rust_core 是 Dart 中 Rust 核心库的实现。
译自 Rust Meets Dart With Release of rust_core 1.0.0,作者 Darryl K Taft。
通过调整 Rust 的特性 以符合 Dart 的原则,该实现的目标是在两种语言之间创建无缝且自然的集成。这使开发人员能够使用以前仅限于 Rust 开发人员 的高级工具,从而实现两种语言之间的平滑过渡。
项目目标 指出,“rust_core 努力在每个特性中都带来可靠性和性能。每个特性都经过了严格的测试。超过 500 个有意义的测试套件,并且还在不断增加。”
此外,“对于参与 Dart 编程的 Rust 开发人员,或者对惯用且 安全编程 感兴趣的 Dart 开发人员,我们开发了 ‘rust_core’,一个旨在用 Dart 实现 Rust 核心库的包,”Henry McMahon 在去年 11 月的一篇 博客文章 中写道。
rust_core 项目背后的公司名为 Voyver,这是一家专注于人工智能和教育软件领域的初创公司。McMahon 是 rust_core 团队的主要维护者。
“我们在技术栈中主要使用 Dart 和 Rust,”他告诉 The New Stack。“一个通用的 API 被认为是主要由 Rust 开发人员组成的团队和代码库中缺失的部分。rust_core 为我们解决了这个问题。”
Rust Core 手册
为了支持 1.0.0 版本的发布,该项目还发布了 Rust Core 手册。
Rust Core 手册包含一个常见问题解答,其中第一个问题是:即使我不了解 Rust,为什么要使用 Rust Core?
在回答中,常见问题解答写道:“从语言的角度来看,我们认为 Dart 在几个方面存在不足,而这个包解决了这些问题:
- Dart 使用未经检查的 try/catch 异常。为了可维护性,首选将错误作为值处理,因此使用
Result
类型。 - Dart 有可空类型,但您无法进行特定于空或非空的运算,除非使用大量的
if
语句。Option<T>
通过零运行时成本解决了这个问题,并且您可以轻松地在可空类型之间来回切换,因为它只是T?
的零成本扩展类型。 - Dart 缺少 Rust 的
?
运算符的功能,因此我们在 Dart 中实现了它。 - Dart 缺少内置的
Cell
类型或等效类型(以及OnceCell
/LazyCell
)。 - Dart 的
List
类型是数组/向量联合(它是可增长的或不可增长的)。这在类型层面上不可见,这可能会导致运行时异常,并鼓励在任何地方使用可增长的List
,即使您不需要,这也会降低性能。因此,我们添加了Arr
(数组)。 - Dart 没有切片类型的概念,因此分配子列表是唯一的方法,这效率不高。因此,我们添加了
Slice<T>
。 - Dart 的隔离之间通信是通过端口(
ReceivePort
/SendPort
)进行的,它是无类型的,而且很糟糕,我们通过引入channel
来标准化这种通信,用于类型化的双向隔离通信。 - Dart 的迭代方法对于
Iterable
和Iterator
来说很缺乏(根本没有!只有moveNext()
和current
),而 Rust 有很多有用的方法。因此,我们引入了 Rust 的Iterator
。”
与此同时,Rust 在更广泛的用例中被采用,在这些用例中,建议使用内存安全的编程。