锁定老帖子 主题:C,C++,java,python对比
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (10)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-27
最后修改:2012-02-27
C C良好的可移植性也为它加了分。不过现在很多其他的语言可移植性越来越好,C在这方面的优势可能会逐渐丧失。 现有的很多程序可以产生非常棒的C代码,比如语法分析器、GUI Builder等,这时候C语言也是有吸引力的,因为你所需要编写的代码只是整个程序的一小部分。 再有,我们当然应该认识道,C语言对于程序员来说具有无可替代的价值。就我这里讨论的每一种语言而论,只要你发掘的足够深,到最后你会看到它们的内核都是用纯正的、可移植的C写成的。 到了今天这个时候,我们最好把C看成是UNIX虚拟机上的高级汇编语言。 就算是其他的高级语言完全可以满足你的工作需要,抽出时间来学习C语言也仍然有益,它能帮助你在硬件体系的层次上思考问题。 即使到了今天,最好的C语言教程仍然是1988年出版的K&R第二版The C Programming Language. 总结: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 相对于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语言非常干净,设计优雅,具有出色的模块化特性。它提供了面向对象能力,但不强迫用户进行面向对象设计。其类型系统提供了强大的表达能力,类似Perl,具有匿名lambda表达式,这点又让Lisp黑客们感到亲切。Python依靠Tk提供方便的GUI界面开发能力。 在所有的解释型语言里,Python和Java最适合多名程序员以渐进方式协同开发大型项目。在很多方面,Python比Java要简单,它非常适合与构造快速原型,这一点使得它对于Java有独特优势:对于那些既不很复杂,又不要求高效率的程序,Python十分合适。 Python的速度没法跟C/C++相比,不过在今天的高速CPU上,合理地使用混合语言编程策略使得Python的上述弱点被有效地弥补。事实上,Python几乎被认为是主流脚本语言中最慢的一个,因为它提供了动态多态性。在大量使用正则表达式的小型项目,它逊于Perl。对于微型项目而言,shell和Tcl可能更好,Python显得太过强大了。 总结:Python最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-27
python的tk太弱了。控件少,UI难看
|
|
返回顶楼 | |
发表时间:2012-02-27
为什么说Java的多线程不可靠?有失败的例子吗?
|
|
返回顶楼 | |
发表时间:2012-02-28
一看就知道他是per的忠实fans吧(踩低别的语言来哄高自己喜欢的语言),其实所有语言都木有好坏的,也没有所谓的对比性,要是一心想着某个语言比另外一个语言好的话,那么就难以看到另外一个语言的有点
平心而论的观点,无喷 |
|
返回顶楼 | |
发表时间:2012-02-28
我是觉得如果真的是要效率,那就不要嫌麻烦 就用纯C来写就好,如果为了快速实现就用脚本语言
|
|
返回顶楼 | |
发表时间:2012-02-28
最后修改:2012-02-28
Java:很好用,写起来很舒服,最喜欢、最熟悉的一门语言,每天都在用。
C:不会用; C++:C++是我在学校接触的第二门语言(第一门是Basic),但是工作后从来没有正式用过它,在学校就根本没有学会,在工作中又很少实际用到它,所以对于C++,我只能说:我学过它,而且学得很多,比如数据结构、算法等,但是我不会用它。 工作中偶尔用过几次C++,我的感觉是:微软MFC很难用,QT C++写起来比较舒服,但是伴随着MeeGo的消亡,QT也日渐式微。 只用C++写过一些小软件,比如配置软件的界面、比如为Java项目进行加密的DLL动态链接库等等,我的总的评价是:C++语法莫名其妙,不符合我的审美观,比如 -> 和 .,比如* 和 &这类符号,让人很反感。 Python:语法符合我的审美观,和我接触的第一门语言Basic有点像,符合英文语法习惯,但是工作中没有用到Python的机会,个人空闲时间折腾过几次Python,仅限于"Hello World"级别。 其他语言方面: PHP:使用过两年时间,算是比较熟悉,我的感觉是:PHP很粗糙,语法不伦不类,不明白为什么PHP到现在还能活得这么逍遥自在; C#:用过一段时间,做过几个web项目和一个个人的桌面工具,感觉是:C#语法优雅,功能也很给力。 因为工作一直都不是.net阵营,所以对C#仅限于个人比较喜欢的层面。 ASP:这个已经消失了的web编程语言,我用了近一年的时间,我的评价是:ASP语法很舒服,符合英文语法习惯,我个人比较喜欢。 另外一些更小的语言方面, Javascript:每天都在用,感觉还算舒服,但是缺点是语法太不严谨,比如 alert("弹出信息"); 能正确弹出警告框,window.alert("弹出信息");这样也能正确弹出警告框等等,Javascript语法太不严谨,达到一个效果,往往很多种方式都能做到,比如document.表单ID.输入框ID.value 和 document.getElementById("输入框ID").value 等等,类似这种多种多样表达方式,Javascript中有很多,js这种语法极其不严谨的设计,非常不符合我的习惯。 我对编程语言的提倡设计是:要达到一个目的最好只有一种方法,没有其他方法,且这种方法是最简单的,不要让语言使用者在多种多样的实现方法中选择。 CSS层叠样式表:语法简单明了,非常喜欢。 Ruby:买过书,系统地学习过,Hello World 和 示例web项目也做过好几个,但是我只能说:我不会用它 ruby语法总体也算优雅,但是我最不喜欢的是,它那end块方式,非常啰嗦,如果逻辑嵌套层次很多,你会看到你的代码中到处是无穷无尽的end,我不明白为什么ruby要这样设计,如果ruby一定要有完整的逻辑开始和结束标志,那么还不如使用Java式的{}来表示,用那么多end很啰嗦的,我个人不喜欢ruby。 |
|
返回顶楼 | |
发表时间:2012-02-28
C++、java、python、ruby都用过,只想说开发没有捷径,no silver bullet!
|
|
返回顶楼 | |
发表时间:2012-02-28
yizhilong28 写道 C++、java、python、ruby都用过,只想说开发没有捷径,no silver bullet!
你最喜欢哪个? |
|
返回顶楼 | |
发表时间:2012-02-28
学过一点c,只会java的飘过
|
|
返回顶楼 | |
发表时间:2012-02-28
喜欢python的代码风格,喜欢java的严谨
|
|
返回顶楼 | |