45

全面认识 RUST -- 掌控未来的雷电

 4 years ago
source link: https://www.tuicool.com/articles/Z3mUZrr
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

文章目录

Rust 是一种兼顾内存安全、高并发和稳定运行的编程语言。它有着惊人的运行速度(有些领域甚至超过 C/C++),能够防止运行错误,并保证线程安全。RUST 语言使每个人都能够构建可靠、高效的软件。

如何衡量语言的好坏?

在编程领域,人们通常从以下几个方面判断语言的 [好坏] :

  • 性能
  • 生产率
  • 可靠性

性能:RUST 在这几个方面做得都不错,甚至超过同类语。RUST 没有 Runtime 和 GC,即 RUST 没有运行时,也不用垃圾回收。这使得它的运行速度非常快,并且很省内存。

生产率:不得不说,RUST 的文档写得很好。出色的文档和友好的编译器、一流的包管理器和构建工具、精准的错误提示,这些都是 RUST 为开发者准备好的,我们只需要将精力放在逻辑上即可。

可靠性:RUST 的编译器很严格,它几乎不允许任何不可控的因素存在。它会在编译时为你检查语法、变量、所有权等内容,避免程序在运行中发生故障。

RUST 的可靠性真的很强,这并不是吹的。严格的编译器将因患扼杀在萌芽时期,一旦编译通过,那么你的程序将变得非常稳定(社区讨论到,编译通过后的程序稳定性在 90% 以)。

静态语言

RUST 是一门静态语言,这也是它运行速度如此快的原因之一。在遇到 RUST 之前,我是一名 PYTHON 开发者。PYTHON 最让人诟病的莫过于速度,无论是 WEB 、网络还是程序执行方面,都让人感到难过。动态语言的优势是灵活、简短和足够快的开发速度。静态语言的优势则是运行速度,为此,我们必须牺牲开发速度(当你熟悉之后,其实开发速度也不会差到哪里去)。

编译器

与 PYTHON 这种动态语不同,RUST 程序在运行前必须进行编译,编译完成后才能够运行。RUST 的编译器是 LLVM(底层虚拟机 Low-Level Virtual Machine),同样使用 LLVM 作为编译器的开发语言还有 Swift。

语言定位

每一门语言都应该有自己的定位,虽然最终的结果和开发团队预想的不同。PYTHON 如今被应用在互联网各个领域,如爬虫、WEB、深度学习、软件开发等,虽然 WEB 领域有 JAVA、PHP 和 GO 这样的强劲对手,但使用 Django、Flask 和 Tornado 的开发者仍然不少。

我是一名职业爬虫工程师,所以爬虫领域的事我比较清楚,PYTHON 在爬虫领域几乎没有对手,这个领域排名第二的应该是 JAVA,其次是 GO 语言。爬虫是多变的,爬虫工程师经常改动它们的代码,从开发效率和开发时间方面来说,没有什么语言比 PYTHON 更省事。爬虫爬取过程并不追求超高的速度,太快的话会导致目标网站拒绝访问(大量垃流量是不道德的行为),如果影响网站运行,那么就会将自己处于法律边缘。还有一点, PYTHON 库非常多,很多东西伸手就用,根本不需要耗费时间去造轮子。综合考虑来说,爬虫领域还真的是 PYTHON 更合适一些。

由于 PYTHON 丰富的生态和极简的代风格,使它成为深度学习的首选。PYTHON 占据着深度学习的大半江,这点是其他语言难以撼动的。

6vmYreE.png!web

软件开发领域,常年以来都被 C# 和 C++ 占据,系统层面则是 C 和 C++,其他语言根本没有参与的能力(相对于 C++ 和 C 来说,GO PYTHON NODEJS JAVA 这些语言太弱了)。

RUST 能做什么呢?适合做什么呢?

RUST 语言对标的是 C 和 C++,但它还具备了抗衡 GO 语言的能力,在深度学习和爬虫领域也有一定的机会。RUST 被视为 [系统级] 语言,它能够开发出稳定性超强、运行速度极快的项目。能够成为系统级编程语言,是因为它无 GC 和 Runtime,它超强的稳定性来源于所有权。

有实际案例证明,RUST 将会成为下一代操作系统的开发语言。火狐用它编写了一个名为 Redox 的类UNIX 操作系统。系统界面如下:

Y7vI7fJ.png!web

C++ 一直是游戏和高性能软件的首选,但很多开发者都会遇到内存(C 语言也有,如悬垂指针)方面的问题。RUST 严格的编译器和良好的设计使它规避了这些问题,它并不会出现内存安全方面的故障。并且,由于 RUST 和 C++、C 一样,都是无 GC 和 Runtime 的编程语言,也同为静态语言,所以它能够扮演 C 和 C++ 的角色,甚至还有些优势。

f2Mvemf.png!web

在 WEB 领域,现在 GO 语言火得一塌糊涂。这得益于它的运行速度和开发效率——它既有 JAVA 的运行速度,有又堪比 PYTHON 的开发效率,而且它在高并发场景的处理能力高过 PYTHON 等语言。这些因素综合在一起,使它成为如今 WEB 开发的首选。RUST 的运行速度和高并发处理能力只会比 GO 更强,但开发效率方面却无法保证(语法方面其实也还可以,但由于编译器的严格要求,使得开发效率不高)。

