与他们的发布模型一致,Rust 开发团队已于2016 年1 月6 日宣布了第一个Rust 版本。Rust 1.6 的最大特点是实现了 libcore
的稳定,其目标是让使用稳定的 Rust 进行 OS 和嵌入式开发成为可能。
libcore
提供了一个底层的、平台无关的基础,Rust 标准库libstd
就是基于它构建像内存管理、I/O 和并发等高级功能。因此,libcore
是最底层,OS 和嵌入式软件开发人员常常更喜欢以它为基础构建应用程序。这样说来,libcore
的稳定为各种底层软件提供了稳固的基础。
Rust 核心团队成员 Steve Klabnik 告诉 InfoQ,其重要性不可低估:
为了可以基于稳定的 Rust 进行 OS/ 嵌入式开发,这是重要的一步。因此,这很重要,但那仍然只是第一步。我确实认为,表明 Rust 是最底层软件开发的一个可行选项,对于 Rust 未来的发展而言很重要。
然而,需要特别注意,libcore
目前仅支持库的开发,而尚不完全支持应用程序的开发。Klabnik 向 InfoQ 解释说,libcore
之所以不完全支持应用程序是因为还有一些它所需要的“lang items”未定义。在 Rust 中,“lang items”可以理解为链接器符号,可以用作钩入语言本身的“钩子”。这会使比如说在库中实现部分 Rust 功能成为可能,而不是在语言本身。按照 Klabnik 的说法,对于想要构建一个库,但不使用libstd
(no_std
)的开发人员来说,这问题不大。实际上,他表示:
我们可能不会将这两个 [lang items] 加入
libcore
本身。它们是专为用户以适合自己的方式进行实现而设计的。如果你试图构建一个用到了no_std
的可执行程序,那么你必须自己定义这两个 lang items。
此外,Klabnik 还提供了一个源文件的链接,他在其中展示了如何定义那些缺失的符号:
#[lang = "eh_personality"] extern "C" fn eh_personality() { } #[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} } #[lang = "begin_unwind"] pub extern "C" fn begin_unwind() { }
除实现了libcore
的稳定外,Rust 1.6 还对库函数和语言特性进行了许多小的优化,最显著的是drain
函数族(用于移除集合中的元素,同时保留它们的后备内存)和新的From
类型转换。要了解完整的变更列表,可以查看发布说明。
查看英文原文: Rust 1.6 Brings Stable Support for OS and Embedded Development
评论