深入研究Rust编程语言的快速指南

460 阅读16分钟

什么是Rust编程语言,它的用途是什么?

Rust是我喜欢称之为 "下一代 "的编程语言。它可以沿途检查你的工作,所以它有助于在它们进入部署阶段并导致停机之前抓住错误。

你可以将Rust用于一般用途或任何类型的应用程序,但它主要侧重于(并且面向市场)高速和可靠的应用程序,这些应用程序的内存使用率较低。

尽管它主要用于高性能项目,但我认为Rust对于一般用途来说也是很好的,因为使用Rust可以节省很多时间,而不是使用不同的语言,在凌晨2点因为服务器故障而不得不压制bug。

相反,你只需点击编译,如果有问题,Rust会在你部署之前让你知道!这就是Rust。

你认为Rust的代码检查功能是人们喜欢使用Rust的主要原因吗?

我认为Rust受欢迎的原因有很多,因为Rust的每一部分似乎都是为了改善开发者的体验而设计的,只是让代码的工作变得更加容易,尤其是编译器。

编译器甚至会在你的代码出现错误时打印出来,然后打印出一个更正的版本,并说 "嘿,你可能想试试这段代码来解决这个问题!"

对我来说,这只是让整个开发人员的体验真的很棒。

你能想到任何建立在Rust上的应用程序或网站的例子吗?

就具体应用而言,有很多Linux命令行工具是用Rust编写的,比如ls和grip。(它们已经被做成了多线程,并被赋予了现代的功能,比如在终端中使用图标和东西。)

还有很多后端东西都是用Rust编写的(大多数人都没有接触过),但比如说Discord,他们的很多基础设施现在都在Rust上运行。

因此,对于像ZTM服务器(我们的私人开发者Discord社区)这样的大型服务器,现在有超过30万名学生......这是一个由Rust管理的巨大数据量。

Rust快速处理这种数据量的能力对于快速的网络服务和良好的用户体验来说真的很重要。

随机问题 Rust和R编程语言之间的区别是什么?

嗯,不知道这个问题!我没有使用过R,但它与Rust没有任何关系。

(可能是人们认为它是同一个工具或一个变种,仅仅是因为它们都是以同一个字母开头的)。

Rust是容易还是难学?

这取决于你如何去学习它。如果你在没有任何经验的情况下来到Rust,我个人认为它的学习难度是简单到中等的。(就像我之前说的,编译器在指导你学习方面非常棒)。

但是如果你有多年的面向对象的背景,那么你可能会发现切换到Rust会稍微困难一些,只是因为它与你已经知道的东西有什么不同,而且你会试图将面向对象的原则应用到Rust中,这与这种方法并不相称。

Rust是一种函数式编程语言吗?

Rust是一种功能型和命令型的混合语言。这里没有很多典型的面向对象的编程方法。没有类或继承,但如果你想,你可以模仿这些行为,但这不是使用Rust编程的推荐方式。

你是否需要有编码背景来学习Rust,或者你可以全新地来学习它?

我认为如果你对软件工程的职业很认真,那么你肯定可以把它作为你的第一门语言。

但是,如果你更多的是随意编程,或者在一些小的应用程序或网站上工作,那么在你跳入Rust之前,有一点编程经验会有所帮助。

你认为Rust在未来10年的发展轨迹是怎样的?你认为这种语言将如何发展或进步?

10年是一个相当长的时间,所以很难说。Rust的发布周期(新的更新)是每6周一次,所以我们基本上每6周就有一个新的版本和可能的新功能。

然后,每隔1.5-2年,他们会将功能锁定在这一点上,这使得他们可以在不破坏旧代码的情况下进行突破性的修改,通过使用一个特殊的添加系统来保持所有东西的分离。

就其10年的发展轨迹而言,我认为在未来5年内,人们会更多地将Rust用于高速应用和任何需要大量性能的东西,而在10年内,我认为我们会看到更多的通用用途,这要归功于编译器和Rust编码的简易性。

Rust比Python或C++好吗?哪种语言的性能最好?

就 "最佳语言 "而言,没有最好的语言,只有适合你的需求或目标的最佳语言。然而,就性能而言,Rust确实表现得非常快,与C和C++相当。它也有很多伟大的功能,但没有看到任何性能上的损失。

(传统上,如果你有一个脚本语言或垃圾收集语言,它们有很多开销来使它们工作和方便,但在Rust中,你得到同样的方便,而没有性能问题)。

Rust是基于C++的吗?

不,Rust是它自己的语言。最初的编译器是用OCaml写的,然后最终被引导了,现在Rust是用Rust写的。

然而,Rust确实从不同的编程语言和范式中获得了很多灵感和例子。

比如说

当你在Rust中创建一个变量或对象时,它的方式是,当你创建它时,你就拥有了它,所以那块内存就是你的变量。

像这样的想法来自于C++,但Rust将其正式化为一个系统,它为你跟踪一切,这就是你如何获得巨大的性能和人体工程学。

Rust编程语言最适用于嵌入式系统的哪些领域?

