rust vs java
经过多年的Java开发,我最近开始学习Rust 。 我要牢记的五个要点是:
- Rust感到很熟悉
- 引用很有意义
- 所有权会很有意义
- 货运很有帮助
- 编译器很棒
我绝对支持所有这些,但是我还有更多话要说,因为我现在觉得自己像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编程。 我喜欢它。
- 阻止人们完全做错事几乎是不可能的,但是鼓励人们做正确的事是很棒的。 实际上,Rust走得更远,实际上在许多情况下很难做错事。 您确实必须非常努力地在Rust中做坏事。
- 咳嗽 Perl 咳嗽
本文基于有关安全博客Alice,Eve和Bob的More Rusty思想 ,并在获得许可的情况下可以重用。
rust vs java