Mozilla 的 Rust 编程语言处于关键阶段

还没有读者喜欢这篇文章。
code.org keynote address

Opensource.com

在今年的 Great Wide Open conference 上,Steve Klabnik 就 Mozilla 的 Rust 编程语言 发表了演讲。Klabnik 之前撰写了一本 Rust 入门教程,名为 Rust for Rubyists,而这次演讲的目的与之类似。然而,这次演讲并非以 Ruby 为中心,而是面向所有程序员。因此,演讲的标题为:Rust for $LANGUAGE-ists

Klabnik 的演讲包含三个部分。首先,他介绍了 Rust 语言的起源以及该语言的未来发展方向。第二部分涵盖了代码示例。这些示例从无处不在的 “Hello World” 到更复杂的示例,突出了 Rust 与其他语言的不同之处。最后一部分提供了学习更多关于 Rust 的资源。

下面,我将介绍 Steve Klabnik 演讲的一些亮点,但我强烈建议您 在 YouTube 上观看他的演讲,或者 阅读他的演讲幻灯片。我从他的演讲中学到了很多,我相信您也会如此。

什么是 Rust?

Rust 是一种系统语言,是 C++ 的替代品。理论上,您可以将 Rust 用于任何您会使用 C++ 的编程项目。Rust 相对于 C++ 的优势在于,Rust 从一开始就被设计为 “安全、并发和快速”。

最初,Rust 是 Graydon Hoare 的个人项目,他在 Mozilla 工作。当 Mozilla 想要成立一个研发部门时,Rust 成为了它的第一个项目。Mozilla 编写了大量的 C++ 代码,并且不得不处理 C++ 的缺点。例如,在上次 Pwn2Own 竞赛中,Firefox 中发现的所有三个漏洞都是因为 C++(例如,指针管理不当)。在 Rust 中,这些类型的编程错误甚至无法编译。

Hoare 不再领导 Rust 的开发。他已经转向其他项目。Rust 已经达到了足够成熟的开发阶段,该项目可以脱离其原始开发者继续进行。但这并不意味着 Rust 是一个完全成熟的项目。当前版本是 0.10,新版本确实会破坏兼容性。早期版本的代码示例和文档可能不适用于最新版本,因此可能会给新用户带来一些困惑。版本 1.0 即将发布,该版本将稳定一切。

Rust 正处于其生命周期的关键时刻。它尚未完全成熟,因此有些人可能会因此而不使用它,但它需要人们使用该语言来在 1.0 版本发布之前对其进行改进。该项目需要来自不同视角的人们进行审视,以确保 Rust 1.0 版本尽可能地出色。

代码示例

Rust 中的 Hello World

use std::io::println;

fn main() {
    println("Hello, world");
}

这是用 Rust 编写的标准 “Hello World” 应用程序。对于任何有 C 风格、大括号语言经验的人来说,它应该看起来足够熟悉。第一行导入 println 函数。Main 使用 fn 而不是 intpublic static void 或类似的声明。Rust 与 C/C++/C#/Java 程序员习惯的略有不同,但又足够接近,以至于不会完全陌生。

段错误

int main(void)
{
    char *s = "hello world";
    *s = 'H';    
}

这段 C++ 代码将在警告的情况下编译,但运行时会发生段错误。Rust 的设计旨在阻止这种情况发生,如下例所示。

fn main() {
    let s = &"hello world";
    *s = "H";
}

segfault.rs:3:4 3:6 error: type &str cannot be dereferenced
sefault.rs:3    *s = "H";
                ^~
error: aborting due to previous error
task 'rustc' failed at 'explicit failure', ...

Rust 没有编译,而是打印出上面的错误消息。这是 Rust 的优势之一。它对安全性的关注意味着它的设计旨在阻止像上面 C++ 示例中的错误进入编译后的代码。

更复杂的示例

fn main() {
    let nums = [1, 2];
    let noms = ["Tim", "Eston", "Aaron", "Ben"];
 
    let mut odds = nums.iter().map(|&x| x * 2 - 1);
 
    for num in odds {
        spawn(proc() {
            println!("{:s} says hello from a lightweight
            thread!", noms[num]);
        });
    }
}

这段代码展示了 Rust 的几个特性。Rust 使用 let 关键字来定义变量。代码的第二行和第三行创建了一个整数向量 (nums) 和一个字符串向量 (noms)。Rust 支持类型推断,因此没有必要显式声明向量包含整数或字符串。下一行突出了 Rust 中变量默认是不可变的事实。如果您想使变量可变,请使用 mut 关键字。for 循环看起来类似于您在更现代的语言(如 Ruby 或 Python)中看到的循环,但它编译成与传统 C++ for 循环相同的机器代码。spawn(proc()) 代码块演示了 Rust 如何创建一个线程来运行函数。最后,println! 行显示了 Rust 如何处理替换。在示例中,{:s} 将被 noms[num] 中的值替换。

我介绍的示例只是冰山一角。Klabnik 的演讲包含许多其他 Rust 代码示例。就像我上面说的那样,他的演讲非常值得观看。您将学到很多东西。如果您想尝试演示文稿中的示例,请确保下载 Rust 0.10。当前的 nightly 构建版本已经更改了一些内容,因此某些示例将无法正常工作。

Rust 资源

为了结束他的演讲,Klabnik 建议了以下资源来学习更多关于 Rust 的知识。但是,他确实警告说,Rust 的官方教程 “很糟糕”,并且正在重写中。

教程

讨论

查看 GitHub 上的 Rust 并参与其中。

4 条评论

是的,发布了。这正好表明 Rust 现在是一个变化很快的目标(新版本每三个月发布一次)。

我仍然建议任何想使用 Steve Klabnik 演讲中的示例的人 下载 0.10 版本。如果他们想进一步探索,他们显然应该切换到 0.11 版本或 nightly 构建版本。

回复 ,作者是 Jason B

Creative Commons License本作品采用 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.