rust vs java_为什么我喜欢以Java程序员的身份学习Rust

2023-05-16

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 

当您尝试这样做时,您(通常!)会获得有用的解释和代码段。 有时,尤其是当您仍在使用该语言的时候,并不是总是很清楚您在做错什么,但是淡入错误中可以帮助您以与消息完全不同的方式来理解概念。例如,我习惯于从javac工具获取信息。

结论

我不希望写大量的Rust产品,也不要真正地达到大师的地位(老实说,用Rust或任何其他语言),但是我真的认为Rust可以说很多。 纵观我的旅程,到目前为止,我一直在点头我的头和思考,“这是一个办法做到这一点”,或者“啊,才使得这么多比我习惯的方式更有意义。” 这不是一篇关于Rust 为什么这么好用的语言的文章-那里有很多-也不是学习Rust的最佳方法-也有很多这样的书,但是我可以说我很享受。 这是具有挑战性的,但是教程,书籍和其他学习材料都擅长的一件事就是解释Rust做出选择的原因,这对我来说既有帮助,也可以帮助我解决挫败感,也可以尝试内部化。 Java和Rust之间的一些区别。

如果我能真正投入到Rust中,说实话,我认为我不可能再写任何Java了。 我不确定我还有25年的编码经验,但是我认为我现在和Rust一起工作很长一段时间。 我是Rustacean(萌芽)。


1.当然,Rust是完全开源的,社区对其的支持似乎很棒。


本文基于有关安全博客Alice,Eve和Bob的5种Rust反射(来自Java) ,并在获得许可的情况下可以重复使用。

翻译自: https://opensource.com/article/20/5/rust-java

rust vs java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rust vs java_为什么我喜欢以Java程序员的身份学习Rust 的相关文章

  • PX4飞控源码L1制导律详解

    PX4飞控源码L1制导律详解 本文目的在于帮助大家看清楚L1制导律选择参考点的策略 xff0c 所以作者将与L1知道无关的代码添加删除线 所有以下划线开头的变量在PX4中都是全局变量 xff0c 在下面的函数中 xff0c 有 target
  • Ubuntu下PX4飞控开发环境搭建

    双清微电子 前言 xff1a PX4支持Pixhawk pixracer 高通骁龙飞控板 树莓派 派诺特等硬件 PX4是构建在Nuttx实时操作系统上的 第一步 xff1a 安装Linux基础软件 第二步 xff1a 下载源代码 第三步 安
  • 开源飞控APM/PX4的发展史

    开源 Open Source 的概念最早被应用于软件 xff0c 开放源代码促进会 Open Source Initiative 用其描述那些源码可以被公众使用的软件 xff0c 并且此软件的使用 修改和发行也不受许可证的限制 每一个开源项
  • Mexican lolita ghds sale images

    The clip on hair extensions are available cheap ghd a variety of different colors and lengths will be the very best choi
  • python 获取当前文件路径

    一 Python 获取当前文件路径方法 sys path 0 获取文件当前工作目录路径 绝对路径 sys argv 0 获得模块所在的路径 由系统决定是否是全名 若显示调用python指令 xff0c 如python demo py xff
  • C#下使用RealSense D435i获取图像,深度,导出.ply点云

    首先需要在NuGet管理中安装RealSense库相关包 主要安装下面两个包 xff1a 代码中引入 xff1a using Intel RealSense 配置相机 var cfg 61 new Config using var ctx
  • 小觅的简单代码程序实现

    96 from future import print function import os import sys PY DIR 61 os path dirname os path dirname os path abspath file
  • TCP 服务器程序突然中断 由于send函数导致

    最近在写tcp 客户端服务器操作 设置服务器为单线程多个客户端连入 开发过程中出现 服务器代码运行过程中 在send处突然中断情况 通过GDB调试发现send函数报错提示打开文件错误 由于测试过程纵单节点反复连入客户端 在client so
  • 从高考到程序员

    从高考到程序员 说真的 xff0c 我做梦也没有想到我会去做程序员 xff0c 一个高中我一直不敢也不想碰到的职业 然而 xff0c 我现在却成为了一位程序员 xff0c 有时候 xff0c 人生真的有点戏剧性 上高中时的我对未来真的是没有
  • 关于单链表的理解

    链表是一种物理 存储单元上非连续 非顺序的 存储结构 xff0c 数据元素的逻辑顺序是通过链表中的 指针链接次序实现的 链表由一系列结点 xff08 链表中每一个元素称为结点 xff09 组成 xff0c 结点可以在运行时动态生成 每个结点
  • rc1改为rc2出现的问题1

    同样的代码 xff0c 在rc1运行时正常 xff0c 在rc2第一次运行正常 xff08 控制台比rc1输出了好多信息 xff09 xff0c 再次运行时抛出异常后退出 java 代码 2007 8 8 13 09 26 net jxta
  • 对倒立摆的LQR控制

    1 问题建模 首先对待研究的问题建立数学模型 在倒立摆模型分析这篇文章里 xff0c 我们已经做了完整的受力分析 最终得到了关于系统变量的微分方程 M 43 m
  • 如何在VirtualBox中使用分支快照

    VirtualBox has supported virtual machine VM snapshots for a while However until version 3 1 it was only possible to reve
  • onmouseover(HTML元素)

    描述 Description The onmouseover attribute is one of the most commonly used event attributes It captures the moment that a
  • Android中的布局

    In this tutorial you will learn about different layouts in android 在本教程中 xff0c 您将了解android中的不同布局 Android layouts are use
  • 如何在VirtualBox中使用快照节省时间

    Snapshots are a massive time saver when you are testing settings and configuration for your Geek School testing Read on
  • 无人机问答:什么是升阻比?

    升阻比 xff0c 顾名思义 xff1a 飞行器飞行时在同一迎角a的升力 L 和阻力 D 的比值 xff0c 同时也是升力系数 Cl 和阻力系数 Cd 的比值 升阻比与飞机迎角 飞行速度等参数有关 xff0c 这个值越大表示飞行器的空气动力
  • 气压计加速度计高度融合_如何将手机用作气压计或高度计

    气压计加速度计高度融合 Your smartphone already does an amazing variety of stuff It s your camera navigation guide compass it can ev
  • 您用Apple One可以省多少钱?

    Apple 苹果 Apple announced an Apple One subscription bundling its paid services like iCloud storage Apple Music Apple TV 4
  • mac 不出现在dock_如何在Mac的Dock上监视网络使用情况

    mac 不出现在dock Whether you re troubleshooting network issues or just trying to conserve bandwidth it s handy to watch your

随机推荐