Rust 的 2016 年规划,1.0 之后会如何发展?

简介:

这周以来 Rust1.0 发布已经三个月了。随着开始向着下一个 1.0 版本迈进,我们很乐意地回顾 1.0 版本,并且讨论一下明年 Rust 的发展。

关于1.0版本

Rust 1.0 专注于稳定性,社区性和明确性。

稳定性,我们已经在先前的说明文档中对于发布渠道和稳定化过程作了不少的讨论。

社区性 这已经成为 Rust 语言的强项之一。 但在 1.0 版本发布之前,我们介绍并改善了 RFC 过程,最后与子团队管理 RFC 过程的每个特别的部分。社区规模的讨论对于高品质 1.0 版本的发布必不可少。

在 1.0版 本之前为了达到明确性而所作出的所有这些改善意味着:
  1. 不带有垃圾回收机制的内存安全
  2. 不存在数据竞争的并发性
  3. 不需要开销的提取
  4. 不存在停滞的稳定性

总之,Rust 是让人兴奋的,因为它是允许肆意发挥而没有任何担心,并且在你从来没接触过的环境下做这些。放下 Ruby 或是 python 这些语言,让你第一次进军系统编程。

这是 Rust 1.0,但是下一个版本将会带来什么?

我们从这里走向哪儿

在和这些核心团队、早期的生产用户和广泛的社区的多次讨论之后,我们已经认识到了许多能提高的地方,并将在下一步做出一些修改,在以下三个方面:

在基础方面加倍;

在关键特征反面零缺陷;

扩大使用 Rust 的地方。

让我们对这三个类别中庞大的计划拭目以待。

加倍下注: 基础设施投资

Crater

对于 Rust,基础的稳定性承诺是能在版本间“轻而易举地”升级。为了兑现这个承诺,我们需要检测引发代码在编译中停止工作的 bug。自然地,编译器有它自己的大型测试套件,但是那仅仅是代码中的小片段,它就在那,“自然而然地存在在那”。Crater 是一个工具,目标是通过 crates.io 结束测试编译所有能找到的包,并让我们更加清楚地了解代码停止编译都是否是在最近发生的。

Crater 很快就变成为一个不可或缺的工具。我们经常比较最近的稳定版本和其他版本,并且我们使用crater 去检查进行中的分支和评估改变带来的影响。

有趣地是,我们常常发现代码停止编译的时候,不是因为在编译中存在 bug,而是因为我们修复了一个bug,代码对老的行为产生了依赖。在这种情况下,使用 crater 能帮助我们改进体验,它会建议我们在警告中逐步缓慢地修复。

在未来的一年,我们计划采用以下方式去改进 crater:

将范围扩展到 Linux 之外的其他平台,并可以在那些平台上运行测试套件和类库。

让使用更方便: 放弃 @crater: test 注释,试验 PR。

制作一个版本工具,让它的作者可以看到他们改的代码对下游代码产生的影响。 

除了crates.io,可以从其他地方取得代码。

增量编译

Rust 原本就有一个“crate-wide”编译模型。这意味着 Rust 编译器能一次性读取在你的 crate 中的所有源文件。先进行语法检查然后交由 LLVM 进行优化。这种方法对进行深度优化是有好处的,因为它能够让 LLVM 完全进入整个代码集,使得内联更强,分析更精确等等。然而这可能意味着这种转变很低:甚至只要你编辑了一个函数,我们都会重新对所有代码进行编译。当项目变得庞大时,这就会造成负担。

增量编译的目标是,利用 Rust 编译器具备立即保存副产品并使用这些副产品的机制来改变这一不利的状况。用这种方法,当你在调试一个问题或者调整代码路径时,你只要重新编译你改变了的部分,这样将使得“编辑-编译-测试”循环要快得多。

这个工程的一部分在于重构这个编译器以介绍一个新的中间代表性编译器,我们称之为 MIR。MIR 是一个更为简单的和从 Rust 更为复杂特性的代码中凝练出的更底层的编译器,这使得这个编译器的剩余部分更加简单。这是语言改变的重要使能器,如同非词汇寿命期那样(下一部分会谈到)。

IDE整合

一流 IDE 的支持能使得 Rust 更加富有成效。直到现在开拓型的工程如 Racer,Visual Rust 和 Rust DT 都在没有编译器的支持下进行大部分的工作。我们计划延展这个编译器以请允许和 IDE 及其它工具更深层次的整合,这个计划起初关注两个 IDE,并从那里发展起来。

聚焦: 缩小主要功能的差距


Specialization

按照Stroustrup说的,零成本(zero-cost)的抽象理念可以拆解成两个目标:

• 不会用到的,就不需要为其付出。

•需要用到的,务必做到最好。


Rust 1.0 基本上达到了第一个目标,包括语言功能和标准库两方面。但是还没有完全实现第二个目标。例如下面的trait:

