Rust 初见--一直想用 Rust 写 Blog 的人?

rust

#1

写在最前:这只是一位喜欢 Rust 社区的人写的第一篇基础文章,想送给开始对 Rust 感兴趣的伙伴,或者从 Rust 入门到放弃到再次入门的伙伴。要是有写的不准确的地方,也欢迎大家告诉我~~送上一直想用 Rust 写 Blog 的大头照!

只是因为去年参加了 Nervos 在杭州举办的「 Rust Dev Sharing 」,第一次知道了「Rust」;

只是因为 RustCon Asia 还没开始就火了,细数论坛已出现 25 位讲师,阵容真大,故事真多,每个都想点进去看看: https://talk.citahub.com/tags/rustconasia

在 StackOverflow 的年度调查中 Rust 连续四年成为最受开发者喜欢的语言。最近接触 Rust 社区的过程中,发现这是一个充满热情、十分活跃的社区。

扒一扒 Rust 的起源

一种新语言新技术的兴起都是为了解决某些问题而设计发生,Rust 也不例外。

Rust 最初(2006 年)是由一位名叫 Graydon Hoare 的职业编程语言工程师设计的,通常来说职业编程语言工程师都是在给其它的语言开发编译器和工具集,并不参与任何语言的设计工作。 而 Graydon Hoare 却萌生出了开发一种属于自己语言的想法,并且利用业余时间完成了 Rust 的开发(niúpí 的人就是这么高效)。后来这个项目受到了 Mozilla 的大力支持,还专门成立了一个团队继续开发。

发展至今,Rust 虽然由 Mozilla 资助,但它其实是一个开源项目,有很大部分的代码是来自于社区的贡献者。

什么是 Rust?

2015 年 5 月,Rust 发布了 1.0 版本,Mozilla 曾这样描述 Rust

Rust 是一个新的编程语言,注重性能、并行、内存安全。设计者们从头开始创建一门语言,融合现代编程语言的优秀设计,避免传统编程语言的历史包袱。
Rust 融合了高层语言富有表达力的语法和灵活性,以及底层语言超强的控制性和性能。

维基百科中对 Rust(编程语言)的描述

Rust 是一种多范式系统编程语言,侧重于安全性,尤其是安全并发性。语法上类似于 C++,但被设计为提供更好的存储安全性,同时保持高的性能。

2018 年 12 月,Rust 发布了 Edition 2018 版本,目前最新版本更新至 1.34.0, 最新标语:Empowering everyone to build reliable and efficient software.

从 2013 年 6 月开始,「This Week in Rust」保持每周更新,已有 280 多期。Rust 的功能更新、RFC 通过、社区动态、近期活动等都可以在周报中看到。想要了解 Rust 的重要动态,在这里一目了然。

Rust 的特性

有人说,Rust 是更好的 C++。通常人们都会优先选择 C 或者 C++ 编写程序以保证高性能,但 C 和 C++ 都非常容易出现并发问题,而 Rust 的出现至少可以大幅缓解类似问题的发生。

性能上, Rust 非常快速且节省内存,没有运行时或垃圾收集器,它可以为性能关键型服务提供动力、在嵌入式设备上运行,并且可以轻松地与其它语言集成;

可靠性上, Rust 的丰富类型系统和所有权模型保证了内存安全性和线程安全性 ,能够在编译时消除许多类错误;

开发效率上, Rust 拥有出色的文档、友好的编译器、有效的错误提示以及一流的工具 - 集成的包管理器和构建工具,具有自动完成和类型检查的智能多编辑器支持,自动格式化程序等。

从长远来看,在对内存安全性和性能有严苛要求的场景如 IoT、区块链开发等,Rust 将会有广阔空间。

Rust 的使用情况

Rust 作为一门年轻的语言,开发生态十分活跃,因其优越的特性,目前已有国内外大大小小的项目使用 Rust ,例如 Dropbox 的后端分布式存储系统,Firefox 的新的内核 Servo,操作系统 Redox,PingCAP 的分布式数据库 TiDB 的存储层 TiKV。

而在区块链开发中,我们也看到了 Nervos/CITA 、Parity/Substrate、Grin、Holochain 和 ChainX 都在使用 Rust,Zcash 也在考虑使用 Rust。

那么, 为什么 Rust 适合区块链项目 ?之前在一期志伟老师的线上分享《Rust 与区块链》中找到了答案:

