篇二 | 想全面了解 Rust 语言 ? 你想知道的都在这里[转]

原文链接:篇二 | 想全面了解 Rust 语言 ? 你想知道的都在这里

对 Rust 语言感兴趣,但被网上的各种评价 Rust 语言的观点和看法所困扰,到底 Rust 语言是什么样的一门语言呢?那么看本文就对了。

因为问题比较多,所以这是一个系列,争取每篇文章回答五个问题,目前看来估计需要五篇就可以回答完。

篇一 | 想全面了解 Rust 语言 ? 你想知道的都在这里[转] | Rust 技术论坛

本文为系列的第二篇文章,试图解答以下问题中的6~10,如果你感兴趣的问题不在其中,请回复评论。

  1. Rust 创造者们是一群什么样的人?

  2. Rust 是一门什么样的语言?Rust 的哲学是什么?

  3. 学习 Rust 语言需要高智商吗?

  4. Rust 是 Better C++ 吗?

  5. Rust 学习曲线高吗?

  6. 零基础能否学 Rust 语言?

  7. 学 Rust 语言是否可以跳过 C 语言?

  8. Rust 只能开发底层系统软件?前端工程师可以学 Rust 吗?Rust可以全栈开发吗?

  9. Rust 语言适合刷算法题吗?

  10. Rust 语言要发展需要依赖杀手级应用吗?

  11. Rust 语言该如何学习?

  12. 听说亚马逊招了 Rust 核心团队的人?亚马逊会是 Rust 的 “爸爸” 吗?

  13. 目前已经将 Rust 用于生产的场景有哪些?状况如何?

  14. Rust适应哪些业务领域开发?Rust 在云原生&嵌入式&HPC 领域的可能?

  15. Rust 就业前景如何?

  16. 用 Rust 写的代码为什么比同样功能的Python还慢?

  17. 用 Rust 编译太慢了,能否提升编译速度?

  18. 澄清以下一些关于 Rust 语言的谣言:

    1. Rust 需要手动管理内存。
    2. Rust 用生命周期表示变量死活。
    3. Rust 编译器配备了先进的编译期 GC。
    4. Unsafe 关掉了所有检查,不安全,不能用。
    5. Rust 这么多限制,肯定有运行时开销。
    6. Rust 用户都是傻子,只要乖乖听编译器的写代码,不出错就行了,不用考虑底层的机制。
    7. Rust 连内存泄漏都保证不了,还谈什么安全?
  19. 适合 Rust 新手的练手项目有哪些?

  20. Rust 开发效率低吗?

要回答好这些问题并不容易,但是这些问题的答案,至少可以帮你指明一个方向。

答「篇一」读者反馈的问题

上一篇文章发出去以后,收到了小伙伴的一些反馈,下面两个问题需要着重回复一下:

1. 是不是太标题党了?

哦,这个怎么说呢?写这个系列的初衷也是因为看到网络上流传的对 Rust 以及 Rust 历史、社区的一些误解,主要是想找一些针对性的问题,写一篇扫盲贴,可以让对 Rust 感兴趣的可以通过这些问题,对Rust从整体上、外围上有一个了解。所以这个标题我觉得还好吧?它确实反映了我想写的内容啊。

2. Rust 是重新实现 C 语言?

我的意思并不是指 Rust 是 C 语言的衍生品。我的意思大概包含两个方面:

1. 第一,指 Rust 的时代意义,和 当年 C 语言类似。C当年是第一个系统级的通用语言,现在 Rust 也是系统级通用语言,并且Rust重新定义了系统级语言:安全和性能兼顾。正好现在这个时代,安全将不再是可选项。

2. 第二,在语言实现上,虽然Rust 从 Cpp 那借鉴了优秀的零成本抽象等思想,但是 Rust 语言在工程使用上和 C 语言更像

C语言用Struct 模拟 面向对象, Rust 则让 Struct 直接拥有了 OOP 特性。

C语言靠函数指针模拟多态和使用相同的函数名来模拟接口, Rust 将其现代化抽象以后就是:trait 和 Enum。更具工程之美。

C 语言 和 Rust 都没有继承,但均可以通过包装 Inner 结构体来模拟继承。

C 语言里的指针,在 Rust 里被披上了一层安全的“外衣”(借用检查)就是引用(Safe Rust),脱下“外衣”就还原为指针(Unsafe Rust)。

C 语言编程处理错误,基于返回值,没有异常。Rust 语言处理错误,同样是基于返回值,没有异常。但是 Rust 比 C 强的地方在于,Rust 的类型系统借鉴了Haskell的和类型,来处理返回值,从而比 C 语言更优雅和健壮。

C 语言编程,你不需要以对象来进行抽象,也不需要以函数来进行抽象,你只需要想清楚你的数据类型、结构和算法即可。Rust 中也是一样,你想清楚你的数据类型、结构和算法即可,和 C 不同的地方,或者说更强的地方在于,类型系统是安全的,并且,更具工程性和健壮性。

如果用一句话来总结,那就是:Rust 是基于 C 编程思想的一次华丽的现代化变身。

零基础能否学习 Rust 语言?

零基础能学任何一门编程语言。Rust 语言也是一门图灵完备的编程语言,为什么不可以学呢?

有一定编程语言基础的人,感觉Rust入门曲线高,其实是和他已经形成的一套编程语言定势有一定关系的。对于有编程基础的人,学习 Rust 最好保持一种初学者心态去学 Rust,才能不被以往的思维定势所影响。

比如很多 Rust 新手,从写的 Rust 代码中都能看出来,Java/ C/ Cpp 的痕迹。 因为他只是在用 Rust 写 Java/C/Cpp。

