博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rust vs java_为什么我从Java切换到Rust
阅读量:2525 次
发布时间:2019-05-11

本文共 2527 字,大约阅读时间需要 8 分钟。

rust vs java

经过多年的Java开发,我最近开始 。 我要牢记的五个要点是:

  1. Rust感到很熟悉
  2. 引用很有意义
  3. 所有权很有意义
  4. 货运很有帮助
  5. 编译器很棒

我绝对支持所有这些,但是我还有更多话要说,因为我现在觉得自己像Rustacean :

  • 我不想再用其他任何东西编程。
  • 我已经摆脱了简单的咒语。

这两个陈述是什么意思? 好吧,第一个很简单:Rust感觉像是个理想的地方。 它结构合理,表达力强,可以帮助您做正确的事, 它具有出色的文档和工具,并且有一个很棒的社区。 而且,当然,所有内容都是开源的,这是我深深关心的。

这是使用Rust的示例:

// Where checkhashes is pre-defined vector of hashes to verify      
let algorithms
= vec
!
[ String
::
from
(
"SHA-256"
)
; checkhashes.len
(
)
]
;

这将创建一个称为“算法”的新向量,其长度与向量“校验”相同,并用字符串“ SHA-256”填充。 第二件事? 好吧,我决定为了正确学习Rust,我应该接受一个最初用Java编写的项目,并希望在相当惯用的Rust中重新实现它。 不久之后,我开始围绕实现而不是语法解决错误,并且犯了错误。 而且我不只是从教程中复制文本,也不是根据编译器的输出对我的代码进行细微,看似随机的更改。 换句话说,我正在让事情进行编译,了解为什么要编译,然后犯了编程错误。

这是另一个例子,应该感到很熟悉:

fn usage      
(
)
{
    println
!
(
"Usage: findfromserial KEY_LENGTH INITIAL_SALT CHECK_HASH1 [CHECK_HASH2, ...]"
)
;
    std
::
process
::
exit
(
1
)
;
}
尤其倾向于这种方法,但是许多(大多数?)学习新语言的人在刚开始时就倾向于这样做,只是因为他们希望事情能够正常进行。

最近,直到凌晨1点,我才实现了一项新功能-接受命令行输入-我无法真正动手。 我花了很多时间(包括寻找和未能找到一些合适的咒语),然后在内部rust-lang频道上寻求帮助。 (您可能要注册一个我认识的人居住的 。)许多人对出现的问题提出了一些建议,而一个人在挑选一些建议方面非常有帮助,所以我更好地了解了他们。 他解释了很多,但最后说:“我不知道您正在调用的哈希函数的返回类型,我认为这是您自行解决这一问题的好地方。”

这就是我想要去的地方:

checkhashes      
= std
::
env
::
args
(
)
    .skip
(
3
)
    .map
(
| x
| hex
::
decode
( x
)
)
    .collect
::< Result
< Vec
< Vec
< u8
>>, _
>>
(
)
    .unwrap
(
)
;

在您绕过它之前,这似乎很奇怪,但是它实际上确实可以按您期望的那样工作:我想从命令行获取输入,跳过前三个输入,对其余输入进行迭代,将每个转换为u8的向量并创建这些向量。 “ collect”调用末尾的_清除所有错误或问题,基本上将其丢弃。

这正是我所需要的,也是任何人(包括编程语言)的学习者所需要的。 因此,当我不得不在午夜下楼放狗时,我决定呆下来看看自己是否可以自己解决问题。 而我做到了。 我接受了人们提出的建议,了解他们在做什么,试图弄清他们该做什么,弄清楚他们应该如何做,然后找到实现它的正确方法。

我仍然有很多东西要学习,而且我还会犯很多错误,但是我现在觉得自己可以找到解决这些错误的方法(在此过程中需要一点帮助,感谢–已经为我指明正确方向的每个人)。 但是我确实觉得我现在正在用Rust编程。 我喜欢它。


  1. 这就是Rust程序员自称的。
  2. 阻止人们完全做错事几乎是不可能的,但是鼓励人们做正确的事是很棒的。 实际上,Rust走得更远,实际上在许多情况下很难做错事。 您确实必须非常努力地在Rust中做坏事。
  3. 例如,我在代码中发现了一个特别严重的一次性错误,该错误与Rust无关,而所有与我对程序流程的关注不足有关。
  4. 咳嗽 Perl 咳嗽

本文基于有关安全博客Alice,Eve和Bob的 ,并在获得许可的情况下可以重用。

翻译自:

rust vs java

转载地址:http://ypdzd.baihongyu.com/

你可能感兴趣的文章
HTML5须知的特征和技术
查看>>
HTTP请求方式GET和POST的区别详解
查看>>
Python02_流程控制及数据结结构
查看>>
记录一个数据表联合查询过慢的“小坑”
查看>>
Java中的long与double的区别
查看>>
只出现一次的数字 [ LeetCode ]
查看>>
动手动脑3
查看>>
Oracle笔记之用户管理
查看>>
margin的相关属性:
查看>>
saas系统架构经验总结
查看>>
实现Icommand接口
查看>>
多用户ATM机(面向对象编程)
查看>>
Linux下管理软件的方法
查看>>
隐藏DIV 显示DIV
查看>>
[JAVA算法]递归求Fibbonicc序列方法
查看>>
@+id/和android:id的区别
查看>>
在Windows上安装FFmpeg程序
查看>>
jQuery 解决 IE 6/7/8 BUG:下拉框select设宽度时option超出显示不全
查看>>
15 个有趣的 JavaScript 与 CSS 库
查看>>
实现iOS语言本地化/国际化
查看>>