Rust: 入门实践

最早听说 Rust 这门编程语言是在一年前。当时,Node 创始人 Ryan Dahl 宣布建立一个 Deno 的项目,底层基于 Go 语言来实现,上层基于 V8 实现一个 TypeScript 的 Runtime,感觉挺有意思的,不时地还关注一下。

因为很早就看过 Ryan 对比 Go 和 Node 的文章,知道他写 Go 有一段时间了,所以 Deno 基于 Go 语言实现,一点也不奇怪,并且觉得非常合适。但过了一段时间之后再去 Github 看,发现 Deno 的底层被换做 Rust 实现了,当时还有点奇怪,为啥要更换呢,Rust 又是啥玩意,语法这么奇怪。再后来,就没继续关注了。

到了今年早些时间,Facebook 发布了 Libra 区块链产品,也是基于 Rust 实现的,看来 Rust 还真不一般,这么大的项目都采用了。又过了一段时间,微软也在打算使用 Rust 替换项目中的 C++,又跑去看了相关的分析,最后觉得,是时候了解一下这门新的编程语言了。

Rust 是一门系统语言,最初是由 Mozilla 研究院的 Graydon Hoare 设计创造,然后在 Dave Herman, Brendan Eich 等人的贡献下逐步完善。值得一提的是,Brendan Eich 正是 JavaScript 语言的缔造者。

Rust 是一门内存安全的语言,不允许空指针、悬垂指针和数据竞争情况,它没有垃圾回收机制,却实现了内存的自动管理,性能堪比C/C++,支持 函数式命令式 以及 泛型 等多种编程范式,对并发也有很好的支持。这么多优点,想想就让人激动。

学习一门新的语言,首先要去参考它的官方文档。我们可以看看 Rust 的官方文档:https://www.rust-lang.org,大部分知识都可以这里 GET 到。为了方便大家更快地入门,下面就梳理一个简单的 Rust 入门教程。

一、在线安装:

Rust 提供了一个叫 Rustup 的工具,来负责 在线安装 以及 版本管理,在 macOS、Linux 等类 Unix 系统中,我们可以直接在命令行执行下面这条命令,使用 Rustup 工具进行在线安装:

$ curl https://sh.rustup.rs -sSf | sh

安装完之后,我们打开一个命令行窗口,执行 rustc 命令来看看是否安装成功:

$ rustc --version

对于其他平台的安装,可以参考官方文档指导页:https://forge.rust-lang.org/infra/other-installation-methods.html

如果安装或编译过程中出现问题,先不要气馁,我们也可以直接点击下面这个链接,使用在线编译运行环境来学习,这对初学者非常友好:

https://play.rust-lang.org

二、写个HelloWorld

Rust 源代码以 .rs 为后缀名,接下来,我们就创建一个 main.rs 的文件:

// main.rs

fn main() {
    println!("Hello World!");
}

如上面代码所示,main 函数非常简洁。我们在命令行中执行 rustc 进行编译:

$ rustc main.rs

命令运行结束后,当前目录下会生成一个 main 的可执行文件(Windows平台是 main.exe),我们可以直接运行 ./main 来执行这个文件。

上面代码中,println! 是一个很奇怪的用法,它不是一个函数调用,而是 Rust 中的宏语句,用于格式化输出。

输出结果时可以定义不同的格式,如下面代码所示:

// main.rs

fn main() {
    // 空的占位符
    println!("{} {}", "Hello", "World");

    // 数字占位符
    println!("{0} {1}", "Hello", "World");

    // 变量占位符
    println!("{first} {second}", first = "Hello", second = "World");

    // debug模式 显示更详细的信息
    println!("{:?}", "Hello World");

    // 指针模式(pointer)
    println!("{:p}", &"Hello World");

    // 显示二进制格式(binary)
    println!("{:b}", 26);
    // 显示十六进制小写格式(hex)
    println!("{:x}", 26);
    // 显示十六进制大写格式(HEX)
    println!("{:X}", 26);
}

运行以上代码,控制台打印结果如下:

Hello World
Hello World
Hello World
"Hello World"
0x10ab5d310
11010
1a
1A

今天就先写到这里,感兴趣的同学可以试一把。

posted @ 2019-11-10 19:04  liuhe688  阅读(601)  评论(0编辑  收藏  举报