开源领袖eric raymond对主流编程语言的评价 -pg电子游戏网站

4顶
0踩

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最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。
来自:
4
0
评论 共 3 条 请登录后发表评论
3 楼 2014-12-22 00:18
ykssky 写道
python的缩进灰常蛋疼...

有没有见过几千行没有缩进的代码,手贱格式化之后还不能跑了...
2 楼 2014-12-20 03:34
怎么没有ruby, php, javascript, go, dart?
1 楼 2014-12-18 23:54
python的缩进灰常蛋疼...

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 1.mvc(model view controller) mvc是什么? 是一种软件架构思想、其核心思想是,要将数据处理与数据展现分开,按照这种思想,可以将一个软件划分成三种不同类型的模块,分别是模型、视图和控制器。 模型负责数据处理(业务逻辑)、视图负责数据展现(表示逻辑)、控制器负责协调模型和视图(请求要先发送给控制器,由控制器选择对应的模型来处理;模型返回的处理结果也要先发送给控制器,由控制...

  •   asp.net是微软最新推出的新型体系结构.net框架的一部分,它为构造新一代动态网站和基于网络的分布式应用提供了强有力的支持。与以前的 web 开发模型相比,asp.net 提供了许多重要的优点例如: 简易性;安全性;可管理性等。而且与基于过程的asp页面技术相比,面向对象技术在asp.net中得到了完全实现。用传统asp技术建立的web应用实例中,在页面中同时实现显示,业务逻辑和流程控制,

  • javaee体系结构包括四层,从上到下分别是应用层、web层、业务层、持久层。struts和springmvc是web层的框架,spring是业务层的框架,hibernate和mybatis是持久层的框架。 为什么要使用springmvc? 很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有...

  • mvc设计模式详解 mvc模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。不同的技术人员可以通过自身的专长分组 mvc模式(model-view-controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(model)、视图(view)和控制器(controller)。 (控制器controlle

  • mvc 设计模式一般指 mvc 框架,m(model)指数据模型层,v(view)指视图层,c(controller)指控制层。使用 mvc 的目的是将 m 和 v 的实现代码分离,使同一个程序可以有不同的表现形式。其中,view 的定义比较清晰,就是用户界面。 在 web 项目的开发中,能够及时、正确地响应用户的请求是非常重要的。用户在网页上单击一个 url 路径,这对 web 服务器来说,相当于用户发送了一个请求。而获取请求后如何解析用户的输入,并执行相关处理逻辑,最终跳转至正确的页面显示反馈结果,这些

  • 模型层model的典型实现 功能 模型层的典型代码模式 控制器调用模型层获取数据的典型做法 基础模型类 实现模型类的单例模型工厂 整个模型层的类库结构图 控制器层controller的典型实现 控制器的作用 控制器类的常规做法 控制器的划分 控制器的动作 基础控制器类 视图层view的典型实现 功能 数据分类

  • 基本认识 mvc分别对应的是model,view,controller,也就是模型,视图,控制器。 模型:模型持有所有数据、状态和应用逻辑。模型对视图和控制器是无视的,虽然它提供了操纵和检索其状态的接口。 控制器:取得用户输入并解读其对模型的含义。 视图:呈现模型,视图通常直接从模型种取得显示所需的状态和数据。 几个说明: ① 你是用户,你和视图交互 视图是你看模型的窗口,当你对视图做一些事情的时候,视图就告诉控制器你做了什么,控制器的工作就是负责处理。 ②控制器要求模型改变状态 控制

  • asp.net 是一个开发框架,用于通过 html、css、javascript 以及服务器脚本来构建网页和网站。asp.net 支持三种开发模式:web pages、mvc (model view controller) 以及 web form。下面首先区别比较一下web form 和mvc这两种设计模式,接着进行基础知识的讲解。 一、两种设计模式的区别 1.webfrom 这种设计

  • c#.net中mvc架构的应用关键字数据集、控件、数据绑定、mvc结构。描述在软件开发时使用类传递数据的方式,即:database –component - dataset – class – viewer(显示控件),这样在数据和类交换时不得不手写大量的代码编程时带来很大的麻烦(可维护性大大降低)。本文结合mvc三层结构实例介绍了运用数据集和数据绑定来解决这个问题。数据绑定

  • 按照peaa一书的说法asp.net属于page controller, 不过我感觉它与mvc模式也很像,只是controller与view比较亲密,在一个class里。 具体做法如下,与view有关的部分有两个地方,一个是pageload的!postback, 另外再写一个prepareview方法,每个事件处理完毕后都调用这个preapareview。这样做的好处是当view发生变更的时...

  • java之mvc设计模式使用 一、设计模式简介: 在学习mvc设计模式之前,先简单说一下什么是代码的设计模式。 官方的说法是:设计模式(design pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。设计模式是软件工程的基石脉络,如同大厦的结构一样。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化

  • 1、什么是spring mvc?简单介绍下你对springmvc的理解? spring mvc是一个基于java的实现了mvc设计模式的轻量级web框架,通过把model,view,controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 2、什么是mvc? mvc主要的用途就是对组件之间进行隔离分层。 m:业务逻辑...

  • 一、asp.net mvc简介 1、为什么需要mvc设计模式(asp.net webform的缺点) 1)后端程序逻辑与前端ui高耦合 2)视图状态管理等机制导致网络带宽占用增加 2、适用场景: 1) asp.net webform适用于基于局域网的web应用程序(erp, hr, crm等企业内部管理系统) 2) asp.net mvc适用于基于因特网、高并发的中、大型web应用程序(门户网站、电商等) 3、主要概念: 1)组成:model(模型)、view(视图)和controller(控制器) mod

  • mvc设计模式详解 1.model-view-controller(模型-视图-控制器)    mvc设计模式实际上强制性地将程序的输入、处理、和输出分开。    model-view-controller实际上担当着不同的角色。    model:代表着业务数据和业务逻辑处理,(主要包括业务逻辑模块(web项目中的dao类)和数据模块(model类)和javabean相同,由model

  • mvc模式model-view-controller头字母的缩写,中文翻译为“模型-视图-控制器” 模式(或者模型)。该模式把一个gui应用划分 业务逻辑处理(m),画面表示(v),控制(c)三部分,并以此为基础进行设计和开发。 在设计和开发应用系统时,往往需要考虑系统的可维护性,可扩展性,可重用性等;而且,一个大规模的系统开发,往往都是多人分工合作,为了开发上的效率性考虑,一般都安排不同的专家...

  • 目录: 一、mvc原理解析 二、httphandler 1.httphandler,ihttphandler,mvchandler的说明 2.ihttphandler解析 3.mvchandler解析 三、httpmodule 1.httpmodule能干什么 2.httpmodule的使用 3....

  • 原文地址:https://developer.apple.com/library/ios/documentation/general/conceptual/cocoaencyclopedia/model-view-controller/model-view-controller.html#//apple_ref/doc/uid/tp40010810-ch14 the model-

  • 博学,切问,近思--詹子知 (http://blog.csdn.net/zhiqiangzhan)   mvc本来是存在于desktop程序中的,m是指数据模型,v是指用户界面,c则是控制器。使用mvc的目的是将m和v的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。c存在的目的则是确保m和v的同步,一旦m改变,v应该同步更新。  模型

  • mvc studentmodel.php studentcontroller.php student.html index.php mvc中m(modle)表示数据处理,v(view)表示视图,c(contorller)表示控制器, 用户发起请求,数据将传递给控制器,控制器给模型进行数据处理,最终将数据传递给控制器,控制器调用视图,呈现出html返回给用户 千遍万遍不如手写一遍 studentmodel.php <?php class studentmodel { protected $lin.

  • mvc 模式 mvc 模式代表 model-view-controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 model(模型) - 模型代表一个存取数据的对象或 java pojo。它也可以带有逻辑,在数据变化时更新控制器。 view(视图) - 视图代表模型包含的数据的可视化。 controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并...

global site tag (gtag.js) - google analytics
网站地图