pub trait Extend<A> {
    fn extend<T>(&mut self, iterable: T) where T: IntoIterator<Item=A>;
}

Extend 这个trait很好的对任意类型的迭代器插入一个 collection 进行了抽象。不过对于目前的trait来说,这也意味着每个 collection 只能提供一种可以支持所有迭代器类型的实现,也就是循环的调用.next()。其实有时你可能会有更好的办法,例如只需要调用 memcpy。

为了弥补这个差距,我们提出了一个 specialization,允许你提供多重的,叠加的trait实现,只要一个比另一个更具体。除了为 Rust 提供更完备的零成本抽象化需要的工具之外,specialization 还包含了代码重用的改进。详情参考这个 the RFC。

Borrow checker 的改进


某种意义 上borrow checker 是 Rust 的核心;它是编译器的一部分,通过截获“访问已释放内存”或者类似的 bug,能够让我们在不用垃圾收集的情况下对内存进行安全 的存取。不过有些不是 bug 的情况,borrower checker 偶尔“截获”到,例如下面的例子:

match map.find(&key) {
    Some(...) => { ... }
    None => {
        map.insert(key, new_value);
    }
}

上面的代码片段一点问题也没有,不过因为 map 变量是从 match 借用(borrow)的,当 insert 改变 map 的时候,目前的 borrow checker 会认为有问题。我们计划很快解决这个问题,办法是通过重构 borrow checker,在更细粒度的(无词法的)区间去检查代码 – 在迁移到之前提到的MIR之后,这一步也成为可能。

插件

如果你有兴趣使用 Nightly 的 channel,目前你可以为 Rust 做很多确实很优雅的事情 。例如,regex crate 提供的宏可以在编译时把正则表达式转换成对应的机器码。再如 rust-postgres-macros crate,可以在编译时检查 SQL 语句的语法。这些 crate 用到了一个编译器的插件系统,这个插件系统很不稳定,并且暴露出太多的编译器内部细节。我们计划提出一个新的插件系统的设计,这个插件系统会更稳定,并且内置了对安全的宏扩展的支持。

Rust 应用领域分支:把 Rust 带到新的领域。

交叉编译:

虽然目前的 Rust 能够支持交叉编译,但该过程需要大量的人工参与配置。我们已启动交叉编译按钮。编译 Rust 代码到另一目标应该是足够简单:

1:只需要下载一个目标对应版本的预编译 libstd 库

2:执行 cargo build --target=foo

3:没有第 3 步

Cargo install

Cargo 和 crates.io 已经是分发 Rust 库很棒的工具。但是它缺乏安装可执行文件的方法。 RFC120 0https://github.com/rust-lang/rfcs/pull/1200 描述了一个简单的选项支持 Cargo,就是 cargo install 命令。很像常规的 make install,cargo install 将安装执行路径到你的环境变量,使你能运行它。这可以作为一个简单的分发渠道,对于编写工具的 Rust 开发者(那些可能熟悉运行 cargo)是特别有用的。

跟踪挂钩

使用 Rust 的一个最为有前景的方法是把像 Ruby 或者 Python 那样的高级语言写成的 Rust 代码“嵌入”到系统中去。这一嵌入式通常是给予 Rust 代码一个 C 语言的 API 接口方式进行的,并且当其目标是运行一个“C友好型”的内存管理规划,像引用计数或者保守的 GC 那样,工作进来是相当合理的。

在使用更加先进的 GC 环境上进行整合可能相当具有挑战性。或许最突出的例子是像 V8 (使用 node.js)的 JavaScript 引擎和 SpiderMonkey (使用 Firefox 和 Servo)。整合这些引擎需要非常细心的代码以保证所有的目标都被正确地植入了;一点点的错误将导致崩溃。这正是 Rust 的几种内存管理的问题所将要予以排除的。

为了把 Rust 引入到更高级 GC 的环境中,Rust 团队计划扩展编译器的能力,使其能够产生追踪钩。这些钩子就可以被 GC 用来搜索堆栈和识别 root,大大简化与高级 VM 集成代码的编写工作。当然,设计将尊重锈病的“你用什么则支付什么”的政策,使得没有 GC 集成的代码不受影响。

结语:RustCamp(Rust 营地)2015 年和 2016 年的 Rust 社区

我们最近召开了有 160人 参加的第一届 RustCamp 大会。看到如此多的 Rust 社区成员令人惊讶,从我们的火热线上空间氛围转化到友好的面对面活动。大会当天从 Nicholas Matsakis 和 Aaron Turon 核心团队对我们未来展望开始。演讲幻灯片在此http://rustcamp.com/schedule.html(连同其他几个演讲会谈)。更新:现在你也可以在这 http://confreaks.tv/events/rustcamp2015 看到演讲内容!

