为什么使用Rust的开发者如此喜欢它

2020-06-06 10:51:00

2020年开发人员调查结果出炉了,在参与调查的6.5万名程序员中,铁锈再一次成为最受欢迎的语言。自2016年以来,铁锈一直位居榜首,这表明它有一些开发人员喜欢的东西。在那些表示目前使用Rust的调查受访者中,有86.1%的人希望明年继续使用它。这是“铁锈”连续第五年蝉联这一榜首,所以我们认为它一定有什么特别之处。

几个月前,我们采访了Stack Overflow的头号Rust贡献者杰克·古尔丁(又名Sepmaster),解释是什么让Rust在使用它的程序员中如此受欢迎。以下是他不得不说的话的一个样本:

“简短的答案是,Rust解决了许多其他语言中存在的痛点,提供了坚实的前进一步,同时也带来了有限的负面影响。”

整篇文章非常值得一读,因为他介绍了Rust对于来自其他语言的程序员的好处(以及痛点)。不过,尽管杰克口若悬河,很有说服力,但我们还是希望听到更多用户的意见。所以我在我们的铁锈聊天室和铁锈论坛上寻求评论。Ruust用户是一群热情的人,我在一些友好的辩论中获得了一些迷人的见解。

(为了长度、清晰度和概念性分组,对下面的引语进行了编辑。它们中的许多都来自Rust用户论坛上的这个帖子,所以如果您想要完整地和上下文地阅读它们,请随意阅读。)。

无需多说,这就是为什么Rust获得了如此多的爱,直接来自Rustaceans自己(包括Rust核心团队的两名成员)。

虽然有些语言只是对现有概念进行了改进和简化,但一些用户觉得Rust实际上是在用编程语言做新的事情。而且,做新东西不仅仅是为了炫耀;他们觉得这些设计选择用现代编程解决了难题。

ZiCog:“在我专业使用了大约40年的十几种语言中,铁锈是唯一一种真正引入了新功能的语言。也就是说,在没有垃圾收集或复杂运行时系统的编译的真实系统编程语言中,内存使用安全的整个概念。“

Denys Séguret:“当我们发现一个相当强大的功能(如在env变量的掩饰下读取编译上下文元素)可以如此优雅地完成时,甚至可以在编译时解决,而没有任何丑陋的不一致时,我们经常会有这样的热情。”

Janriemer:“NPM的工程师克里斯·迪金森(Chris Dickinson)的一句话完美地概括了这一点,因为我当时在不知道这句话的情况下也有同样的想法:‘我对拉斯特最大的赞美是它很无聊,这是一个令人惊叹的赞美。’

Rust是一种编程语言,看起来像是由用户体验设计师开发的。他们对这门语言有一个清晰的愿景(一个原因),并仔细选择在语言中添加什么和修改什么,同时倾听社区真正想要的是什么。没有任何悬而未决的问题,它们都是一个连贯的整体,完美地支持了开发人员的工作流程。“。

Skysch:“我从Haskell来到Rust,我觉得Haskell是一门非常优雅和安全的语言。对我来说,最大的不同之处在于Haskell中的高性能代码和惯用的“干净”代码之间的差异比Rust中的更大。大多数Rust代码看起来像大多数其他Rust代码,即使它执行得很好。如果有人在与您通常所做的不同的库和目标下操作,Haskell可能会很快变得陌生。语法上的微小差异可能会导致行为上的巨大差异,而拉斯特在这一轴上的一致性更强。

也许是世界上最好的依赖管理和构建工具,它实际上已经解决了“依赖地狱”的问题;

目标裸机(例如,编写操作系统内核或设备驱动程序;将Rust用作‘高级汇编器’)“。

dboross:“编译时间保证:当我想到”静态类型语言“时,我会想到Java或C#,或类似TypeScript的东西。它们在编译时保证您的代码具有正确的类型,并将一组错误从运行时移到编译时。在这一点上,生锈的程度要高出一个数量级!编译时检查扩展到线程安全、所有权语义和验证。

枚举意味着,在编译时,我可以声明我的数据可以作为的变量集,当我访问该数据时,我被迫考虑所有的可能性。特征意味着,当我的代码是模板化/泛型时,我具有所需的确切功能。

铁锈具有极强的向后兼容性。我可以运行为Rust1.0编写的代码。同样,我可以编写我知道下次更新Rust时不必更新的代码。

而且不仅仅是Rust本身-该语言使库拥有同样的保证。请考虑两个事实:

