C,C++,java,python对⽐
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++优点在于作为编译型语⾔,把效率与泛型和⾯向对象特性结合起来,其缺点在于过于华丽复杂,倾向于⿎励程过分复杂的设计。
JavaJava的设计很聪明,它采⽤了⾃动内存管理,这是最⼤的改进,⽀持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适合⼤项⽬,不过这⼀点并没有得到有⼒的证明。
PythonPython是⼀种脚本语⾔,可以与C紧密整合。它可以与动态加载的C库模块交换数据,也可以作为内嵌脚本语⾔⽽从C中调⽤。其语法类似C和模块化语⾔的杂合,不过有⼀个独⼀⽆⼆的特征,就是以缩进来确定语句块。
Python语⾔⾮常⼲净,设计优雅,具有出⾊的模块化特性。它提供了⾯向对象能⼒,但不强迫⽤户进⾏⾯向对象设计。其类型系统提供了强⼤的表达能⼒,类似Perl,具有匿名lambda表达式,这点⼜让Lisp⿊客们感到亲切。Python依靠Tk提供⽅便的GUI界⾯开发能⼒。
在所有的解释型语⾔⾥,Python和Java最适合多名程序员以渐进⽅式协同开发⼤型项⽬。在很多⽅⾯,Python⽐Java要简单,它⾮常适合与构造快速原型,这⼀点使得它对于Java有独特优势:对于那
java调用python模型些既不很复杂,⼜不要求⾼效率的程序,Python⼗分合适。
Python的速度没法跟C/C++相⽐,不过在今天的⾼速CPU上,合理地使⽤混合语⾔编程策略使得Python的上述弱点被有效地弥补。事实上,Python⼏乎被认为是主流脚本语⾔中最慢的⼀个,因为它提供了动态多态性。在⼤量使⽤正则表达式的⼩型项⽬,它逊于Perl。对于微型项⽬⽽⾔,shell和Tcl可能更好,Python显得太过强⼤了。
总结:Python最出⾊的地⽅在于,它⿎励清晰易读的代码,特别适合以渐进开发的⽅式构造⼤项⽬。其缺陷在于效率不⾼,太慢,不但跟编译语⾔相⽐慢,就是跟其他脚本语⾔相⽐也显得慢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论