阅读更多

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

有没有见过几千行没有缩进的代码,手贱格式化之后还不能跑了...
2 楼 clia 2014-12-20 03:34
怎么没有Ruby, PHP, JavaScript, Go, Dart?
1 楼 ykssky 2014-12-18 23:54
Python的缩进灰常蛋疼...

发表评论

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

相关推荐

  • Asp.net环境下经典MVC设计模式

    Asp.net环境下经典MVC设计模式Asp.net环境下经典MVC设计模式

  • ASP.NET下MVC设计模式的实现

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

  • 简单的MVC框架实现

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

  • MVC设计模式实现登陆程序

    一: MVC简介: MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模式的目的:实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本

  • MVC设计模式简介

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

  • MVC模式实现(上)

    MVC模式,也就是模型视图控制器。 一种软件设计典范,用一种业务逻辑(Controller)、数据(Model)、界面(View)显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 对于jsp最典型的就是JSP + servlet + javabean这里提到了servlet,其实jsp就是使用的servlet实现的,servl

  • 简介ASP.NET Core MVC 的设计模式

    什么是MVC ​ MVC有三个基本部分——模型(Model)、视图(View)和控制器(Controller)。它是实现应用程序的用户界面层的架构设计模式????。 ​ 一个典型的实际应用程序通常具有以下3层,这是很多学生在学校或者初学的时候使用的分层形式。 用户展现层 业务逻辑处理层 数据访问读取层 我们称之为三层架构,而MVC设计模式通常位于实现应用程序的用户展现层中*。 MVC如何工作 ​ 让我们了解MVC设计模式是如何实现的。假设我们想要查询特定学生的详细信息(ID为1的学生信息),并在HTM

  • MVC设计模式简单示例

    示例 此例仅是展示MVC架构模式,不具有完整性。只是能了解一下这种MVC的模式。 UserServlet package com.cheeny.controller; import com.cheeny.entity.User; import com.cheeny.service.UserService; import javax.servlet.ServletException; im...

  • 基于MVC模式开发Web应用系统设计与实现的原理

     MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据

  • MVC设计模式原理简述

    开发MVC项目之前首先明确一点,MVC设计模式可以带来更好的软件结构和代码重用。 MVC如何工作 MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。 View(视图) 视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依...

  • MVC设计模式(模型-视图-控制器)设计模式介绍(ZZ)

        1 前言   用户界面,特别是图形用户界面,承担着向用户显示问题模型和与用户进行操作和I/O交互的作用。用户希望保持交互操作界面的相对稳定,但更希望根据需要改变和调整显示的内容和形式。例如,要求支持不同的界面标准或得到不同的显示效果,适应不同的操作需求。这就要求界面结构能够在不改变软件的功能和模型情况下,支持用户对界面构成的调整。   要做到这一点,从界面构成的角度看,困难在于:在满足

  • MVC设计模式--菜鸟博客

    MVC设计模式一、什么是MVC设计模式二、MVC各层的功能三、MVC模式中的数据流程(以servlet为例)四、实体类、Dao类、Servlet类分别在系统开发中进行了哪些功能封装 一、什么是MVC设计模式 MVC(全称:Model View Controller),是一种软件架构模型 二、MVC各层的功能 Model(模型)—模型代表一个存取数据的对象或JAVA POJO,它也可以带有逻辑,在数据变换时更新控制器 View(模型)—视图代表模型包含的数据可视化 Controller(模型)—控制器作用于模

  • MVC设计模式思想及简单实现

    一、什么是MVC   MVC即Model-View-Controller(模型-视图-控制器)是一种软件设计模式,最早出现在Smalltalk语言中,后被Sun公司推荐为Java EE平台的设计模式。   MVC把应用程序分成了上面3个核心模块,这3个模块又可被称为业务层-视图层-控制层。顾名思义,它们三者在应用程序中的主要作用如下:   业务层:负责实现应用程序的业务逻辑,封装有各种对数据...

  • MVC与设计模式的关系及MVC的实现原理和设计原理

    1 MVC介绍 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切是以下三种:Observer (观察者模式), Composite(组合模式)和Strategy(策略模式)。所以说MVC模式又称复合模式。MVC(Model-View-Controller) 模式的基本思想是数据,显示和处理相分离...

  • SpringMVC超详细面试题(附答案)

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

  • Dot Net设计模式—MVC模式

    1 MVC设计模式简介   MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定系统各部分间的组织关系。对于界面设计可变性的需求,MVC(Model-View-Controller)把交互系统的组成分解成模型、视图、控制器三种部件。   视图部件把表示模型数据及逻辑关系...

  • MVC学习系列-WebForm与asp.net MVC两种设计模式区别、MVC设计模式基础了解

    ASP.NET 是一个开发框架,用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。ASP.NET 支持三种开发模式:Web Pages、MVC (Model View Controller) 以及 Web Form。下面首先区别比较一下Web Form 和MVC这两种设计模式,接着进行基础知识的讲解。 一、两种设计模式的区别 1.WebFrom 这种设计

  • MVC设计模式详解

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

Global site tag (gtag.js) - Google Analytics