在类型检查中,只考虑函数的签名。不需要依赖实现来确定调用者是否正确(就像在Scala或Haskell中可以做的那样)。

扩展类型系统意味着接口的不正确使用会变成类型错误,而不是运行时错误。

由于这两件事,库可以100%确定它们在发布新接口时保持向后兼容性。在Python、Java、Javascript、甚至Scala或Haskell中,如果您想确保保持向后兼容性,则需要格外注意实现。在Rust中,它是免费的:如果您没有更改函数签名,它将保持不变。“。

Peter Varo:“Rust找到了一个最佳点:它和C或C++一样低级,具有所有这些优点(例如,控制、大小、速度等)。同时,它与Haskell一样高水平,拥有令人惊叹的功能遗产。它仍然是势在必行的,所以对大多数人来说都很容易理解,而且它和Python一样灵活。例如,像“鸭子类型”这样的概念发生在编译时(即特征界限),但是它没有过时的、面向对象的编程模型及其所有众所周知的问题。

最后但并非最不重要的一点是,所包含的电池:简洁的语法、语言提供的少量功能、标准库的完整性以及文档的一致性和质量,包括为初学者和高级用户提供的学习材料,都是促成因素。“。

Bonk:“使用Rust/Cargo,我可以专注于实际代码,而不是构建系统。不需要花一整天的时间阅读另一个构建系统。与Rust的交叉编译是如此简单和轻松,以至于当您阅读如何进行交叉编译时,您会忍不住想“等等,我肯定遗漏了什么。”

当你在铁锈之外的时候,有些东西听起来像是空洞的口号,但当你开始使用它时,你会惊喜地意识到其中有很多真相:

当您花费时间编译代码时,您不必调试代码,从而节省了时间。

您不再害怕重大重构。一旦您的重构代码编译完成,它就可以按预期工作。

它确实迫使您进行适当的多线程(当然,您仍然可以死锁,但是崩溃类型的bug要难得多)。

我发现自己做的样板代码要少得多。无论我需要什么样板代码,我通常可以隐藏在不同的模块中,这样它就不会妨碍实际的应用程序逻辑代码。(最常见的例子是错误类型转换)。“。

当前的许多编程讨论都围绕着是使用允许您处理内存管理的快速、低级语言,还是使用具有更高安全防范措施的高级语言。对于铁锈的粉丝们来说,他们喜欢它兼而有之。

PubNub的建筑师杰伊·奥斯特(Jay Oster)说:“这类似于在完全黑暗的环境中游荡了整个职业生涯,然后突然领悟到两个事实:

你并不完美。你会犯错的。那些错误会给你带来很多问题。

我看到一种常见的异议,有些人宣称他们实际上是完美的,他们确实写出了完美的代码,一切都很棒,他们不能理解为什么其他人都对铁锈感兴趣。但这位老山羊很清楚,这些人还没有认识到问题不是严格地说是他们自己的问题,而是其他人的问题。这是一个规模经济的问题。

换句话说,如果我有时间和精力关注每一分钟的细节,并精心手工制作每一行漂亮的代码,而不考虑语言或实现细节,我自己就可以独立编写完美无缺陷的代码。但那并不重要。一旦我开始依赖其他人编写的代码,或者新的贡献者出现并进行修改,我所有所谓的完美保证现在都与现实不符。“惯例的正确性”并不具有可比性。

传统将会有缺陷,不切实际的大量时间和精力将被花费在试图自动化一开始就不应该存在的创可贴上。“啊哈!”Moment意识到,通过将这些相同的约定直接放入语言和编译器中,实际上可以获得更强有力的保证。

最重要的是,如果您愿意,您还可以获得与微调手写程序集相当的性能。你可以既吃蛋糕又吃蛋糕!“。

dboross:“作为一名库作者,复杂的特性/通用系统意味着我可以制作复杂而又易于使用的界面。这些接口不能被错误地使用,这意味着我不必执行运行时检查,我的用户甚至不必考虑问题用例,因为他们不会编写它们。

作为一名图书馆消费者,丰富而广泛的板条箱生态系统使我能够在广泛的不同领域编写代码,而无需深入研究每个领域的细节。我不需要知道JSON解析器或编写器如何使用serde-而且我的知识匮乏永远不会成为bug的来源,因为我得到的是编译时错误,而不是运行时错误。