从区块链项目开发特点来看:

  • 区块链开发都会涉及 密码学 ,最基本的如哈希算法、签名算法,使用大量前沿密码学的成果,如零知识证明、环签名。

  • 在电脑上把一个区块链软件跑起来,这就叫做一个节点。全球有非常多这样的节点,这些节点在复杂网络环境下连接成大规模对等网络,就形成了所谓的区块链网络。节点之间通过公网连接,现实中的公网环境是很复杂的,有各种路由、专用网咯、防火墙等,一个节点可能需要端口映射,或者使用 vpn,或者使用网络穿透技术,才可能会连上其它节点。这就需要 P2P 网络和 7*24 小时网络服务的 高可靠性和高性能

  • 区块链的技术迭代需要一门优秀的编程语言来进行快速的原型开发

然而 Rust 是具备以上特点的:

  • 性能好,与 C++不相上下

  • 安全,编译期杜绝内存和并发问题,使得软件具有高可靠性

  • 表达能力强,可以进行快速原型开发,提高效率

  • 与 C 无缝交互,解决密码学库缺失问题(因为很多密码学的库是用 C 写的)

  • 生态开放,编译器和绝大多数库采用 MIT/Apache,开发活跃,进展快

Rust 在 Nervos 的应用

之前 Aimee 已经在论坛里发布一篇关于《Why Rust》的文章中提到:

Nervos 是一个分层的加密经济网络,CKB 是其基础层,全称为 Common Knowledge Base 。CKB 团队成员一直在关注并尝试新技术,做开源社区。

编程语言选择始于 2016 年秋季。我们渴望找到一种最喜欢的语言来满足日常编程以及长期的区块链开发。

当时的备选语言有 Haskell,Erlang,Java,C++,Go 和 Rust ,尽管我们很喜欢 Haskell ,因为它的纯函数式编程,但是 Haskell 和 Erlang 可能很难招聘到合适的人。我们非常了解 Java,C++ 和 Go,对比更喜欢 C++ 的性能和 Go 的效率。

Rust 是一种现代编程语言,在语言和编译器设计方面吸收了数十年的卓越成就。我们的理念是追求完美。它不仅体现了体系结构,还体现了实现细节,而 GC (garbage collector)和高性能之间存在冲突,我们倾向于选择 Rust 而不使用 GC 。

当时,我们还做了一个 Go 和 Rust 的比较测试,用 Rust 和 Go 版本编写一个程序。Rust 版程序在 24 小时后仍在运行。安全性和性能对我们来说是最重要的一点, Rust 的突出表现也在于此。而且,Rust 很酷!特别是它在工程方面表现出了很大的优势,也证明了我们做出的正确选择。

关于 Rust 还有一个故事在较早的时候产生了很大的影响。当时以太坊遭到 DDoS (Distributed Denial-of-Service)攻击,影响了之前用 Go 和 Rust 编写的所有客户端。而使用 Rust 的用户是可以继续工作的,这就导致所有矿工都切换到了 Rust 客户端。所以现在大多数矿工和矿池都在使用 Rust 。

除了 Rust 语言本身之外,Rust 社区正在以一种我们很钦佩的宽容的方式公开发展。我们可以知道 Rust 的每一步改进都会经过协商,达成共识,然后通过 RFC(Request for Comments)实现。基于 RFC 的机制赋予 Rust 语言本身极大的开放性。

我们相信,开源文化将为我们的团队带来好运,并为 CKB 的成功提供更好的方法。更重要的是,对于每个 Rust 开发者来说,阅读关于 RFC 的高质量讨论本身就是一种非常愉悦和有益的经验,所以我们借用了 RFC 机制 Nervos CKB,参见 Nervos RFC

写在最后:就要去参加 RustCon Asia 了,国内外的 Rust 大神及 Rust 开发者将首次在亚洲齐聚一堂,亲自感受 Rust 社区文化,真是一种荣幸与期待。4 月 20 日,北京见,赴一场技术、人文、社区的 Rust 盛宴!

事实上,那个最想用 Rust 写自己的 Blog 的人并不是我,而是!@ghani 希望愿意手把手教他的 Rustaceans 们来认领,送他走上人生巅峰!


Nervos 双周报#8:用爱发电的 RustCon Asia
Nervos Bi-weekly Report#8: RustCon Asia with Love
#2

Where is big head picture?


#3

一直想用 Rust 写 Blog 的人还没有被认领走 :see_no_evil:


#4

谁在叫我


#5

我被标题党引诱了进来。我以为是教你如何用 rust 写 blog 的帖子。:upside_down_face:


#6

这里的漂流老师可以教你~