rust vs java
自从我正确地学习了计算机或人类这门新语言以来,已经很长时间了。 也许25年。 那是Java语言,尽管与此同时我不得不写一点点C(很少)和JavaScript,但我写过很多实际代码的唯一两种语言是Perl和Java。
我是一个名为Enarx的项目的联合创始人,该项目几乎完全用Rust编写。 这些天来,我称自己为“建筑师”,距离我编写任何生产代码已经很长时间了。 在2019年圣诞节之前,我完成了我几年来写的第一个重要项目:围绕Java专利申请实现一组算法。 这是让我重新投入代码的好机会,对此我感到非常满意。
从具有强大的面向对象背景的Java开发人员的角度来看,这是我对Rust的一些想法。
1. Rust感到很熟悉
尽管您会发现许多教程和书籍都是用C和C ++编写的,但是Java与Java的相似性足以使通用语言感到熟悉。 我使用最多的两个教程是Rust编程语言 (在线)和规范的Rust书籍(采用死树格式),后者经常引用与其他语言的相似之处和不同之处,不仅包括C,C ++和Java,以及Python,JavaScript等。 诸如控制结构和类型之类的东西与Java足够相似,它们通常很容易理解,尽管存在一些主要差异,但是您应该能够很轻松地理解该语言的基础知识。 但是要当心:我一直遇到的最大的初始问题之一是Rust有时感觉太熟悉了,所以我开始尝试以错误的方式做事,不得不退后一步,尝试找到对Rust更加惯用的方法。 我还有很长的路要走!
2.引用很有意义
在Rust中,您最终不得不使用引用,即通过内存地址访问数据。 坦白说,当我查看C或C ++时,引用和取消引用变量对我来说从来没有多大意义,但是这次,我感觉很明白。 如果您习惯于通过引用和值传递Java变量,并且知道何时需要采取措施在特定情况下以不同的方式进行操作,那么您就可以开始理解Rust引用了。 您需要了解的另一件事是Rust 为什么需要使用它们:这是因为Rust对内存管理非常非常小心,而且无论走到哪里都没有垃圾回收器可以清理(就像Java中一样) 。 您不能在willy-nilly周围传递字符串:例如,Rust会坚持要求您知道变量的生命周期,并考虑何时可以“删除”该变量。 这意味着您需要认真考虑范围,并且引入了一个复杂的概念:所有权。
3.所有权会很有意义
老实说,我还没到。 我已经在Rust中学习和编码了不到两个星期,并且我开始着手解决所有权问题。 对于我(我怀疑,对于许多新手来说),这是从Java或大多数其他语言(所有权)转向Rust的重大转变。 如前所述,您需要了解何时使用变量以及变量可以使用多长时间。 但是,它还不止这些,对于Java开发人员来说,真正获得它对于我来说有点陌生:您需要了解栈和堆 ,这是Java充分掩盖了我的区别,但是许多C和C ++开发人员可能会更容易理解。 这里不是解释这个概念的地方(我发现Rust编程中的图表特别有用),但是为了管理内存中变量的生命周期,Rust需要知道每个组件拥有什么组件。 当您习惯于创建对象并使用来自各处的变量实例化它们时(例如在Java中),这变得很复杂,并且需要进行一些重要的重新思考。 将其与生命周期的明确标记相结合是我现在必须执行的最大的概念更改。
4.货运很有帮助
货物二进制文件只做正确的事情,例如,当它意识到您已经对依赖项进行了更改时,看到它完成其工作就令人惊讶。
它会执行自动测试,自动优化,生成文档-这么多有用的任务,全部都在一个软件包中。
将其与Git存储库结合使用,项目管理将变得更加简洁明了。
5.编译器很棒
最后但最不重要的是编译器。 我喜欢Rust编译器:它确实在尽力帮助您。 制作和维护Rust的社区1的成员显然会竭尽所能,为您在犯错时纠正您提供有用的指导,而我(其中一个)就犯了很多错误。 而不是其他语言的编译器可能会熟悉的口头声明,您将获得带有颜色,警告和错误的色编码文本,以及有关您可能实际尝试执行的操作的建议。 您甚至会得到如下输出:
For more information about this error , try rustc -- explain E0308
For more information about this error , try rustc -- explain E0308
当您尝试这样做时,您(通常!)会获得有用的解释和代码段。 有时,尤其是当您仍在使用该语言的时候,并不是总是很清楚您在做错什么,但是淡入错误中可以帮助您以与消息完全不同的方式来理解概念。例如,我习惯于从javac工具获取信息。
结论
我不希望写大量的Rust产品,也不要真正地达到大师的地位(老实说,用Rust或任何其他语言),但是我真的认为Rust可以说很多。 纵观我的旅程,到目前为止,我一直在点头我的头和思考,“这是一个好办法做到这一点”,或者“啊,才使得这么多比我习惯的方式更有意义。” 这不是一篇关于Rust 为什么这么好用的语言的文章-那里有很多-也不是学习Rust的最佳方法-也有很多这样的书,但是我可以说我很享受。 这是具有挑战性的,但是教程,书籍和其他学习材料都擅长的一件事就是解释Rust做出选择的原因,这对我来说既有帮助,也可以帮助我解决挫败感,也可以尝试内部化。 Java和Rust之间的一些区别。
如果我能真正投入到Rust中,说实话,我认为我不可能再写任何Java了。 我不确定我还有25年的编码经验,但是我认为我现在和Rust一起工作很长一段时间。 我是Rustacean(萌芽)。
本文基于有关安全博客Alice,Eve和Bob的5种Rust反射(来自Java) ,并在获得许可的情况下可以重复使用。
rust vs java