Rust 与信息学三定律


Rust 与信息学三定律

文章插图
 
在JAVA领域工作了10年之后,最近我一直在更认真地研究Rust 。我几乎没有开始Rust编程,但是我感到很热情:我相信Rust应该引起注意,因为这是语言平衡的转变 。
tl; drRust可以在嵌入式芯片,Web应用程序和分布式系统中运行 。它结合了C的速度,C是一种现代的强类型系统,可以安全地管理内存和高质量的生态系统 。它使编写并发代码变得简单而安全 。Rust社区热情,友好,非常活跃并且正在开发出色的软件 。Rust已在生产中使用,并且可以正常工作,但某些零件仍在完善中 。我要参加这个有趣的活动,不让您知道:-)
从Java到RustJava和Rust是非常不同的语言,据认为它们针对不同的空间 。有人问我为什么Java开发人员(无聊的开发人员)会对Rust感兴趣 。事实证明,我选择Java的理由与现在将我引向Rust的理由相同 。让我描述指导我选择语言和技术的原则:信息学的三定律!
信息学三定律我将它们称为"信息学三定律" 。这些定律的内容可能不是很原始(不是真正的定律),但是像阿西莫夫的定律一样,它们试图找到最基本的正交公理,从中可以得出想要的特性 。它们是尽力而为的法则,因为完美是我们无法掌握的 。
开始了:
  • 程序必须正确 。
  • 程序必须是可维护的,除非与第一法相冲突 。
  • 程序必须高效,除非与第一或第二定律相抵触 。
第一定律意味着程序在所有情况下都应按预期方式运行 。这意味着软件应尽量避免出现错误,安全问题,并且永远不会崩溃 。
第二定律意味着,程序应该经过精心设计和记录(因为必须对代码有很好的理解)和模块化,因为不能维护大型组件 。还应该有帮助开发人员维护程序的工具 。由于设计清晰并且可以熟练掌握该语言,因此部分演进不应保证完全重写,并且另一位开发人员应能够进行必要的更改 。
第三定律意味着,对于最可能的输入,程序应趋向于在速度和资源消耗之间达到最佳的平衡,即根据其使用方式 。这意味着我们应该为工作使用最佳的数据结构,以最佳的权衡取舍,因为大多数时候没有全局最优,要适当地进行扩展计划,并使代码对运行它的计算机表示同情 。
这三个法律共同为生机勃勃的生态系统和社区提出了要求 。开发人员不能单独编写正确,可维护和高效的程序,因为现代程序所依赖的代码比一个开发人员所能产生的更多 。他们必须重用社区提供的组件 。他们必须共享一个社区健康的信念,即社区正在成长,或者规模足够大,可以维护现有组件,并且可以构建新组件 。这使得在选择编程环境时,围绕语言的社区成为最重要的因素 。
三定律的顺序正确性无疑是我们在软件中的主要关注点 。如果某个软件不能正常工作,则不值得运行 。如果不安全,则存在安全风险 。这显然使我们的第一定律正确无误 。
但是,人们可能会争论,可维护性是否应比效率更重要,反之亦然 。当完全忽略可维护性时,程序可能会获得更好的性能,而仅考虑正确性和可维护性的编程可能会导致程序完全无效 。
实际上,可维护性和效率是交织在一起的:围绕高效解决方案构建好的架构 。例如,围绕Rope数据结构构建了Xi编辑器,旨在成为"未来20年"的高性能编辑器 。自上而下地设计系统可能会阻止实现有效的解决方案; 自下而上地设计它们可能会泄漏太多的实现细节,并阻止干净的,松耦合的体系结构 。
不过,如果某个软件正确且高效,但无法维护,则仅是一个黑匣子 。如果我们不了解,我们是否确信它是正确的? 相反,效率低下但正确且可维护的程序可能仍然可以挽救 。可维护性成为第二定律 。
定律和语言信息学三定律仅涉及程序 。但是编程语言可以提供保证,构造,工具,执行环境,社区或生态系统,以帮助开发人员构建遵守法律的程序 。让我们看一些选项 。
系统语言C和C ++共享一些属性 。它们非常适合编写快速,占用资源少的代码 。手动内存管理将安全交给开发人员(他们几乎不记得他们离开手机的地方!) 。C没有附带电池,因此您经常需要重写数据结构; C ++如此庞然大物,每个项目都定义了他们使用或不使用语言的哪一部分(google因不使用异常而闻名) 。由于它们都不安全,因此依赖于另一个库会增加安全漏洞的风险 。
Go填补了C ++吓跑开发人员的空白 。它的目标是速度快,并使使用例程轻松编写并发代码 。它是垃圾收集的,因此比C ++更安全 。它具有一个简单的类型系统,没有泛型和代数数据类型,不支持代码重用以及其他现代语言 。尽管如此,它仍然有一个非常活跃的社区,可能受到Google的光环的吸引,并跟随Docker的脚步 。


推荐阅读