语言间的简单对应关系

2019 年 02 月 21 日

最近在用Rust写程序,一开始很不适应ownership概念,感觉缚手缚脚。现在慢慢习惯之后,还是觉得很拘束。只能说这是一种门槛较高的语言,当然换来的是其强调的“安全”;也就是说,用Rust很难写出类似内存泄露的问题。Rust跟其他语言在某些概念上略有不同,在这里简单比较一下。

首先,所有的编程语言都可以用来进行结构化编程,也就是说,所有的语言都支持:

  • 循序(sequence):即正常的顺序执行
  • 选择(selection):即if/else或switch
  • 重复(repetition):即for循环

其次,一些OO简单概念和关键字/符号的对应关系(注意:C不是OO语言):

C++JavaJavascriptRust
classclassclassstruct
接口abstractinterfacetrait
继承冒号extends不需要(ES6中有类似关键字)
构造构造函数和原型组合显式调用
析构显式调用std::ops::Drop trait

Javascript不需要接口,是因为Javascript不需要编译,当随便写一个obj.execute()就能通过的时候,你何必在乎obj是否有execute这个函数的接口定义呢。

Rust没有继承是设计如此,需要用组合方式。

最后,常用编程方法:

CC++JavaJavascriptRust
多个函数返回值指针/实参指针/实参对象参数/返回对象对象参数/返回对象Tuple或&mut
错误处理返回值try-catchtry-catchtry-catchResult/Option

Rust的错误处理方式带来的是更简约的写法,一开始我觉得处理返回值的部分太繁琐,后来发现用cargo clippy可以发现这些繁琐的模式并提供简化方案。

其他可能没有什么值得区分的了。

每种语言都有其特点和适用场景。写嵌入式代码基本是不能绕过C的。而C++既有C的效率,又有OO概念可以用来规划代码。Java写起应用或服务都是信手拈来,特别是基于Spring来写微服务架构的应用非常方便。现代的Javascript,既可以借助React/Angular/Vue这类框架写大型web应用,又可以用nodejs等工具写中小型web服务。Rust叫系统编程语言,可以写操作系统,是C/C++的竞争对手。实际上语言只是工具,没有绝对优劣,只有适合不适合。程序员需要根据要做的事情来选择合适的工具。

我自己还是喜欢Java多一些,因为用Java很舒适和自由。


P.S. 现在最喜欢是Rust了。

Top