当前位置: 主页 > 常见问题 > >

    为什么程序员如此钟爱rust

    时间:2020-07-02 00:15来源:未知 作者:信息发布中心 点击:
     

    2020年开发人员调查的结果再次出现,Rust再次成为参与该计划的65,000位程序员中最受欢迎的语言之一。 自2016年以来,Rust一直排名第一,这表明使用它的开发人员都喜欢它。表示目前正在使用Rust的调查受访者中有86.1%希望明年继续使用Rust.这是Rust连续第五年荣登榜首,因此我们认为它必须有一些特别之处。 几个月前,我们请Stack Overflow的主要Rust贡献者Jake Goulding(又名Shepmaster)来解释编码人员为何如此喜爱用Rust语言,他这样认为:“简单来说,Rust解决了许多其他语言中存在的痛点,从而在有限的缺点下迈出了坚实的一步。” 对于Rust语言的评价也非常多,下面这些是网盾整理的Rust聊天室和Rust论坛上用户们发表的评论,他涵盖了Rust对于来自其他语言的编码人员的好处(以及痛点)。我们希望听到更多用户的来信。 Rustaceans本身(包括Rust核心团队的两名成员)的评论: “全新的成熟的功能。尽管某些语言只是在增加和简化现有概念,但一些用户认为Rust实际上是在用编程语言来做新的事情。而且它并不是为了炫耀而做新的事情。他们认为这些设计选择解决了现代编程中的难题” ZiCog:“Rust是我四十年来专门使用的唯一一种语言,它实际上引入了真正的新功能。就这样,在没有垃圾回收或复杂的系统运行时情况下,使用经过编译的,真实的系统编程语言来保护内存使用的整个思想。" DenysSéguret:“当我们发现一个非常强大的功能(例如在env变量的伪装下读取一个编译上下文元素)可以如此优雅地完成,甚至在编译时解决而没有任何难看的不一致之处时,我们常常会充满热情。” Janriemer: “pm工程师克里斯·迪金森(Chris Dickinson)的一句话对我来说是完美的总结,因为我当时也是这么想的,当时我还不知道这句话:‘我对Rust的最大称赞是它很无聊,这是一个了不起的称赞。Rust是一种编程语言,看起来像是由用户体验设计师开发的。他们对语言有清晰的愿景(原因),并在倾听社区真正需求的同时,仔细选择要添加到语言中的内容和返工的内容。没有零散的结局,它是一个连贯的整体,可以完美地支持开发人员的工作流程。" skysch:“我是从Haskell来到Rust的,我觉得Haskell是一种非常优雅和安全的语言。对我而言,最大的区别在于,Haskell中的高性能代码和惯用的“干净”代码之间的差异比Rust中的差异更大。大多数Rust代码看起来像大多数其他Rust代码,即使它们表现良好。如果某人在与您通常执行的操作不同的库和目标下进行操作,Haskell可能很快就会变得陌生。语法上的微小差异会导致行为上的巨大差异,Rust在该基准线上具有更高的一致性。” PubNub的设计师Jay Oster:“除了安全和性能外,我们还有: 一般性的特质; 代数类型; 功能和命令式范式; 也许是世界上最好的依赖管理和构建工具; 实际上已经解决了“依赖苦痛的境况”问题; 对联机的文档,测试和基准的出色支持; 庞大且不断发展的库,抽象和工具生态系统; 程序宏指令; FFI现有代码的互操作性; 支持数十种平台(更多功能即将推出!); 以及有益健康且确凿的开发人员体验。 Rust是勾选所有框的唯一语言: 内存安全 类型安全 无数据竞争 提前编译 建立并鼓励零成本抽象 最小的运行时间(没有垃圾回收机制,没有JIT编译器,没有VM) 低内存占用(程序在资源受限的环境中运行,例如小型微控制器) 定位裸机(例如,编写OS内核或设备驱动程序;将Rust用作“高级汇编程序”) daboross:“编译时间保证:当我想到“静态类型的语言”时,我想到的是Java,C#或类似TypeScript的东西。它们为编译时保证您的代码具有正确的类型,并将一系列错误从运行时转移到编译时。Rust在这方面更进一步!编译时间检查扩展到线程安全,所有权语义和验证。 枚举意味着在编译时,我可以声明数据可以存在的一组变体,并且在访问该数据时,我不得不考虑所有可能性。特性意味着,当我的代码是模板/通用的时,我具有所需的确切功能。 Rust非常向后兼容。我可以运行为Rust 1.0编写的代码。同样,我可以编写一些代码,这些代码使我知道下次更新Rust时不必更新。 而且不只是Rust本身-语言可用库拥有相同的保证。考虑两个事实: 1、在类型检查中,仅考虑功能的签名。无需依靠实现来确定请求是否正确(就像您在Scala或Haskell中所做的那样) 2、广泛的类型系统意味着对接口的不正确使用将成为类型错误,而不是运行时错误。 由于这两件事,库可以100%确保在发布新接口时它们保持向后兼容性。在Python,Java,Javascript或Scala或Haskell中,如果要确保保持向后兼容性,则需要特别注意事物的贯彻。在Rust中,它是免费的:如果您还没有更改功能签名,它将保持不变。” Peter Varo:“Rust发现了一个好地方:它与C或C ++一样基础,具有所有这些优点(例如,控制,大小,速度等)。同时,它与Haskell具有惊人的功能传承。它仍然是必须的,因此大多数人都可以使用,并且它与Python一样灵活。例如,诸如“鸭式打字”之类的概念是在编译时发生的(即特征边界),但是它没有过时的,面向对象的编程模型及其所有众所周知的问题。 最后但并非最不重要的一点是,其中包括以下内容:简洁的语法,少量语言提供的功能,标准库的完整性以及其一致性和文档质量,包括两者初学者和高级用户的学习材料都是影响因素。” Blonk:“借助Rust / cargo,我可以专注于实际代码,而不是构建系统。无需花一整天的时间来阅读“另一个构建系统”。与Rust的交叉编译是如此简单和轻松,以至于当您阅读如何做时,您会不禁想到“等等,我一定会丢失一些东西。” 当您不在Rust之外时,有些听起来像是空口号,但是当您开始使用它时,您会惊喜地意识到有很多真相: 在花费时间来编译代码时,您可以节省时间,而不必调试代码。 您不再担心大型重构。重构的代码编译后,即可正常工作。 它确实确实迫使您执行适当的多线程处理(嗯,您仍然可以有死锁,但是崩溃的错误类型要困难得多)。 我发现自己做的样板代码要少得多。以及我需要的样板代码,我通常可以将其隐藏在其他模块中,以免妨碍实际的应用程序逻辑代码.最常见的例子是错误类型转换)。” PubNub的设计师Jay Oster:“这就像在整个职业生涯中在完全黑暗的环境中徘徊,突然被两个事物所点亮: 1、你不完美。你会犯错误。这些错误会给您带来很多问题。 2、不必是这种方式。 我看到一个共同的异议,有些人宣称它们实际上是完美的,并且确实编写了完美的代码,而且一切都是桃花心木,并且他们无法理解为什么其他所有人都对Rust如此感兴趣。但是对于这只老山羊很明显,这些人还没有意识到问题不仅仅在于他们自己。其他人。这是规模经济的问题。 换句话说,如果我有时间和精力去关注每一个细节,并且精心编写每条漂亮的代码,而不管语言或实现细节如何,我本人就可以孤立地编写无缺陷且无错误的代码。但这没关系。一旦我开始依靠其他人编写的代码或新的贡献者来进行修改,我所有所谓的完美保证现在都不符合现实。“按惯例正确性”无法扩展。 惯例将有缺点,并且将花费不切实际的时间和精力来尝试使本来不应该存在的创可贴自动化。“啊哈!”现在意识到,通过将相同的约定直接烘焙到语言和编译器中,实际上可以得到更强大的保证。 最重要的是,如果您愿意,您还可以获得与微调的手写程序集相当的性能。您可以吃蛋糕也可以吃!” Daboross:“作为库类的作者,复杂的特征/通用系统意味着我可以制作复杂但易于使用的界面。这些界面不能被错误地使用,这意味着我不必执行运行时检查,并且我的用户甚至不必考虑问题案例,因为他们无法编写它们。 作为库类的使用者,丰富而广泛的模板生态系统使我能够在广泛的不同领域中编写代码,而无需深入研究每个领域的细节。我不需要知道JSON解析器或编写器如何使用Serde,而且我的知识不足永远不会成为bug的来源,因为我得到的是编译时错误,而不是运行时错误。 使用Rust时,我真的感到很被照顾。从包升级到类型错误,再到传递接口不期望的字符串,再到随机运行时错误,这些琐碎的事情变得非常多,而我在Rust中完全没有这种错误。我可以考虑一下算法!
     

    ------分隔线----------------------------