有人用 RUST 代替 GO 了吗?当然有,不然我也不会抛出这个话题,请看:

  • TiDB 团队使用 RUST 来构建 TiKV 产品,团队开发人员在 RUST 大会上有谈论过 RUST 与 GO 的选择。在综合因素的考虑下,他们最后选择了 RUST。

  • 一些区块链项目正在/已经从 GO 专为 RUST,不为别的,安全。

UVzAneV.jpg!web

深度学习方面,Tensorflow 已经支持 RUST 了。如果这还不能说明什么,那么我们可以从速度上考虑这个问题。神经网络的发展很迅速,而且层级越来越深,还有不断加深的趋势。我对图像识别和卷积有一些了解,卷积通过不断的计算图片像素张量得出特征。程序不断的迭代图像,直到获得 [合适] 的特征,这个过程其是计算的过程。目前来说,GPU 的计算能力比 CPU 要高,所以计算方面都由 GPU 完成,而不是 编程语言。但是程序本身的运行速度是整体效率的一个部分,所以 RUST 有可能被用来处理那些耗时的工作。(深度学习领域的生态肯定赶不上 PYTHON,不要想了)。

F7ZzYrB.png!web

爬虫领域,爬虫不单单是网络请求和文解析的问题,它是综合技术的应用。程序运行速度并不是硬需求,但每个爬虫工程师都希望 PYTHON 的运行速度再提升一个等级(事实上,大部分 PYTHON 开发者都希望 PYTHON 和 C 一样快)。所以,如果 RUST 降低网络请求和文本解析的门槛,我认为它也会吸引一部分使用 PYHTON 的爬虫工程。我就是这么被吸引过来的,我要造几个轮子(网络请求文本解析方面的轮子)。

代表性项目

新的语言,如果没有代表性项目,那么就很难斩露头角。当然,如果有 Google 这样的大公司推动,事情就会完全不一样(参考 GO 和 Flutter)。但 GO 语言已经有了足够强大的产品作为证明,比如 Docker、七牛云存储、TiDB 和 Kubernetes。

2ErEFbJ.png!web

RUST 生于火狐,由火狐研发人员和 RUST 社区维护。目前来说,RUST 还未出现类似于 Docker 或 Kubernetes 这样的流行项目,但 RUST 在一些领域已经有了大的迈步,如:

  • Redox - 类 UNIX 操作系统。
  • Servo - 火狐新一代浏览器引擎。
  • TiKV - 分布式的 KV 系统。

并且,很多大企业都在尝试将 RUST 融入到生产中。我相信在未来几年,RUST 肯定会大放异彩。

Hello World

之前提到过,RUST 文档很友好,我们可以通过一个案例了解 RUST。

在开始之前,我们需要下载并安装 RUST 语言。根据官网文档教程(如果大家不习惯看英文文档,可以到 RUST 中文站查看 教程 ,以下为 Linux 环境下的安装,Window 环境安装以教程为准)的提示,我们在终端运行以下命令:

curl https://sh.rustup.rs -sSf | sh
复制代码

即可完成 RUST 的下载,并安装 RUST。这会安装最新稳定版 Rust。过程中可能会提示你输入密码。如果安装成功,将会出现如下内容:

Rust is installed now. Great!
复制代码

然后配置环境变量,在 ~/.bash_profile 文件中增加如下内容:

$ export PATH="$HOME/.cargo/bin:$PATH"
复制代码

配置保存后,使用命令让其立生效:

$ source ~/.bashrc
复制代码

一切准备就绪后,我们就可以开始编写代码了。新建名为 hello.rs 的文件,并将以下内容写入 hello.rs:

fn main() {
    println!("Hello, world!");
}
复制代码

代码编写完成后,需要进行编译,才能运行。在终端执行以下命令:

$ rustc hello.rs
$ ./hello
复制代码

如果看到终端输出 Hello, world! 则代表程序运行成功。

你已经正式编写了一个 Rust 程序,成为一名 Rust 程序员,欢迎!

RUST 前景

花里胡哨的语言我们见得多了,它们既不安全又慢。多年来,没有任何语言能够撼 C/C++ 的地位,RUST 的出现使得编程界有了新的氧气。作为一名从事爬虫工作的开发者(接触的技术较多),我认为编程语言 [快] 是趋势,静态语言是未来。我很喜欢 PYTHON,它的语法简洁、开发效率超高。但不得不承认,我从心底里希望 PYTHON 变得更快,但动态语言出身的它决定了它速度的上限,所以我将目标转投到 RUST 上。GO 语言非常优秀,生态也很好,但我看好 RUST 而不是 GO 的理由是:RUST NO GC NO RUNTIME,SAFTY。

rU73UzA.jpg!web

这使得 RUST 必将成为未来掌控雷电的语言,尤其是 Redox 的出现,使我更加坚信 RUST 的未来。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK