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

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

Opensource.com

在今年的 Great Wide Open 会议 上,Steve Klabnik 发表了关于 Mozilla 的 Rust 编程语言 的演讲。Klabnik 之前撰写了一篇名为 Rust for Rubyists 的 Rust 入门教程,而这次演讲的目的也类似。然而,这次演讲并非以 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本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.