Rust 和Erlang的对比

在我为期两年的电信网络模拟器的程序员生涯中,我将Erlang的并发性、容错性和分布式计算等特性充分利用到了许多CPU密集型应用程序上。 

Erlang是一种高级的、动态的、函数式的语言,它提供了轻量级的流程、不变性、位置透明的分布式、消息传递、监督行为等。不幸的是,它在底层的工作中并不是最理想的,而且显然那也不是它们的主要意图。例如,最典型的用例之一就是XML解析,Erlang并不擅长。事实上,XML节必须从命令行或网络中读取,而处理来自Erlang虚拟机之外的任何东西都是繁琐的工作。你可能也了解这个问题。对于这种情况,不妨考虑一下采用不同的语言。特别是,Rust最近由于其混合特性集而走到了前台,它对Erlang的许多方面都有类似的承诺,并且在底级性能和安全性方面增加了额外的好处。 

Rust编译成二进制,并在硬件上直接运行,就像你的C/ c++程序一样。它和C/ c++有什么不同? 很多。它的座右铭是这么说的:“Rust是一款运行速度非常快、可以防止段错误,并确保线程安全的系统编程语言”。

本文将重点讨论Erlang和Rust之间的比较,强调它们的相似和不同,研究Rust 的Erlang开发人员和研究Erlang的Rust 开发人员可能都会对它感兴趣。最后一节将详细介绍每种语言能力和缺点。

不变性

Erlang: 变量在Erlang中是不可变的,一旦绑定不能被改变,也不能被重新绑定为不同的值。 

Rust: Rust中的变量默认情况下也是不可变的,但是通过向它们添加mut关键字可以很容易地使其变为可变的。Rust还引入了所有权和借出的概念,以有效地管理内存分配。例如,字符串文字存储在可执行文件中,字符串在分配给其他变量时会转移,而像integer(i32,i64,u32…), float(f32,f64)等原始数据类型直接存储在堆栈中。

模式匹配

Erlang: Erlang代码简洁性的优点在于它的模式匹配功能,在任何地方都可以使用case语句以及”=”(等于号),包括函数名、参数数量和参数本身。

Rust: 在let绑定中,=符号可以用于绑定,也可以用于模式匹配。除此之外,Rust match类似于Erlang中的case语句和大多数其他语言中的switch语句,它尝试在多个case中进行模式匹配,然后分支到匹配到的那个。功能/方法重载不是Rust内置的,但它可以使用特征(trait)。确凿(Irrefutable )的模式匹配任何事物,它们一直都会有效。例如: 在let x=5中,x总是与值5绑定。相反,不确凿(refutable )的模式在某些情况下可能会匹配不到。例如:在if let Some(x) = somevalue 中明确地说somevalue应该处理任何除了None之外的值。 确凿的模式可以直接在一个let绑定中使用,而不确凿的模式可以if letwhile let或者 match 结构体中使用。 

循环

Erlang: 在Erlang中可以使用递归或列表推导完成循环。 

Rust: 在命令式语言中,循环会以如for、while和loop等常见方式出现,并带有基本的循环结构。除此之外,还有迭代器。

闭包和匿名函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/97c0db980c0ffb0e8e85ab46f9cbb20f.html