如今有一个确定的主题:Rust 的最大的潜力在于解放新一代的系统编程人员。并且这并不仅仅是语言本身,而只是因为这样的一个社区文化,就如他们所说的:“难道不清楚堆和栈之间的区别吗?不要担心 Rust 是一个最好的方法去学习它,而且我愿意展示给你怎样去使用 Rust。”

我们在上文中提出的技术工作的大纲对我们在 2016 年的版本是很重要的,但是在我们的审核和社区团队方面的工作也一样重要,还有所有那些不辞辛劳和满腔热情地欢迎着来自不同背景的人加入到 Rust 社区中人的工作同样对这个版本很重要。因此,我们最大的愿望是,在 Rust 的下一个年份随着它的社区的成长,它将继续保有着它现在所具有的海纳百川的精神。

文章转载自 开源中国社区[https://www.oschina.net]

相关文章
|
2月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
45 1
|
2月前
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如&quot;The Book&quot;和&quot;Rust by Example&quot;帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
112 2
初探 Rust 语言与环境搭建
|
2月前
|
Rust 安全 程序员
Rust 语言的防错机制太惊人了!安全编码从此不再是难题,快来一探究竟!
【8月更文挑战第31天】《安全编码原则:Rust 语言中的防错机制》探讨了代码安全的重要性,并详细介绍了Rust语言如何通过内存安全模型、所有权与借用规则等特性,在编译阶段检测并阻止潜在错误,如缓冲区溢出和悬空指针。文章还讨论了类型安全、边界检查等其他安全特性,并提出了遵循不可变引用、避免裸指针及充分测试等实用编码原则,以进一步提升代码质量和安全性。随着Rust在软件开发中的应用日益广泛,掌握其安全编码原则变得尤为重要。
39 0
|
2月前
|
Rust 安全 调度
从零构建梦想操作系统:用Rust语言亲手打造专属内核,你也可以成为系统开发者!
【8月更文挑战第31天】开发操作系统内核虽具挑战,却也充满乐趣。本文将指导你从零开始,使用Rust语言构建一个简单的操作系统内核。首先安装Rust环境和交叉编译工具链,然后创建新项目`my_kernel`。通过修改`Cargo.toml`和编写启动函数,结合串口输出和`multiboot2`库,最终使用QEMU运行内核。此教程旨在帮助你理解Rust在系统开发中的应用,激发深入探索的兴趣。
45 1
|
2月前
|
Rust 安全 算法
揭秘Rust语言如何重塑区块链安全:打造坚不可摧的分布式账本新篇章!
【8月更文挑战第31天】自比特币诞生以来,区块链技术凭借其去中心化和不可篡改的特点备受关注。为了应对安全性挑战,Rust 语言凭借其内存安全特性逐渐成为区块链开发的优选。本文探讨了 Rust 如何助力区块链实现更安全的分布式账本。通过示例展示了 Rust 在避免内存泄漏、空指针引用及数据竞争等方面的优势,预示着 Rust 在高性能、高安全性需求的区块链应用中拥有广阔前景。
50 1
|
1月前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
|
2月前
|
开发者 vr&ar 机器学习/深度学习
Xamarin 开发者的未来趋势展望:掌握跨平台开发新机遇,引领移动应用创新潮流与技术变革方向
【8月更文挑战第31天】Xamarin 作为领先的跨平台开发框架,通过 C# 和 .NET 框架实现一次编写、多平台运行,简化了 iOS、Android 和 Windows 应用的开发流程。未来几年,Xamarin 开发者将面临跨平台开发普及、云集成、机器学习、AR/VR、性能优化及安全性等关键趋势。通过学习新技术并积极采用新工具,开发者能够提升应用质量和用户体验,如利用 Azure AD B2C 实现身份认证,从而在竞争激烈的市场中脱颖而出。
50 0
|
2月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
34 0
|
2月前
|
开发者 API 开发框架
Xamarin 在教育应用开发中的应用:从课程笔记到互动测验,全面解析使用Xamarin.Forms构建多功能教育平台的技术细节与实战示例
【8月更文挑战第31天】Xamarin 作为一款强大的跨平台移动开发框架,在教育应用开发中展现了巨大潜力。它允许开发者使用单一的 C# 代码库构建 iOS、Android 和 Windows 应用,确保不同设备上的一致体验。Xamarin 提供广泛的 API 支持,便于访问摄像头、GPS 等原生功能。本文通过一个简单的教育应用示例——课程笔记和测验功能,展示了 Xamarin 在实际开发中的应用过程。从定义用户界面到实现保存笔记和检查答案的逻辑,Xamarin 展现了其在教育应用开发中的高效性和灵活性。
32 0
|
2月前
|
Rust 安全 Java
Rust语言在Web后端的应用:基于Actix-web构建高性能、安全可靠的服务器实践
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的无限潜力。
59 0
下一篇
无影云桌面