【转载】著名黑客雷蒙评价几种编程语言

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 最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。
时间: 2024-10-25 14:13:11

【转载】著名黑客雷蒙评价几种编程语言的相关文章

帮你提升 Python 的 27 种编程语言

以下为正文: 作为全球最流行的编程语言联合设计者之一,我经常看到的一种令人沮丧的行为(在Python社区和其它社区都有),就是那些有影响力的人试图把“缺失”的恐惧感灌输给其它开源社区,将其当作对社区贡献的源动力.(我偶尔会对自己的这种不当行为感到内疚,当别人落入同样的陷阱时我也就更容易察觉到). 虽然借鉴其他编程语言社区的经验是一件好事,但以恐惧为基础的方法来激励行动存在严重的问题,因为它将助涨社区成员为争取贡献者的关注而将其它社区的成员视为敌人,而不是当做潜在的盟友去迎接更大的挑战,共同推动顶

Java等13种编程语言名称的来历

Java的发展历程丰富多彩.充满了传奇色彩,被现在众多程序员和企业广泛使用,不用质疑这是Java的领先技术的结果. Java或者Python等编程语言,你可能每天都在使用,他们是你工作的乐趣来源和实现梦想的工具,但是你知道这些语言的名称来历吗?本文尚学堂小编为大家总结了常13种编程语言的名称来历, 快来看看你的语言名字是怎么来的吧. 可能程序员们都认为编写代码时给变量取名是件烦人的事,不过他们还需要给另外一个东西取名, 那就是新的编程语言.编程语言命名通常有几个规律,如根据特性取缩写(如BASI

24种编程语言的Hello World程序

24种编程语言的Hello World程序 这篇文章主要介绍了 24 种编程语言的 Hello World 程序,包括熟知的 Java.C 语言.C++.C#.Ruby.Python.PHP 等编程语言,需要的朋友可以参考下. Hello World,几乎是程序猿学习各种语言的第一个程序.心血来潮,汇总并整理了下主流开发语言如何实现,包括大致快速了解下这门语言.开发.编译.环境搭建.运行.简单语言等,其实很多语言是有关联的.在当下,只掌握一门语言是不够的,比如说 Python,语言简洁.开发快是

13种编程语言名称的来历

13种编程语言名称的来历 可能程序员们都认为编写代码时给变量取名是件烦人的事,不过他们还需要给另外一个东西取名,那就是新的编程语言.编程语言命名通常有几个规律,如根据特性取缩写(如BASIC,COBOL,TCL和LISP),以已有的语言为基础(如C++,C#和CoffeeScript),或直接是数学和计算机领域杰出人物的名字(如Ada,Pascal和Turing).有时,设计者取名时更充满想象力.下面是13个意味深长的名字,以及它们背后的故事. Python 于20世纪80年代末,由Guido

最适合人工智能开发的5种编程语言

原文: 最适合人工智能开发的5种编程语言 [IT168 评论]自从去年,AlphaGo打遍天下棋手无对手,人工智能的风头就一直无人能及.在刚刚过去的IT领袖峰会上,BAT三位大佬都看好人工智能的未来发展.今年年初,百度就做了一个大动作,在医疗方面押宝人工智能,所以在这次峰会上李彦宏也发声称互联网是道开胃菜,人工智能才是主菜. 人工智能是一个很广阔的领域,很多编程语言都可以用于人工智能开发,所以很难说人工智能必须用哪一种语言来开发.选择多也意味着会有优劣之分,并不是每种编程语言都能够为开发人员节省

盘点:2019年最赚钱的10种编程语言

GitHub 逐渐成为一个中心,超过 4000 万开发人员使用 GitHub 来分享项目的代码,无论是个人的.行业的还是其他的. 在去年,因为与 Google 和 Amazon 的竞争,微软以 75 亿美元的价格收购了 GitHub,这很快成为它吸引云开发人员的关键. 作为开发人员的最大活跃站点之一,GitHub 是追踪开发人员中最流行的最佳场所.为此,我们发布了年度报告,让我们了解一下全世界的开发人员正在使用哪些技术. 根据对 GitHub 的统计,这是 2019 年最流行的 10 种语言:

c++/java/c# 几种编程语言的指针、引用比较

前一段时间,我在 cnblogs 别人的博客中,谈到: java 中的引用/指针,与 c++/C# 中的引用/指针不是一个概念. Java 引用,相当于 c++ 指针(fun3).Java 引用可以赋值 null, 而 c++ 引用 (见 fun2) 不能赋值 null,c++ 指针可以赋值 null(fun3). Java 中,无 c++ 引用(fun2)对应的语法. 结果引起不必要的质疑,特此,写博客,对c++/java/c# 几种编程语言的指针.引用,进行比较,期望引起更多的人,对此有所关

12 种编程语言的起源故事

过去的几十年间,大量的编程语言被发明.被替换.被修改或组合在一起.每种语言总在争论中诞生,又在进化中消亡.而这些语言的的创造者,无一不是编程世界中的标志性人物,高举探索的旗帜不断前行.敬仰之情促使了这篇文章的诞生,这里收集并分享了这五十年来最成功.最流行的十二门编程语言和它们的创造者的故事. 1.Java 的起源 1990 年代初,任职于 Sun 公司的詹姆斯·高斯林等人开始开发 Java 语言的雏形,最初被命名为 Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机.电话.闹钟.烤面包

[转载]C#播放流媒体的几种方法

做视频开发要学的东西真多,不知道如何入门,乱打乱撞,慢慢摸索吧! 首先搭建Windows Meida Server ,方法很简单,试试就会.在这里需要声明的是,这几种方法 都可以播放 本地视频.并且基于 2中的方法一方法二还可以直接播放 电视卡.摄像头 视频.或者用方法二可以捕捉 电视卡.摄像头.桌面等信息到新的文件.网络等-- 接着使用下面的几种 方法供使用 1.直接使用WMP(Windows Media Player) WMP是什么东西,想必不用介绍,直接上 方法. 附关键部分代码 wmpl