而初学者纯小白,一张白纸,从零接受Rust语言的设计,也许会更好。

但如果你的问题是,零基础能否快速学会 Rust 语言?我觉得,就有点困难了,你还是需要一定的时间去掌握学习。

学习 Rust 能否跳过 C/ Cpp 语言?

理论上来说,单纯学习Rust,你可以绕过C语言。

C语言是建立在计算机操作系统的一种抽象,即,一种世界观。它允许操作计算机系统中的资源。比如你可以通过指针来操作内存数据。

Rust则是另一种抽象,它相比于C语言更加安全,更加现代化。Rust这种抽象汲取了C语言这么多年来发展的精华,改进了C语言中的糟粕。比如,Rust中的引用你完全可以当指针去看待,然而,它是披上了安全外衣的指针。

在我眼里,Rust就是新时代的C语言(本文前面已阐明理由)。

所以理论上,你完全可以直接学习Rust,通过学习Rust去掌握计算机组成原理, 操作系统, 网络, 数据结构等计算机科学知识。

现在有纯Rust实现的操作系统等。理论上你完全可以避开C语言。

为什么说理论上?因为现实世界操作系统还是C的地盘。虽然实际开发中你不一定要和C打交道,但学习C语言对你掌握计算机基础可能更有帮助。因为计算机世界的发展是建立在C基础上的,就知识体系而言,你可能避不开C语言。

学习C语言,也帮助你对比Rust的抽象,对比式学习更有好处。看看不同时代背景下两种语言抽象有什么异同,对你的语言的大局观培养也是有好处的。

总之,学习Rust你在一定程度上是可以避过C语言的,但不要为了避而避,学习C语言有额外的好处。

同样,学习 Rust 也可以绕开 Cpp。

Rust 和 Cpp,本质上是系统编程的两套解决方案。

Cpp是演化的产物, Rust 是精心设计的产物。

Rust 虽然借鉴了 Cpp 的很多东西,但用不着先去学 Cpp 。

计算机底层运作机制,又不是C/Cpp独有的,这是所有语言的基础。

只不过,学过Cpp的人更容易接受 Rust 的概念。因为Cpp和Rust共享着很多底层基础知识,和Rust借鉴了Cpp的内存管理思路。

Rust还借鉴了其他很多语言,难道都学一遍?

学过Cpp的人,就好比是已经吃了四、五个馒头,再吃第六个馒头,就更接近饱腹。

没有学过Cpp的人,大不了从第一个馒头开始吃呗。

但是如果问题换成:用 Rust 能避开 C/ Cpp 吗? 那么答案就是不一定了。因为现实世界很多系统还是C 和 Cpp 实现的,有的时候,你必须要和 C/ Cpp 打交道,这个时候就得去学 C 和 Cpp 了。当然,也有纯 Rust 的项目,未来会更多。

Rust 只能开发底层系统软件吗 ?

Rust 只能开发底层系统软件?

前端工程师可以学 Rust 吗?

Rust可以全栈开发吗?

很多朋友有类似的问题。 答案是:Rust 可以全栈开发。

因为 Rust 是通用语言。但是如果你把我这个答案理解为我在吹 Rust 是全能语言,那你就冤枉我了。

Rust 有这个潜力,但还得结合场景。如果你是为了全栈而全栈,那用 Rust 应该也可以满足你的需求,只不过有些地方可能需要你自己造轮子,目前 Rust 生态领域还是比较早期。

说到 Rust 生态领域,我是包含了 Rust 的所有应用领域:终端工具、Web应用、网络服务、嵌入式、操作系统、WebAssembly、GUI、游戏等等。

总之一句话:只要你愿意,只要你能投入精力,你是可以全栈使用 Rust 的。

Rust 语言适合刷算法题吗 ?

Rust 语言很适合刷算法题。

但我建议你,在掌握 Rust 所有权之后再刷算法题。

为了说明这一点,我在 LeetCode上写了一篇题解:「算法题解 | Rust 字符串处理:替换所有问号」,你可以看看。

在掌握所有权之后,就不会出现在刷题的过程中和编译器去做斗争的事情,才可以把主要精力放到算法层面上。

Rust 语言发展需要依赖杀手级应用吗?

Rust 是一门系统级通用编程语言。前面也说过, Rust 语言可以拿新时代的 “C” 来类比。

回想一下 C 语言的发展,是靠杀手级应用起家的吗?Unix 算杀手级应用吗 ?不算。Unix是基础设施。

Rust 应用领域虽广,但现在的主要应用就集中在各个领域的基础设施上:云原生、区块链、操作系统、网络服务等基础设施上面。

Rust 虽然可以支持全栈,但目前的重点还不是应用。所以,暂时不要希望有什么杀手级应用去推动 Rust。

一门语言,除了杀手级应用的影响之外,还有一种方式可以推动它不断前行和扩张,那就是大厂的支持。

Rust 现在基本都得到了全球IT巨头的认可:Google、Facebook、微软、亚马逊都在使用 Rust。

因为大厂们要想可持续发展,必然要想办法解决未来的安全问题,必然要布局。不信去看看微软的一系列关于 Rust 的文章。

所以,Rust 根本不需要靠什么杀手级应用推动。但不排除,未来会出现 Rust 实现的杀手级应用。

感谢阅读

本系列未完待续,下一篇要回答的五个问题,分别是:

  1. Rust 语言该如何学习?

  2. 听说亚马逊招了 Rust 核心团队的人?亚马逊会是 Rust 的 “爸爸” 吗?

  3. 目前已经将 Rust 用于生产的场景有哪些?状况如何?

  4. Rust适应哪些业务领域开发?Rust 在云原生&嵌入式&HPC 领域的可能?

  5. Rust 就业前景如何?

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!