导读:不管你是爱它还是恨它,Rust 都在席卷系统编程的世界。本文带大家看看这个所谓 C/C++ 的现代继承者,它的优点还有哪些让人不喜欢的地方。
如果每天都在发明一种新编程语言,那肯定比开发者需要的多上很多倍。某天哪位程序员灵光一现,开始创造一个新鲜而美好的语言,但大多数最后都成了小众使用的工具,适合用来解决问题或个性化开发。
如今,很少有一种新的编程语言能杀入主流编程语言排行榜并被人们喜欢并广泛使用。
而 Rust 则是一个为数不多的新语言之一,人们愿意在它的运行时中编写真实运行的应用。
Rust 的出现的确填补了一个新兴市场:它帮助系统程序员编写内核和其它想要开发并发处理数十、数千甚至数百万个事件的系统提供动力。在往常时间,开发这些系统具有足够的挑战性,要用足够的经验,因为从其中找错误非常困难。而 Rust 将关于创建此类系统的最佳实践以及深层理论全都变成了一种活生生的、会呼吸的、有价值的编程语言。
而 Rust 核心团队每年都会进行一次开发者调查。在 2021 年,超过一半的 Rust 程序员首次在工作中使用此语言。他们不再只是把玩,则是用它来开发专业应用,用在真实场景上运行上线。
喜欢的理由:Rust 解决了大规模并发问题
随着开发者需要解决大规模并发性问题(也就是需要同时处理来自多个不同来源的输入),应用程序就会变得越来越复杂。而当今许多人认为 Rust 是构建适合当今架构的工具的最佳语言。
Web 浏览器就是需要大规模可扩展的应用的最佳实例,而 Rust 正是由 Mozilla 创建的。Mozilla 开发团队总结了在开发中遇到的问题并寻求更好的解决方案后,他们想出了 Rust。
不喜欢的地方:Rust 的并发模型太复杂了
虽然多线程系统越来越流行,但许多开发人员并不是真正需要它们。科学家型开发者倾向于编写单线程函数来消化数据流。Web 开发者可以使用 PHP,它提供了一种简单的声明式方法来创建网站。Servles 程序员写一个函数,然后将繁重的工作留给其他队友。
需要开发复杂 Web 应用程序的开发人员可以转到 Node.js,它为处理多线程应用程序提供了另一种策略。Node 的事件驱动模型与基于 Promise 的代码相结合,就可以产生简单而优雅的成果。
而 Rust 的多线程编程模型提供了比许多程序员需要更复杂的功能。人们可以忽略Rust额外的功能并仍然喜欢该语言,但有些程序员宁愿根本不处理复杂性,他们只是并不需要它。
喜欢的理由:Rust 是一门现代语言
今天的大部分编程语言设计都专注于创建功能性,以指导开发者编写更易于分析的软件。而 Rust 就是这一趋势的一部分,许多的开发者喜欢 Rust 的逻辑、函数式语法,它鼓励人们将代码结构化为一系列嵌套函数调用。
同时,Rust 的创造者还构建了一些功能来处理物联网运行所需的位碰撞、低级别编程。Rust 语言为希望用现代风格解决这些现实挑战的程序员提供了正确的技术组合。
不喜欢的地方:Rust 有一个陡峭的学习曲线
在某些场合下,学习 Rust 需要你忘掉一开始遵循的概念和技术。比如,Rust 需要放弃 JavaScript 和 Java 等旧语言所要求的范围与所有权的概念。
如果想利用 Rust 的优势,你需要放弃一些可能导致错误的固有思维。此外,Rust 语言语法也比较复杂,不再只有大括号和圆括号了,方括号、竖线和大于号都会出现。甚至还会有个双冒号——因为编程中一个冒号显然是不够的。
正在开发复杂多线程工具的 Rust 开发人员会将其语法复杂性视为值得权衡的选择。真正了解功能流程的人甚至可能会喜欢并成为粉丝。而初学者会感到沮丧,它的语义规则并不适合初级用户。
喜欢的理由:你可以告诉 Rust 编译器该做什么
一些开发者将 Rust 所需的细节和样板视为优势,可以为 Rust 注入相关提示,使编译器更容易找出正在发生的事情,捕获任何潜在的错误。运行的代码为开发者提供了更好的机会来指示该发生的事情,以避免编译器出错。Rust 通过注入有关代码应该如何工作的功能,可以让开发者写出更好、更快的代码。
不喜欢的地方:谁想告诉编译器该做什么?
一些开发者只是想要一种语言来打破运行循环而不会崩溃,还有的想要一种可以处理后台工作的语言,这样就不必担心出错了。如果编译器有时生成的代码有点慢,或者可能有点Bug,那也没关系。许多工作并没有那么复杂,调试它们也不是太难。提供多一些的硬件比花费 Rust 编译器需要的额外细节更加便宜。
喜欢的理由:Rust 具有很好的向后兼容性
Rust 开发团队致力于确保向后兼容,即使语言不断发展,代码也能持续运行。也就是要保证老旧代码继续使用新版本语言编译器并正常运行,这一点是其它编程语言会忽略的地方。Rust 开发者会注意到自己的代码库可以不必无休止的重写。因为 Rust 是一种尊重自己历史的语言。
不喜欢的地方:Rust 不是严格的面向对象
Rust 并不遵守面向对象的编程原则,这对一些程序员来说是个问题。人们可以在 Rust 中模仿面向对象编程的某些特征,真正的技术粉丝知道如何使用 Rust 构造模仿 OOP 的最佳方式,但是想要构建更复杂类型层次结构的人会感到很棘手。
喜欢的理由:Rust 的异步处理模型很安全
Rust 的异步编程模型允许开发者创建独立运行的函数,然后将结果连接起来。许多开发者表示,Rust 的这种结构有助于他们构建更快的代码,同时也减少更多的错误。
不喜欢的地方:异步编程很难
Rust 所做的任何事情都需要开发者仔细考虑自己的代码。Rust 并不能保护代码免受死锁或延迟;它只能提供建议和更少错误的结构。开发者仍然负责良好的应用程序设计和编写干净的代码。开发者都在想如果 Rust 是一根魔棒就好了,但事实并非如此。Rust 只是最大限度地减少了问题,减少了一些更明显的运行危险。
喜欢的理由:没有抽象的编程
Rust 目标支持编写低级字节级代码的系统级程序员。它提供对原始位的访问功能,程序员可以很方便地使用。该语言可以与较低级别操作系统与网络堆栈一部分的C 语言 或汇编代码共存。Rust为真正的程序员提供这种访问,以便来构建最好的、响应速度最快的技术堆栈。
不喜欢的地方:字节级访问有风险
许多编程语言已经进化到避免字节级访问,这是程序员陷入困境的一种简单方法。隐藏这些访问可以避免系统风险,很多语言在后端帮助程序员处理如分配内存和表示数据等细节。
喜欢的地方:一种很好的垃圾收集
许多流行的语言为程序员处理内部内存分配与垃圾收集,这是一项很好的服务,直到垃圾收集器停止一切。当垃圾收集在周五晚上在电脑上停止播放电影时,如果它在处理医疗设备,这可能会致命。
Rust 有自己的内存管理方法,它不像传统的 GC 那样全面,但更强大。优秀的开发者可以使用 Rust 的内存模型提供更出色的性能,但他们必须掌握类型系统与原子引用计数。
对于铁杆 Rust 粉丝来说,自己动手操作的内存管理是他们喜欢的功能。即使这意味着要处理大量线程并确保代码具有高响应性,他们也宁愿自己去做。不论这样做是好是坏,Rust 都将权力递送到开发者手中。
不喜欢的地方:内存管理很痛苦
许多流行编程语言(如 Java)已经实现了内部内存管理,它可以防止内存泄漏和其他错误。大多数程序不需要担心由垃圾收集引起的偶尔的停机。作为程序员也不希望担心内存处理。
另外Rust 并不是唯一一种可以替代传统垃圾收集的语言。例如,Node.js 简化了多线程编码并让开发者依赖 JavaScript 的运行时内存管理。它偶尔会停止运作,但如果用户不介意,这也是一个很好的折衷方案。
结论
Rust 仍然是新的语言,并且不断发展。
我们仍然可以争论 Rust 是否为异步编程提供了最好的模型,摆脱垃圾收集是否真的有助于开发者等等,但归根结底,Rust 仍然是一门非常新的语言。开发者正在积极学习其细节并发现使用 Rust 的最佳实践。创建 Rust 应用程序的正确方法有待商榷,开发者们正在该领域不断学习和试验。
根据以上所述,我们能判断出 Rust 是不是适合自己的项目。它也并不是创建软件的最佳解决方案,但它是一个令人兴奋的选项目,它有很多可探索的特性。作为一门新语言,Rust 很新奇特,学习它可以扩展我们的大脑回路。
作为开发者,它让我们有理由重新思考挑战,重新制定自己的目标,并着手寻找编写现代化软件的最佳方式。还有什么比那个更好的呢?
作者:洛逸
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。