译者著:
Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail。他的《大教堂与集市》被奉为开源运动的经典之作。下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论。特别是他评价中抱有的那种“简单就是好”的思想,很值得我们深思。我特别选译出一些段落,供大家阅读思考。原文参见:http://www.
Raymond此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何选择开发工具?我翻译的很零散,建议大家去看原文。
C
虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸。对于那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。
C良好的可移植性也为它加了分。不过现在很多其他的语言可移植性越来越好,C在这方面的优势可能会逐渐丧失。
现有的很多程序可以产生非常棒的C代码,比如语法分析器、GUI Builder等,这时候C语言也是有吸引力的,因为你所需要编写的代码只是整个程序的一小部分。
再有,我们当然应该认识道,C语言对于程序员来说具有无可替代的价值。就我这里讨论的每一种语言而论,只要你发掘的足够深,到最后你会看到它们的内核都是用纯正的、可移植的C写成的。
到了今天这个时候,我们最好把C看成是UNIX虚拟机上的高级汇编语言。
就算是其他的高级语言完全可以满足你的工作需要,抽出时间来学习C语言也仍然有益,它能帮助你在硬件体系的层次上思考问题。
即使到了今天,最好的C语言教程仍然是1988年出版的K&R第二版The C Programming Language.
总结:C最出色的地方在于其高效和贴近机器,最糟糕的地方在它的内存管理地狱。 
C++
C++最初发布于1980年代中期,当时面向对象语言被认为是解决软件复杂性问题的银弹。C++的面向对象特性看相去使其全面超越了C,支持者认为C++将迅速把上一代语言挤到陈列馆里去。
但是历史并非如此。究其原因,至少有一部分归咎于C++本身。为了与C兼容,C++被迫作出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管理的策略,从而丧失了修正C最严重问题的机会。
另外一部分原因,恐怕要算到面向对象身上。看起来OO并没有很好的达成人们当年的预期。我就这个问题调研过,我发现使用OO方法导致组件之间出现很厚的粘合层,并且带来了严重的可维护性问题。今天让我们来看看开放源码社区,你会发现C++的应用还是集中在GUI,游戏和多媒体工具包这些方面,在其他地方很少用到。要知道,面向对象也只是在这些领域被证明非常成功,而开放源码社区的选择,很大程度上体现了程序员的自由意志,而不是公司管理层的胡乱指挥。
也许C++实现OO的方法有问题。有证据表明C++程序在整个生命周期的开销高于相应的C, Fortran和Ada程序。不过,究竟这是否应该归咎与C++的OO实现上,还不清楚。
最近几年,C++加入了很多非OO的思想,其异常思想类似Lisp,STL的出现是非常了不起的。
其实C++最根本的问题在于,它基本上只不过是另一种传统的语言。STL中的内存管理比先前的new/delete和C的方案要好的多,但是还是没有解决问题。对于很多应用程序而言,其OO特性并不明显,相比与C,除了增加复杂度之外没有获得很多好处。
总结:C++优点在于作为编译型语言,把效率与泛型和面向对象特性结合起来,其缺点在于过于华丽复杂,倾向于鼓励程过分复杂的设计。 
Java
Java的设计很聪明,它采用了自动内存管理,这是最大的改进,支持OO设计带来的好处虽然不那么突出,不过也很值得赞赏,相比C++,其OO设计规模小而且简单 。
相对于Python而言,Java有一些明显的失误。有些地方设计的还是太复杂,甚至有缺陷。Java的类可见性和隐式scoping规则太复杂了。 Interface机制是为了避免多继承带来的问题而设计的,但是要理解和使用它还是挺难。内部类和匿名类导致令人困惑的代码。缺乏有效的析构机制,使得除了内存之外的其他资源(比如互斥量和锁)管理起来很困难。Java的线程不可靠,其I/O机制很强大,但是读取一个文本文件却非常繁琐。
Java没有管理库版本的机制,从而形式上重蹈了了Windows DLL地狱的覆辙。在类似应用服务器这样的环境里,这引起了大量的问题。
总体而言,我们可以说除了系统编程和对效率要求极高的程序之外,Java在大部分领域优于C++。经验表明,Java程序员似乎不太容易象C++程序员那样构造过度的OO层,不过在Java中这仍然是个严重问题。
Java 是否优于诸如Perl, Python这样的语言?我们还不是很清楚,很大程度上似乎跟程序规模有关。其擅长的领域基本上于Python相似,在效率上无法跟C/C++相提并论,在小规模的、大量使用模式匹配和编辑的项目里也无法匹敌Perl。在小项目里,Java显得过分强大了。我们猜测Python更适合小项目,而Java适合大项目,不过这一点并没有得到有力的证明。 
Python
Python是一种脚本语言,可以与C紧密整合。它可以与动态加载的C库模块交换数据,也可以作为内嵌脚本语言而从C中调用。其语法类似C和模块化语言的杂合,不过有一个独一无二的特征,就是以缩进来确定语句块。
Python 语言非常干净,设计优雅,具有出色的模块化特性。它提供了面向对象能力,但不强迫用户进行面向对象设计。其类型系统提供了强大的表达能力,类似Perl,具有匿名lambda表达式,这点又让Lisp黑客们感到亲切。Python依靠Tk提供方便的GUI界面开发能力。
在所有的解释型语言里,Python和Java最适合多名程序员以渐进方式协同开发大型项目。在很多方面,Python比Java要简单,它非常适合与构造快速原型,这一点使得它对于Java有独特优势:对于那些既不很复杂,又不要求高效率的程序,Python十分合适。
Python的速度没法跟 C/C++相比,不过在今天的高速CPU上,合理地使用混合语言编程策略使得Python的上述弱点被有效地弥补。事实上,Python几乎被认为是主流脚本语言中最慢的一个,因为它提供了动态多态性。在大量使用正则表达式的小型项目,它逊于Perl。对于微型项目而言,shell和Tcl可能更好, Python显得太过强大了。
总结:Python最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。(e129)
本文转自BlogJavaOo缘来是你oO的博客,原文链接:对于几大开发语言的评价Eric Raymond,如需转载请自行联系原博主。

