全面认识 RUST -- 掌控未来的雷电
文章目录
- RUST 简介
- 如何衡量语言的好坏?
- 静态语言
- 编译器
- 语言定位
- 代表性项目
- Hello World
- RUST 前景
RUST 简介
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 占据着深度学习的大半江,这点是其他语言难以撼动的。
软件开发领域,常年以来都被 C# 和 C++ 占据,系统层面则是 C 和 C++,其他语言根本没有参与的能力(相对于 C++ 和 C 来说,GO PYTHON NODEJS JAVA 这些语言太弱了)。
RUST 能做什么呢?适合做什么呢?
RUST 语言对标的是 C 和 C++,但它还具备了抗衡 GO 语言的能力,在深度学习和爬虫领域也有一定的机会。RUST 被视为 [系统级] 语言,它能够开发出稳定性超强、运行速度极快的项目。能够成为系统级编程语言,是因为它无 GC 和 Runtime,它超强的稳定性来源于所有权。
有实际案例证明,RUST 将会成为下一代操作系统的开发语言。火狐用它编写了一个名为 Redox 的类UNIX 操作系统。系统界面如下:
C++ 一直是游戏和高性能软件的首选,但很多开发者都会遇到内存(C 语言也有,如悬垂指针)方面的问题。RUST 严格的编译器和良好的设计使它规避了这些问题,它并不会出现内存安全方面的故障。并且,由于 RUST 和 C++、C 一样,都是无 GC 和 Runtime 的编程语言,也同为静态语言,所以它能够扮演 C 和 C++ 的角色,甚至还有些优势。
在 WEB 领域,现在 GO 语言火得一塌糊涂。这得益于它的运行速度和开发效率——它既有 JAVA 的运行速度,有又堪比 PYTHON 的开发效率,而且它在高并发场景的处理能力高过 PYTHON 等语言。这些因素综合在一起,使它成为如今 WEB 开发的首选。RUST 的运行速度和高并发处理能力只会比 GO 更强,但开发效率方面却无法保证(语法方面其实也还可以,但由于编译器的严格要求,使得开发效率不高)。
有人用 RUST 代替 GO 了吗?当然有,不然我也不会抛出这个话题,请看:
TiDB 团队使用 RUST 来构建 TiKV 产品,团队开发人员在 RUST 大会上有谈论过 RUST 与 GO 的选择。在综合因素的考虑下,他们最后选择了 RUST。
一些区块链项目正在/已经从 GO 专为 RUST,不为别的,安全。
、
深度学习方面,Tensorflow 已经支持 RUST 了。如果这还不能说明什么,那么我们可以从速度上考虑这个问题。神经网络的发展很迅速,而且层级越来越深,还有不断加深的趋势。我对图像识别和卷积有一些了解,卷积通过不断的计算图片像素张量得出特征。程序不断的迭代图像,直到获得 [合适] 的特征,这个过程其是计算的过程。目前来说,GPU 的计算能力比 CPU 要高,所以计算方面都由 GPU 完成,而不是 编程语言。但是程序本身的运行速度是整体效率的一个部分,所以 RUST 有可能被用来处理那些耗时的工作。(深度学习领域的生态肯定赶不上 PYTHON,不要想了)。
爬虫领域,爬虫不单单是网络请求和文解析的问题,它是综合技术的应用。程序运行速度并不是硬需求,但每个爬虫工程师都希望 PYTHON 的运行速度再提升一个等级(事实上,大部分 PYTHON 开发者都希望 PYTHON 和 C 一样快)。所以,如果 RUST 降低网络请求和文本解析的门槛,我认为它也会吸引一部分使用 PYHTON 的爬虫工程。我就是这么被吸引过来的,我要造几个轮子(网络请求文本解析方面的轮子)。
代表性项目
新的语言,如果没有代表性项目,那么就很难斩露头角。当然,如果有 Google 这样的大公司推动,事情就会完全不一样(参考 GO 和 Flutter)。但 GO 语言已经有了足够强大的产品作为证明,比如 Docker、七牛云存储、TiDB 和 Kubernetes。
、
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。
这使得 RUST 必将成为未来掌控雷电的语言,尤其是 Redox 的出现,使我更加坚信 RUST 的未来。
作者:夜幕韦世东(华为云云享专家)
全面认识 RUST -- 掌控未来的雷电的更多相关文章
- 4星|《行为设计学:掌控关键决策》:影响决策质量的四大思维陷阱及WRAP应对法
行为设计学:掌控关键决策 两位作者认为,有四大思维陷阱让人做出错误的决策:思维狭隘.证实倾向.短期情绪.过度自信.两位作者提出WRAP决策流程来应对:Widen your options(拓宽选择空间 ...
- TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子
TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子 一.<如何掌控你的自由时间> (1)时间管理的传统思维:守时和节省零散的时间.演讲者认为这个观点已经彻底落后. ...
- IT运维大会精华回顾 等保2.0时代掌控万物互联
10月24日,由<网络安全和信息化>杂志社.IT运维网联合主办的“2019(第十届)IT运维大会”在北京新世纪日航酒店成功举行. 随着大数据.云计算.物联网.互联网+等快速发展,IT系统架 ...
- ACM对时间掌控力和日积月累的习惯的意义
马云说,要想创业成功,不是要知道现在什么东西最火,而是要清楚的知道十年以后什么东西最火.这就意味着,你对时间掌控力,至少要有十年. 但是仔细回想一下自己的学生时代,自己对时间的把握是怎样的?有些人只能 ...
- IQ一个人的智力和对科学知识的理解掌握程度。 EQ对环境和个人情绪的掌控和对团队关系的运作能力。 AQ挫折商 一个人面对困境时减除自己的压力、渡过难关的能力。
IQ: Intelligence Quotient 智商 一个人的智力和对科学知识的理解掌握程度. EQ: Emotional Quotient 情商 一个人对环境和个人情绪的掌控和对团队关系的运作能 ...
- CIO需加强对战略管理层面的掌控-精华篇
当代CIO面临提升信息化作用的新机遇.CIO在企业中,不能满足于职能性的技术支撑角色,要找到新的着力点,以发挥信息化在全局战略中的作用,把信息化力量聚焦于做强做优,提高国际竞争力上来,成为企业不可或缺 ...
- Streamr助你掌控自己的数据
博客说明 所有刊发内容均可转载但是需要注明出处. 项目简介 Streamr 致力于为世界实时数据的自由公平交换打造开源平台,并促进全球数据经济的发展.Streamr项目基于区块链技术,并向用户提供数据 ...
- Javascript通过bind()掌控this
Javascript通过bind()掌控this: http://blog.csdn.net/rznice/article/details/26134201 bind能为我们做些什么,同时它的好处在哪 ...
- 【linux】【root权限的掌控】
前言: 喜欢玩linux的都知道root权限是一个很重要的东西.因为linux里面万物皆文件,对于权限的掌控也就达到了一个前所未有的限制(不然随便一个用户rm -rf /*不就全完了,,哈哈). 下面 ...
随机推荐
- StrGame
如果先手可以控制一轮必胜或者必败,则先手必胜 如果只有必胜的方法,不能保证必败,则最后一轮的先手获得胜利,倒数第二轮的先手会被后手想办法”被胜利“从而在最后一轮成为后手,必败.倒数第三轮先手故意胜利, ...
- NOIP模拟 39
考的嘛也不是. 伤心(怎么可能) T1稍想想组合数,然后牢记: 取模题随时取模,包括刚刚读入的数据 T2想到了基环树,然而不会打QAQ.. 非常简洁但非常大神的做法:随便断掉环上的一条边 利用“这条 ...
- NOIP模拟测试11
这次考试T1想到了正解没有去实现,然后就死了,不过我估计就算想到正解也会挂(26^2和暴力一个分),肝了两个小时T2屁都没蹦出来,T3没有搞清那个式子的含义. (不过一分没挂) T1:string 开 ...
- Redis集群--Redis集群之哨兵模式
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 搭建R ...
- m76 赛后总结
这次没有炸的太厉害,只是T3崩了,而且..... 这次的心态并没有因为loj的大吉而崩,反而在经受过上一轮的打击之后变得坚强了,心态也平了,没什么可挂念的,因为我什么都没有,所以发扬光脚的不怕穿鞋的精 ...
- Python3.x安装教程及环境变量配置
python3.x安装 1.直接到官网https://www.python.org/下载,安装就可以了. 2.安装比较简单,点exe文件一直下一步就可以了(注意:安装的时候有个选择是否添加环境变量,这 ...
- Consul安装集群搭建
1 consul的安装和配置 1.1 consul agent 命令介绍 下载consul_1.0.0_linux_amd64.zip解压,里面只有一个consul可执行文件,其中,consul最常用 ...
- 防火墙firewalld的基础操作
防火墙Firewalld.iptables 1.systemctl模式 systemctl status firewalld #查看状态 2 systemctl start firewalld #启动 ...
- Typings移除Deprecated Warning
使用TypeScript进行开发中,经常遇到如下的Deprecated Warning.虽然没有实际影响,但看多了,确实挺烦. 要想消除这些Warning,需要以下几个步骤: 步骤一,确认Warnin ...
- MySQL InnoDB MVCC
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...