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。
如果安装或编译过程中出现问题,先不要气馁,我们也可以直接点击下面这个链接,使用在线编译运行环境来学习,这对初学者非常友好:
二、写个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
今天就先写到这里,感兴趣的同学可以试一把。