当我使用铁锈的时候,我感觉自己真的受到了照顾。有这么多琐碎的事情,从包升级,到类型错误,再到传递接口不期望的字符串,并得到一个随机的运行时错误,这在Rust中是完全没有的。我只要想想算法就行了!“。

还记得我提到的那场辩论吗?我看到的一些反反复复的情况是因为我想知道最受欢迎的标题是否来自Rust,因为Rust的用户群很小,他们大多选择使用这种语言。虽然这是事实,在我们的调查中,只有5.1%的受访者在过去一年中使用过Rust,但这些用户希望继续使用Rust。

CAD97:“非常坦率地说:我认为铁锈在这里的好处是很少有人被迫使用铁锈。尽管如此,大多数人仍在选择性地使用铁锈。

我并不是说Rust配不上这个标签(我非常肯定它配得上!),我只是认为Rust处于非常有利的地位,可以“玩弄”这一指标,所以实际上是在这里衡量,因为它有大量的爱好者选择性采用,但那些强制人们使用他们不愿继续使用的语言的人(呃)采用率很低。“。

ZiCog:“如果你使用任何编程语言的时间足够长,你就会觉得它很烂。用太多,用了很多年,它们都很烂。

那些用各种语言进行大量编程并拥有技能和天赋的人,最终发明并实现了自己的新编程语言,以修复他们过去遭受的所有痛苦。正如你所知道的那样,新的语言就像杂草一样如雨后春笋般涌现。

鉴于上述情况,如果您问程序员他们喜欢哪种语言,答案将不是他们正在使用的语言,也不是他们过去使用过的任何语言。

到目前为止,几乎没有程序员必须长期使用Rust,所以他们当然会说他们喜欢Rust。“。

PubNub的建筑师杰伊·奥斯特(Jay Oster):“几十年来,我对各种语言都有类似的‘草总是更绿’的偏见。但我认为这不是造成这一现象的主要因素之一。如果是这样的话,我们可能会认为一些较新的语言会在这些调查中脱颖而出,对吗?“。

H2CO3:“到目前为止,Rust是我最喜欢的语言,尽管我已经使用它4年了(出于性能的需要,对于个人项目,以及”真正的“代码)。当我有了这么多使用C和C++的经验时,我已经发现了它们捆绑在一起的严重缺陷。

见鬼,即使是Haskell,最优秀的优雅语言,也在大约一年后显示出不可避免的丑陋,当时我不得不开始摆弄语言扩展和方言,以获得一个有点高级的库来编译。

这根本没有发生在铁锈地区。装满了步枪和设计错误的东西从未从迷雾中浮现出来。

asafigan:“我相信铁锈学起来很有挑战性,但用起来很有价值。我认为,只要回报足够好,人们有多么喜欢接受挑战,这实际上是令人惊讶的。

我发现Rust很难学,但很容易使用。我认为很多人是从不同的语言来到Rust的,他们惊讶于它有如此大的不同(因此很难学习)。但他们忘记了一开始学习编程有多难。在大学里,我们有两门Java面向对象编程的课程。到最后,大多数人仍然没有真正理解。锈语与其他语言有很大的不同,很难学。如果您所知道的都是面向对象的,那么学习函数式编程是很困难的。如果您所知道的一切都是功能性的,那么很难学习OOP。如果您只知道GC或手动内存管理,那么很难了解所有权。特征也很奇怪。但为了更好的软件,这是值得的。“。

cfsamson:“在Rust,我发现很多工作都是前置的。这会使简单的问题更难开始,但不会在以后产生困难的问题。如果有问题,最常见的是问题域本身比我想象的要难,而且与我使用的工具无关。我发现我预先支付的价格绝对物有所值。一旦你熟悉了这门语言,我也会发现价格很低。“。

从与粉丝的交谈中,我发现他们对这种语言的热爱很难闪耀出来,即使他们不同意。铁锈用户blonk认为这是一个社区范围的特征。

布朗克:很明显,整个“要尊重”的做法运作得很好。有几个案例中,IMHO,人们恶意提问,但社区成员没有对情况做出巨大的回应,而是真诚地回答,这缓和了局势。

如果你想知道是什么造就了一个忠实的支持者,那就去和最忠诚的人谈谈,对吗?我联系了“铁锈”核心团队,想找出为什么他们认为“铁锈”年复一年地受到如此多的爱戴。格式略有不同,我保留了问答布局。

