rust vs java

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

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

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

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

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

这是使用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中重新实现它。 不久之后,我开始围绕实现而不是语法解决错误,并且犯了错误。 而且我不只是从教程中复制文本,也不是根据编译器的输出对我的代码进行细微,看似随机的更改。 换句话说,我正在让事情进行编译,了解为什么要编译,然后犯了编程错误。 3

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

fn usage 
     
     ( 
     
     ) 
     
     { 
     
     

    println 
     
     ! 
     
     ( 
     
     "Usage: findfromserial KEY_LENGTH INITIAL_SALT CHECK_HASH1 [CHECK_HASH2, ...]" 
     
     ) 
     
     ; 
     
     

    std 
     
     :: 
     
     process 
     
     :: 
     
     exit 
     
     ( 
     
     1 
     
     ) 
     
     ; 
     
     
}


4尤其倾向于这种方法,但是许多(大多数?)学习新语言的人在刚开始时就倾向于这样做,只是因为他们希望事情能够正常进行。


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

这就是我想要去的地方:

checkhashes 
     
     = std 
     
     :: 
     
     env 
     
     :: 
     
     args 
     
     ( 
     
     ) 
     
     

    .skip 
     
     ( 
     
     3 
     
     ) 
     
     

    .map 
     
     ( 
     
     | x 
     
     | hex 
     
     :: 
     
     decode 
     
     ( x 
     
     ) 
     
     ) 
     
     

    .collect 
     
     ::< Result 
     
     < Vec 
     
     < Vec 
     
     < u8 
     
     >>, _ 
     
     >> 
     
     ( 
     
     ) 
     
     

    .unwrap 
     
     ( 
     
     ) 
     
     ;

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

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

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



  1. 阻止人们完全做错事几乎是不可能的,但是鼓励人们做正确的事是很棒的。 实际上,Rust走得更远,实际上在许多情况下很难做错事。 您确实必须非常努力地在Rust中做坏事。

  2. 咳嗽 Perl 咳嗽

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

翻译自: https://opensource.com/article/20/6/why-rust

rust vs java