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

还没有读者喜欢这个。
code.org keynote address

Opensource.com

在今年的 Great Wide Open 会议上,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 现在是一个多么快速变化的目标(每三个月发布新版本)。

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

回复 作者:Jason B

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.