艾琳·鲍尔(Erin Power)是柏林的一家铁锈开发商。从2015年的1.0开始,她就一直在使用Rust。她是Rust治理工作组的负责人之一,也是“Tokei”的创建者,“Tokei”是用Rust编写的流行的开源代码计数器。

问:使用铁锈的人似乎真的很喜欢它,你认为这是为什么?

答:我想这是因为拉斯特做出了很大的承诺,并兑现了这些承诺。与任何其他高级语言一样,RUST提供了自动内存管理,但它是在编译时完成的,因此没有隐藏的成本或行为需要考虑。

生锈一直是为我们在现代硬件中期望的东西而设计的。线程安全和数据竞争,在其他语言中可能是常见的步枪,在语言级别上被考虑在内。因此,您可以非常轻松地充分利用工作站的功能,而无需进行大量更改,也不会出现令人头疼的问题。我一直印象深刻的是,rayon(Rust中的一个受欢迎的库)可以通过只更改一行代码来并行化您的整个工作负载。

因此,使用Rust编写了许多高质量、快速的实现,而且由于有了Cargo和crates.io(Rust的包管理器和社区运行包注册中心),在内部和与整个世界重用和共享代码从未像现在这样容易。

Cargo处理包含几到几十个包的大型存储库就像处理一个包一样好,您不需要花几天时间编写构建文件就可以拥有您想要的配置。

不仅可以轻松地管理和更新Rust依赖项,Rust本身也非常容易使用Rustup在不同版本的语言之间进行升级和切换;默认情况下,Rustup是一个工具链版本管理器。

上面的任何一点都足以让人喜欢Rust,但总的来说,它使Rust成为一种令人难以置信的令人信服的语言,用它编写和创建项目都会让人感到耳目一新。

问:Rust团队计划让用户对它保持喜爱的是什么?

答:嗯,我不能说所有的团队都计划了什么,因为Rust有几十个团队,主要由志愿者组成,他们都是半自主的,都在努力改善Rust语言和周围的生态系统。你可以在GitHub上找到该项目今年的路线图(不过我会注意到,它是在新冠肺炎之前提出和编写的)。

答:自从Rust在2015年发布1.0版以来,我就一直在编写它,从那以后,我一直试图把我的编程时间花在它上面。我编写并维护了相当多的开源应用程序和库,这些应用程序和库都是我维护的,并且自2018年以来我一直在专业地与Rust合作。

问:我看到一些评论说铁锈很难掌握,在我们的调查中,只有一小部分人(~5%)使用过铁锈。你认为进入铁锈有很高的门槛吗?为什么或者为什么不?

答:我认为“铁锈”中确实有一些特定的概念,学习和使用的门槛很高。虽然说是轶事,但我在Rust之前的背景是全栈web开发和设计;我以前没有“系统”或“函数”语言经验,我发现用Rust学习这些概念比其他现有语言容易得多,所以我不同意Rust整体上有很高的门槛。

我觉得很大的障碍来自于Rust是一种相对较新的编程语言,目前还没有来自其他角度的丰富资源来适合不同人的心理模型来学习,就像您使用更成熟的语言所拥有的那样。希望随着时间的推移,我们会有更多样化的学习材料来帮助教授和提高对这些概念的理解。

虽然只有一小部分人编写了Rust,但它的采用是如此成功,人们日常使用的许多关键软件已经在Rust中被重写或创建。铁锈已经在五大科技公司中的每一家都采用了,而且不仅仅是企业感兴趣。Dropbox或OneSignal等规模较小的科技公司在Rust有很多核心基础设施提供服务。

弗洛里安·吉尔彻(Florian Gilcher)自2013年以来一直在Rust编程。他从社区团队一开始就是成员,目前是核心团队的一员。弗洛里安共同组织了前五届RustFest,并共同组织了OxidizeConf。在此之前,他活跃在Ruby社区。

问:使用铁锈的人似乎真的很喜欢它,你认为这是为什么?

答:简单的第一个反应是:因为它在很多方面都是好产品。杰克·古尔丁已经做了一个很好的概述,我不想在你的博客上重复了。

我将详细说明为什么这很重要:许多编程语言和工具都是以对抗性和可比性的方式销售的。“比X好”、“X是新的Y”等。拉斯特一直采取的做法是让好的特征脱颖而出。例如,一种构建Rust的廉价方法是说所有权和借用权是C和C++问题的修复。然而,这产生了一个可怕的论点:它们对许多其他事情都有好处,而这个论点是我。

..