C、C++、Java、Python、JavaScript比较

从实际使用感受来比较一下这些语言。

C vs C++03

C语言只提供了编程所必须的基本语法。除了类和模板,C++还添加了一些方便开发者的语法。C++使代码更加模块化,开发者效率更高。以下是我觉得C语言最为严重的缺陷。

  1. 命名空间
    在C中所有函数名都是全局的,为了避免冲突,C的函数名经常又臭又长。static只能解决以文件为单位的问题,而实际中变量名的隔离都是以功能为单位的。
  2. 函数重载
    在C中经常会看到一系列与类型相关的函数,比如CJson库:addIntToObject、addBoolToObject、addStringToObject,调用这类函数经常让人抓狂。
  3. 对象
    在C中,经常会出现要操作某个变量,却忘记了相应函数名的情况,这时只能翻文档去找。
    C++中对象成员的自动补全解决了这个问题。同时将变量与函数放在一起,也使代码结构更加清晰。
  4. 异常
    在需要对输入做安全检测时,经常会出现多级if嵌套来处理错误,为了避免多级嵌套,C中只能通过使用goto语句来解决。
    C++通过异常将错误处理逻辑与正常执行逻辑分离,使代码结构更加清晰。

C++11 vs Python

C++11引入auto、for循环、Lambda、using等常用语法后,在模板和异步编程方面的易用性大为提高,Python的语法糖优势已经不那么明显了。

而且C++11的部分编程风格现在与Python很接近,比如C++11中用begin(),end()全局函数来迭代,这与Python的全局函数len(),str()的设计很相似。

现在Python相对C++11的主要优势为大量的第三方库(开发速度的提升)、跨平台部署。

对于规模不大的程序或没有太多时间的个人开发者而言,Python是首选。

C++ vs Java

Java一开始是以跨平台作为最大亮点的,但现在Java跨平台主要体现在开发方面:Windows上开发,Linux上部署。

Java对C++的优势主要在反射和自醒能力,方便了框架开发。由于Web服务的主要瓶颈在IO而不在运行效率,所以Java成为了Web开发方面的霸主。

因为Java的易学易用,Java的第三方库也比C++丰富和成熟。

Java vs Python

现在Java的业务和Python业务大部分都是重合的:Web、爬虫、数据处理。

与C++恰恰相反,Python对Java的优势主要是在语法方面。

Javascript vs Python

JavaSciprt虽然与Java没关系,但是创建对象要用new的语法还是和Java很像。

ECMAScript 6引入了部分Python中的语法后,除了块级作用域和类继承方面的不同外,JavaScript的使用已经和Python很相仿了。

应用场景

C语言最大的优势是运行速度,所以它主要用于系统开发、嵌入式开发、底层应用开发(Nginx,Apache)。  在上层应用方面,只有搞开源的那帮人才使用。

C++兼顾运行速度和抽象能力,但开发速度慢,对开发人员要求高。主要用于大规模软件的开发:office、adobe全家桶、autocad、gcc、clang。(git这个软件,一直觉得最应该用C++开发的,但是开发者死守C语言)。另外C++虽然各方面的库也不少,但要么不成熟设计得很难用,要么年久失修有bug,经常被迫选择C库。

Java:Web(SSH、JSF),安卓(这个是特例,几乎没有软件拿Java来做GUI)

Python:爬虫、Web、小程序

总结

现在语言的改进都倾向于通过自我演化来实现,而不是另造一门语言。比如C++标准的频繁更新,Python语法的不断变化。所以目前语言的格局已经很难改变了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注