阅读更多

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的缩进灰常蛋疼...

发表评论

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

相关推荐

  • MVC框架简易实现【精细】

    model -------- 业务领域的核心对象(Entity,Service,Dao)View -------- 视图层,做数据的提交和渲染 (JSP、HTML.........)Controller ------ 控制层,专门用于处理Http请求(Servlet)简化控制层以及视图渲染的操作,将这些API进行更高层封装,使用起来更加简便,可以隐藏Servlet的操作,同时还可以提供简便的部署方式。

  • MVC 模式

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

  • MVC设计模式

    对于开发人员来说,学习和掌握MVC模式是非常重要的,它可以提高开发效率和质量,使得构建复杂的应用程序变得更加容易。它为应用程序提供了一种结构化的方法,将数据、用户界面和业务逻辑分开,从而使得应用程序更易于维护、扩展和重用。解耦:MVC模式将应用程序的不同部分(数据、用户界面和业务逻辑)分离,降低了它们之间的耦合度。视图(View):视图是应用程序的用户界面。可扩展性:由于MVC模式将应用程序的不同部分分离,因此当应用程序需要扩展时,可以更容易地添加新的功能或模块,而不会对现有的代码造成太大的影响。

  • 4.创建第一个MVC项目

    第2章          Hello MVCWorld   内容摘要 初始化开发环境创建第一个ASP.NETMVC应用程序控制器、活动和视图简单数据访问   本章我们将引入贯穿本书第1部分的示例程序——GuestBook。通过GuestBook,用户向网站中发布他们的名字以及消息,同时可以浏览其他用户发布的消息。虽然GuestBook比较简单,但我们将用它学习ASP.NET MVC的

  • 9. MVC设计模式的 简单Demo实现

    目录导航目的SSM 和 SSH 的简单对比Demo 源代码 目的 熟悉MVC 类设计模式的原理。目前主流企业开发的MVC 开源框架有两种,SSM 和 SSH。框架之所以流行,在于其易复用和简化开发,精髓在思想,掌握了核心思想,掌握其他类似框架也不会有问题,后续有必要阅读一下框架源码,尤其是Spring。 SSM 和 SSH 的简单对比 SSM:SpringMVC 做控制器(controlle...

  • MVC设计模式简介

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

  • mvc设计模式实现简单登录跳转

    MVC模式 MVC最初应用于桌面程序中,M指数据模型,V指用户界面,C指控制器,是Xerox PARC在20世纪80年代为编程语言“Smalltalk-80”发明的一种软件设计模式,至今已被广泛使用。基于JavaEE的Web应用开发,经历了Model1和Model2的不同时代。 Model1: 在Model 1中,不使用Servlet,JSP和JavaBean协作共同完成任务,不是真正的MV...

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

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

  • 如何用MEF实现Asp.Net MVC框架

    目的是实现多个Controller类,View在不同的dll里, 供一个大框架调用。 原理:1.用MEF实现各个Controller类的dll的导出和导入。2.用[PartCreationPolicy(CreationPolicy.NonShared)]标记来实现每个Controller在Export时重新创建实例3.继承DefaultControllerFa...

  • MVC模式在.NET框架中的应用与实现

                                                             MVC模式在.NET框架中的应用与实现 关键词: .NET;设计模式;MVC;W                                           0            引言.NET开发平台是由微软公司近年来推出的新型体系结构,在Micro

  • SpringMVC从入门到精通:深入解析与实践指南

    本文全面解析SpringMVC框架,从基础概念到高级应用,涵盖MVC设计模式、执行流程、参数处理、拦截器、文件上传下载等核心内容。通过丰富的代码示例和实战案例,帮助开发者快速掌握SpringMVC的核心技术,提升开发效率与代码质量。无论你是初学者还是有一定经验的开发者,本文都将为你提供实用的技术指导与深入的理解。

  • 用MVC设计模式实现简单的JavaWeb登录注册功能

    MVC 全称Model(模型)-View(视图)-Controller(控制器),这是一种开发模式,他的好处是可以将界面和业务逻辑分离。 Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。 View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在Vie...

  • 设计原则与设计模式

    MVC设计模式是一种混合设计模式,M指的是model,V指的是view,C指的是controller。 model:模型持有所有的数据、状态和程序逻辑 view:用来呈现模型 controller:取得用户的输入并解读其对模型的意识(controller并不负责处理逻辑,只是将用户的输入解读为对模型的操作,所有的逻辑和对数据的操作都交给model) 一、非web应用中的MVC设计模式 用户对view的操作交由controller,controller对用户的操作进行解析,并将解析后的操作交给model,

  • php mvc模式

    MVC设计模式 MVC模式下,客户直接发送请求到控制器,控制器根据用户的请求的资源分发到相对应的模型来处理,模型完成了业务逻辑后,把要数据发送到视图,视图显示返回给客户。这就是web 或是说B/S架构的MVC工作流程。 控制器: 用户的所有请求会发送到控制器,由控制器来按需调用模型和视图。比如用户请求index.php 控制器文件,index.php里面不会设计到任何的数据库操作,逻辑操作。

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

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

  • 从经典的MVC模式到Web三层结构

    暑假这段时间,在海康这边实习,参与了海康iVMS-8700客户端的开发,对MVC有了新的认识,将之前写的这篇博客更新一下。有错误的地方,欢迎大家批评指正。

  • MVC模式实现(上)

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

  • ASP.NET MVC 搭建简单网站 --1.前端页面布局和基本样式实现

    学技术这件事儿本来就是学习现有的东西,然后变成自己的,本文当然也是借鉴的别人的东西,写出来作为一个对知识的巩固。 1.网站用的是MVC模式,新建一个MVC项目,建立一个APP1Controller,作为页面的控制器,首页采用的是传统的frameset布局,没有用到前段的UI框架,项目架构示意图: ...

  • 什么是MVC设计模式,为什么使用MVC?

    MVC 全称Model(模型)-View(视图)-Controller(控制器),这是一种开发模式,他的好处是可以将界面和业务逻辑分离。     Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。      View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户

Global site tag (gtag.js) - Google Analytics