就嵌入式系统而言,你需要针对一些更流行的芯片,所以,真正的小芯片,如计算器和其他东西,可能不是最佳选择。

但是对于Raspberry Pi或类似的产品来说,Rust将是一个很好的选择,因为有目标,你可以为这些芯片进行编译。

如果不确定的话,最好的选择是简单地检查你的芯片组是否支持,这样你就可以克服任何问题。

使用Rust的最佳文本编辑器或IDE是什么?

对于Rust,我推荐VScodeClion

CLion实际上写了他们自己的Rust插件,它将为你分析代码,为你提供自动完成和所有这些好东西。

VScode使用Rust Analyzer,这是一个开源项目。这意味着,当Rust更新时有新的提交,VScode是第一个更新并采用这些变化和功能的IDE。

我们可以使用Rust而不是Python,用于量子计算吗?

我没有做过任何关于量子计算的事情,所以我不确定,抱歉。我知道Python在创建机器学习的绑定和东西方面非常流行,所以我现在可能会坚持使用Python。

Rust是否有可能取代C,成为默认的HFT编程语言?

我没有做过任何(HFT)高频交易编程,然而,鉴于HFT所涉及的风险,我认为你会希望尽可能多的东西检查你的代码。

考虑到这一点,我想随着时间的推移,人们会过渡到Rust,这样他们就不会有任何错误的交易,在几分钟内就会损失几百万美元!这就是Rust。

在您看来,成为开发者的最佳方式是什么?

成为任何开发人员的最好方式就是开始写代码。

工作是写代码和构建东西,所以如果你开始构建一个小项目,并在转向更大的项目之前逐渐增加更多的功能,你将开始拓宽你的视野。

另外,不要只拘泥于一个特定的细分市场。尝试不同的东西,看看你喜欢什么,不喜欢什么,并找到你擅长的东西。最终,你会有足够的项目,并能够制作一个投资组合,这样你就可以向企业推销你的技能,并获得一份职业。

初级开发人员应如何准备面试?

算法!

面试官喜欢给你算法和数据结构的问题,所以花几个月的时间练习这些问题,搞定面试,然后一旦你得到工作,你就可以做更容易的事情了!

注意

我们在Zero To Mastery有一个课程,正是关于这些数据结构+算法的面试问题

你如何克服 "我知道的不够多 "的持续感觉?

我总是有这种认识不足的感觉,但我通过建造东西来克服它。

比如说

如果我设定了一个目标,要建立一个特定的项目,我就会努力工作,直到完成。看起来很简单,但通过能够完成它,我现在知道我在那个特定领域有足够的了解,这可以给你带来信心。

编程的问题是,总有一些新的东西需要学习,你永远不可能知道所有的东西。但当你意识到这一点时,你就会感到自由,并能通过它来适应。

另外,总是有一些东西。通常,一些你不知道的小细节最终会成为一个项目的关键所在。问题是,通过在项目中学习,你会比没有亲身经历的时候更了解它。

不要试图了解一切。相反,专注于学习20%的重要内容,然后学会适应,并学会如何有效地学习!

你花了多长时间得到你的第一份开发者工作?

对我来说,是3年,涉及到很多制作项目和提交申请。

如果你有学位,会有帮助,所以如果你的经济状况允许你上大学并获得学位,那么这可能是有帮助的,主要是因为他们用来过滤申请人的软件通常会在将你移到下一个部分之前检查 "必须有学位"。

有一些方法可以绕过这个问题,比如优秀的投稿或在编码比赛中被认可,等等(你也可以做自由职业道德黑客bug赏金,和其他事情,而不需要学位或需要被雇佣)。

在进行职业转型,成为一名开发人员时,如何才能脱颖而出?

对于实践和经验,与作为教程和视频培训一部分的项目一起工作,但然后采取下一步,并扩大这些项目。

潜心学习他们的工作方式,增加新的功能,然后一旦你适应了这个,就开始完全从头开始做自己的项目,因为这将帮助你脱颖而出。

这样你就有了开始的基础,所以就不那么令人生畏了,然后你就可以在此基础上,将自己从人群中区分出来。

注意

ZTM的学生Duaij正是这样做的,他建立了一个小的应用程序,为他目前的公司解决了一个问题,他们继续支付他的教育费用,成为一个全职的开发人员

你从学生那里得到的关于Rust的常见问题中,有哪些是我们到目前为止还没有涉及的?

Rust是相当复杂的,有很多元素,所以从来没有一个具体的问题是突出的,更多的是一系列的问题。

也就是说,我们在ZTM Discord中确实有一个专门讨论Rust的频道,人们可以在那里问任何问题,但是没有,现在没有什么突出的问题,对不起。

Rust和Go之间有什么区别?它们的设计目的是否相同,你更喜欢哪个?

比起Go,我更喜欢Rust,仅仅是因为我认为Rust有更多的功能,而且我非常喜欢它的编译器,因为它可以捕捉到我所有的bug

至于区别,Rust更像是一种通用语言,所以你可以用它做任何事情。而Go更多的是为谷歌设计的微服务等。

