IT技术博客大学习 共学习 共进步

几种计算机语言的评价(修订版)

阮一峰的网络日志 2010-03-29 08:53:08 累计浏览 4,144 次

    编程新手都有一个同样的问题:“我应该学习哪一种语言?”。

    《Unix编程艺术》(Eric Raymond著)第十四章,对各种语言进行了评价,正好可以用来回答这个问题。下面是我的笔记,整理了六种主要计算机语言的优缺点。读完就会知道,对于不同的任务,应该选择哪一种语言了。

    原文写于2003年。网上曾经有一个不完整的中译本,我也在这个网志中转贴过,所以今天贴的只能算修订版了。

    ====================

    几种计算机语言的评价

    作者:Eric Raymond

    摘自《Unix编程艺术(第十四章)》

    

    一、C

    C语言的优点是,运行效率高和接近机器语言。它特别适用于以下几种程序:

      1. 对运行速度要求很高的程序。

      2. 与操作系统内核关系密切的程序。

      3. 必须在多个操作系统上移植的程序。

    除此之外,学习C语言有一个最大的理由,那就是它能帮助我们学会,在硬件层次上考虑问题。如果你想以编程作为自己的人生事业,C是一定要学习的。

    C的最大缺点是,在编程过程中,你不得不花很多时间,考虑与你要解决的问题完全无关、且非常复杂的硬件资源管理问题。

    二、C++

    C++在80年代中期推出,支持OO(面向对象编程),原意是作为C语言的取代者。

    但是它没能做到做一点,原因有以下几个:

      1. 它也没有解决“内存管理”问题,虽然比C有所改善。

      2. 标准化不成功。各个编译器都只支持自己选择的一个子集,导致跨平台性不如C。

      3. 过分的精细和复杂了。C++的复杂度,超过了C和OO的复杂度之和。

      4. OO并没有带来多少优势,反而带来了一些副作用,比如厚重的胶合层和庞大的代码体积。

    总的来说,C++的优势还是程序效率,以及面向对象编程能力,糟糕之处是它鼓励复杂的设计。

    三、Shell

    Shell程序写起来很容易,对于简单的任务,开发速度很快。

    当程序变大时,它就不太适合了,很难维护,而且将变得非常专用(只能在你自己的机器上使用),因为 Shell必须调用各种外部程序,无法保证每一台机器都同样安装了这些程序。

    最常见的Shell是bash,它的一些语法规则很混乱,会产生很难阅读的代码。另外,shell只能在Unix上使用,无法跨平台。

    Shell的最佳用途如下:

      1. 执行简单的系统管理任务。

      2. 编写系统启动时的初始化脚本。

      3. 作为其他语言开发的程序的包装器。

    四、Perl

    Perl发布于1987年,基本上就是一个增强的Shell。

    它的最大长处是强劲的文本处理能力,无以伦比的正则表达式支持,而且有全套Unix API的内部支持,显著减少了对C的需求。

    Perl的主要缺点是某些部分设计得非常丑陋,且无法补救,某些部分也过于复杂。当程序规模增大时,必须严格遵守约定,才能保证模块化和设计的可控性,难于维护。

    五、Python

    Python发布于1991年,是一种与C语言紧密集成的脚本语言。

    Python的优点是非常干净优雅,鼓励清晰易读的代码,易学易用;提供了面向对象编程的可能,但并不把这个选择强加于设计者;具有出色的模块化特性,同Java一样,适合用来做需要协同开发的大型复杂项目。在很多方面,它都比Java简单。此外,Python标准中包括了对许多网络协议的支持,因此也很适合网络管理任务。

    Python的缺点主要是效率低下,速度缓慢。在执行速度上,它不仅无法与C/C++竞争,而且也不如其他主要的脚本语言。但是,这其实并不是一个严重的问题,有时网络或磁盘的延迟,会完全抵消Python本身消耗的时间。而且因为Python特别容易和C结合起来,因此性能关键的 Python模块,可以很方便地转化成C语言来提高速度。

    总的来说,对于小型项目和大量依靠正则表达式的项目,Python不如Perl的表达能力强。至于更小的项目,Python则是大材小用,shell也许更适合。

    六、Java

    Java发布于1995年,设计目标有两个。

    一个是“write once, run anywhere”(一次编写,到处运行),即不依赖于特定的平台;另一个是在网页中嵌入交互程序(applet),可以在任何一个浏览器中运行。由于它的所有者Sun公司的一系列失误,第一个目标并没有完全实现,第二个目标则是彻底失败。但是Java依然在系统编程和应用编程方面非常强大,足以挑战C和 C++。

    Java的优点是比C++小巧简单,可以自动管理内存,支持类似C的语法和OO编程,与C程序的结合也很好。

    Java的缺点是某些部分过于复杂,比如内部类和匿名类的运用会产生很混乱费解的代码;某些部分功能不完善,也无法利用操作系统提供的功能接口,比如在Java中读取和处理文本文件,并不像其他语言那样容易。此外,Java配置环境和版本的混乱,也让人很头疼。

    总的来说,除了系统编程和某些对运行速度要求很高的编程之外,Java都是比C++更好的选择。如果和Python相比,Java可能在大型项目上有优势,但是也不是绝对的。

    (完)

建议继续学习

  1. 每个程序员都应该学习使用Python或Ruby (累计阅读 17,743)
  2. 敲击最多的键和编程语言语法 (累计阅读 7,305)
  3. 为什么Lisp语言如此先进?(译文) (累计阅读 6,405)
  4. 编程语言的选择很重要 (累计阅读 5,124)
  5. 编程语言的可读性 (累计阅读 4,966)
  6. PHP很烂?我的看法 (累计阅读 4,503)
  7. php语言漫谈 (累计阅读 4,186)
  8. 分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发 (累计阅读 4,145)
  9. 为什么我喜欢Lisp语言 (累计阅读 3,923)
  10. 再谈非主流工业语言 (累计阅读 3,746)