Eric Raymond对于几大开发语言的评价相关推荐

  1. 编程大牛Eric Raymond对几种计算机语言的评价

    编程新手都有一个同样的问题:我应该学习哪一种语言?. <Unix编程艺术>(Eric Raymond著)第十四章,对各种语言进行了评价,正好可以用来回答这个问题.下面是知名IT博客阮一峰的 ...

  2. 《大教堂与集市》[美] Eric Raymond

    一.简述 这本书在业界的评价极高,被誉为开源运动的圣经,此书的作者为Eric Raymond,是美国的一位软件开发人员.此人在1996年接管了开源电子邮件软件"popclient" ...

  3. 魔法大锅炉-Eric Raymond

    魔法大锅炉 -- 前言.目录 Eric Raymond (1999年六月) [AKA]rover HansB iasc等翻译 ------------------------------------- ...

  4. 如何成为一名黑客 from Eric Raymond

    作者:Eric Raymond翻译 waterbird [AKA] ------什么是黑客? Jargon File中对"黑客"一词给出了很多个定义,大部分定义都涉及高超的编程技术 ...

  5. google吐槽帝翻译的开发语言比对

    通天塔导游 (译注:圣经记载:在远古的时候,人类都使用一种语言,全世界的人决定一起造一座通天的塔,就是巴别塔,后来被上帝知道了,上帝就让人们使用不同的语言,这个塔就没能造起来. 巴别塔不建自毁,与其说 ...

  6. 选择开发语言和学习的路径(这个标题可能有点不准确)

    毕业一年多了,现在在一家公司担任网络管理员,事情很少过得很惬意,基本上没有加班.但是渐渐的感觉没有什么前途(钱途).很多一起出来的的大学同学都向软件开发方向发展,很多事java或者php,有些认识的好 ...

  7. Java、Python 竟成区块链主流开发语言?!

    作者 | Aholiab 出品 | 区块链大本营(blockchain_camp) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_source= ...

  8. 幼谈苹果新开发语言:Swift和苹果的用心

    今天是个值得纪念的日子:由于苹果的WWDC大会.苹果的每次WWDC(全球开发人员大会)举行都让我们像打了肾上腺素这么兴奋.幸福.惊叹.震撼.深思. 今年也不例外,最关键的是苹果带来了它的一门新开发语言 ...

  9. 闲话乱侃——26字母软件开发语言命名是否用完了?

    突然产生了一个想法,排列一下所有的计算机开发语言,26个字母,看看还剩下几个,是不是都用完了? A:ALGOL 60,可以称为A语言了. 1960年ALGOL 60是一种面向问题的高级语言,他离硬件比 ...

最新文章

  1. 妙啊!不怕遮挡的图像线段匹配 SOLD2,还能联合自监督线段检测|CVPR2021 Oral
  2. Oracle Advanced Security:Column Encryption Overhead
  3. jane street information session on pythonandocaml
  4. 使用 TypeScript 自定义装饰器给类的方法增添监听器 Listener
  5. 【js】获得项目路径
  6. 一.oracle的SQL中group by使用的情况(与聚合函数的关系)
  7. 装hadoop引发的一系列事件
  8. 检测同心圆_两“心”携手,共抗心衰——“同心圆”心衰俱乐部走进临安图书馆~...
  9. android 按键上报流程,input子系统详解,按键如何上报
  10. mac php 本地服务器,在Mac上搭建本地Apache服务器一些注意点
  11. linux monitor工具,5 款 Ubuntu 系统监控工具
  12. 智慧工地-未来工地新形态
  13. 零基础深入浅出主成分分析PCA
  14. 【opencv源码剖析】背景建模mog2
  15. 初步实现fft(偶数点与奇数点均可)
  16. Vue实现打印功能最简单的方法
  17. 中考表格计算机函数求和方法,2016信息技术中考电子表格处理模块
  18. MTd与MDd的区别
  19. 飞机大战python小游戏
  20. 遨博协作机器人ROS开发 - 遨博E5 DH参数SolidWorks建模

热门文章

  1. 2021-11-05
  2. 笔记本电池更换电芯(ZT)2
  3. CISCO交换机查看接口上IP流量
  4. 502 VS 504
  5. Linux 文件编程 read函数
  6. 回顾2011年所经历的事,那些难忘的事
  7. android art源码分析,Android ART机制分析
  8. PBOC电子钱包规范简介
  9. Ubuntu 22.04 Ubuntu 22.10 解决按照官方教程无法使用搜狗输入法
  10. 【VMware vSAN 7.0】6.9 更改见证主机—我们有软硬件解决方案