BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Rust 1.6为OS和嵌入式开发带来稳定支持

| 作者 Sergio De Simone 关注 17 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2016年1月28日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

与他们的发布模型一致,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的说法,对于想要构建一个库,但不使用libstdno_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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT