https://dpc.pw/still-in-love-with-rust
DawidCiężarkiewicz又名dpc
我想我在2012年左右就发现了Rust。那时它的语言与今天的语言完全不同。 它有绿线, @和~使用了很多,甚至有一个GC。
Rust引起了我的注意,因为我正在为自己寻找一种语言。 我一直认为自己是“C人”:自下而上的开发人员,首先学习机器代码,然后学习更高级别的编程。 虽然C是我选择的语言,但我再也受不了了。
我厌倦了用C编写一个正确,强大的软件是多么困难,特别是:
无法创建可靠的抽象和漂亮的API,
段错误,仔细检查我的指针和我的代码普遍缺乏信任,
make和make建筑系统。
我喜欢简约和极简主义,我喜欢灵活性和控制力,但我无法忍受原始主义和缺乏现代特色。
随着时间的推移,我越来越喜欢Rust。 语言不断发展,这是我个人最喜欢的方向:现代的C.在某些时候,我意识到我爱上了Rust。 经过几年的使用,我今天仍然是。
看看我的github个人资料 。 它上面写着“Rust”。 并检查自2013年以来我的贡献是如何增长的.Rust使我对编程更加高效和热情。
那么让我告诉你为什么Rust是我亲爱的编程语言。
无畏
Rust给了我信心。 我仍然可能有逻辑问题或错误的架构,但我必须小心的所有类问题都消失了。
没有竞争条件,泄漏资源,悬空指针,未处理的例外,……,列表继续。
Rust支持并鼓励构建不可能滥用的漂亮API。 这使得使用第三方代码,甚至是您自己的一个代码变得更加容易。
有了Rust,我可以专注于真正的问题。 这在持续分心的时代非常重要,也是Rust整体高生产力的主要原因之一。
普遍性
我喜欢Rust的一件事是它几乎所有东西都相当不错。 您可以在Rust中编写嵌入式系统,您可以编写WebAssembly前端代码。 您编写了一个快速而肮脏的实用程序,并将其演变为一个复杂的工具。 您可以编写3D引擎或游戏,或业务服务器端应用程序或移动应用程序…
无论你要什么东西,它都可以提供。 即使在Rust仍然有点短缺的地方,也没有根本原因。 它通常只是生态系统和Library的不成熟。
原因是 - Rust结合了典型的“给定工作的最佳工具”的优势,没有他们的弱点:
C / C ++的性能,功能和控制(没有不安全和可用性问题),
JVM /脚本语言的内存安全性(没有繁重的运行时),
表达式系统,如Ocaml / Haskell / Scala,
像GC一样的自动内存管理(没有与实际GC运行时相关的问题),
依赖管理和代码共享,如Node,
像Elm这样的错误消息
像Go这样的内置消息传递,
等等…
作为精通Rust的用户,我觉得我有一个非常通用的工具供我使用。 它可能并不总是最好的工具,但它至少是一个体面的工具。 而且我可以通过我的熟练程度,项目之间的代码重用以及避免痛点来弥补差异。
所有权制度
虽然我多年来一直意识到并使用C ++的RAII ,但只有在使用Rust之后,所有内容都被点击了,我的心理模型超越了我现有的习惯。
一切都是资源! 一切都有主人。 一切都在诞生,生命并最终被摧毁。
Rust强迫我以数据为中心的方式编写代码,并在所有权关系树中构建我的项目。 这迫使我放弃了OOP的习惯。 结果证明它使我的代码变得更好:更短,更快,更容易理解和改变。
现在我看到在Rust之前我经常以典型的OOP方式编写代码:形成复杂的图形,许多对象相互引用,关系不清晰。 类API,继承层次结构就在那里,但它们只是阻碍了核心问题:构建和操纵数据。
完全详细说明我需要更长的时间,因此我将留下一个引用:
糟糕的程序员担心代码。 优秀的程序员担心数据结构及其关系。
Rust会迫使你成为一个优秀的程序员,你喜不喜欢。
社区和协作
Rust社区是最好的。 在我开始使用Rust之前,我从未真正感觉自己是任何社区的一员。 几年后,我觉得自己是Rustaceans幸福家庭的一员。
除了社区的运行方式之外,Rust本身及其附带的工具使协作变得更加容易。 例如。 Cargo使发布和重用代码变得如此简单有趣!
事实上,语言具有强烈的习语,风格和工具集,有助于满足社区准则(如clippy或rustfmt )。 让潜水进入其他人项目变得更加容易。 与例如不同。 C ++,每个人都在使用他们自己的语言子集,样式指南等与Rust一起工作,项目总是让人觉得自然而且更加狡猾。
强大的类型系统,安全保证和构建优秀API的能力使得合并PR更加无害。 在审查期间,如果贡献者没有在每一行中引入一些灾难性的错误,就不必担心。
工具
这可能不适用于其他人,但对我来说,作为一个沉重的Vim和命令行用户,Rust编码体验是任何其他编程语言都无法比拟的。
rustfmt提供的每次保存自动编码让我不用担心代码风格。 我只是:w有时候,我的代码看起来总是很完美。
rls和racer提供完成功能可以在代码流体和无痛之间来回跳转,而像ale和neomake这样的插件使修复编译错误几乎毫不费力。 而且它一直在变得更好
Rust只是不断发展,每次发布都会越来越好。
Rust 2018版正在使Rust更加愉快。
我特别期待async / await ,这将使编写异步代码变得更加高效。
重点是……在Rust中总会有一些感觉良好的东西,而且更值得期待。 我从生活和人们那里学到的一件事就是,这些改善让我们感到高兴,过了一段时间,我们已经习惯了已有的东西而不再注意它。 幸福是一种持续的改善。
不那么👌……
不谈论坏的部分是不公平的。 毕竟,爱需要接受不完美。
编译时间
在我看来,Rust最大的实际问题是编译时间。 在一些poing,他们只是变得明显,不能简单地忽略。 它们并不可怕,特别是在增量编译,RLS, cargo check和其他类似方法的情况下,但问题肯定存在。
我的建议是:如果你使用Rust,只需获得一个具有不错规格的桌面。 而纯粹的性能提升将使问题消失,至少对于中小型项目而言。 进入障碍让我们面对它 - 通常开发人员熟悉OOP,垃圾收集,动态编程语言。
学习新东西既困难又耗时,Rust会向用户提前投入很多东西。 不仅你正在学习一门新语言(这本身很难):有一个习惯的静态类型系统,你可能需要知道堆栈和堆之间的区别,了解生命周期,泛型, Result , Option s,忘掉一些OOP习惯等等……
这是值得的,它得到了回报,在你熟悉了所有东西之后不是问题,但它只是很多东西,预付现金,没有退款。 这不是一件容易的事。
因此,将Rust引入您的同事,团队,公司并开始“ $dayjob Rust项目”滚动$dayjob 。
生态系统不成熟
并非每个问题都有现成的Rust库等着你。 有些人这样做,但很多人没有。 在许多领域,语言和图书馆都在迅速发展。 当现有的解决方案缺乏时,需要花费一些精力来跟上生态系统和/或实施自己的解决方案。