另外,Go遵循的是人们可能更熟悉的传统编程模型。这意味着,与跳入Rust相比,跳入Go真的很容易(假设你以前有编码知识),仅仅是由于差异和学习Rust需要额外的工作。

如果你知道Python或Javascript,你会发现Go是一种更容易上手的语言,并且在几周内就会有相当的效率。

你在自学时最喜欢使用哪些资源?

我的自学之路与今天的情况有些不同,因为当我开始学习时,我没有互联网,也没有机会接触编程书籍或课程。

当时我有点跌跌撞撞地通过Windows 95,最后,我发现了一个埋在Windows文件夹深处的帮助文件,里面有QBASIC和一些非常基本的命令,有了这个,我就学会了把我的数学作业自动化。

作为一个学生,我不想做家庭作业,然后从那里我就一直走下去。

正如我所说的,我的道路与今天的典型情况有很大的不同!

懒惰的程序员在制造自动化的东西方面真的很有效率 😉

你推荐什么样的入门项目可以利用Rust的特性?

对于入门项目,我总是选择GNU的实用程序,如lscatecho。这些都是非常容易上手的。

我总是推荐这些,特别是如果你有LS或GRIP的话,是因为你可以从简单的开始,只做你需要做的最基本的事情,但你可以随着你对Rust的学习不断增加功能。

比如说

你可以从加载文件开始,一次只读一个文件,然后你可以开始添加并行处理线程等。

之后,你可以开始用不同的字符串解析做优化,然后再添加更多的功能,比如颜色,就这样一直下去,因为你可以添加的功能太多了。

谁发明了Rust?它背后的人是谁?

Graydon Hoare在Mozilla工作时创建了Rust作为一个宠物项目。

莫兹拉发现了他们的工作,然后开始资助这个项目,这很有意义,因为网络浏览器是周围最复杂的软件之一。它们基本上是一个具有一大堆功能的操作系统,因此随着时间的推移,代码变得越来越复杂。

但是,由于Rust的编译器有助于消除这种复杂性,因为它可以检查所有的东西,所以Mozilla帮助资助它的创建是完全有意义的。(Rust在每次编译时都会检查每一行!)。

你认为Rust在哪些方面可以改进?

如果Rust有一个垃圾收集的接口就好了,这样如果你只是想把一些东西扔在一起而不必担心处理寿命问题,或者如果你做了太多的数据拷贝,那么你就可以了。

如果有一种方法可以说 "嘿,我只是想打开垃圾收集模式",然后忽略所有的跟踪问题,那就更好了。

这可能已经可以通过一些花哨的宏或语言功能来实现了,但如果能有这样的内置功能就更好了,可以帮助人们轻松进入Rust,不用担心手工管理内存。

你经常使用 "不安全 "模式吗?

我用Rust编程已经6-7年了,我从来没有使用过不安全模式。

Rust有内存安全的保证,而且它执行了一个类型系统,所以如果你告诉编译器你正在处理某人的名字,那么你就不能把这个人的名字转换成卡车或车辆之类的,因为这是不允许的。

但是,只要你进入不安全模式,你就可以进入那个单独的内存块,并告诉编译器,"嘿,这实际上是与它所列出的完全不同的东西,但相信我,我知道我在做什么"。

这就是不安全模式的目的。手动告诉编译器,你想转换一些东西,或者以不同于语言认为发生的方式来解释它。

但就像我说的,7年来,我从来没有遇到过需要使用不安全模式的问题,因为当你进入不安全模式时,你会失去编译器的一些好处,而我更愿意让我的代码顺利地运行

也就是说,如果你有C++的背景,那么你可能想用这种模式让你运行并绕过学习Rust的一些过程。

你能用Rust制作游戏吗?

谈到游戏开发,我总是问2个问题。

  • 你想做一个游戏吗?
  • 还是你想做一个游戏引擎?

如果你想做一个游戏,那么我推荐你使用Unity或Unreal引擎,因为这些引擎已经构建好了,可以让你在上面做游戏了。

但是,如果你想制作一个游戏并进行所有的编程,那么在你开始制作游戏本身之前,你可能会把80-90%的时间都花在制作引擎上!这是不可能的。

然而,有多个板块(Rust中的库)可以让你制作游戏,其中一个板块确实有一个内置的编辑器,所以它类似于Unity,但它是非常简单的。

其他箱体则更注重碰撞检测或图形绘制和其他东西。所以你完全可以用Rust来开发一个游戏,但是你要问自己,你是想先做一个游戏还是一个引擎。

是否有计划在ZTM Rust编程课程中加入更多的主题或项目?

就主题而言,我们每年都会在ZTM上更新课程,所以当Rust有了新的功能,它们就会出现在Rust课程中。

至于项目,可以在Discord频道上发布一些信息,让我们知道你想做什么。如果有足够的人想要这个项目,我们就会把它做出来。

在哪里可以学到更多关于Rust的知识?

如果你想了解更多关于Rust编程语言的知识,并跟随一个有例子和教程的逐步培训计划,那么请在这里查看Jayson的Rust课程。