`

记下来明天看

    博客分类:
 
阅读更多

出处:http://www.iteye.com/topic/1120944

 

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最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。

分享到:
评论

相关推荐

    中班数学活动认识昨天今天明天.pptx

    接下来的分组操作环节,设计了四个不同的任务,分别涉及气象、值日生、食谱和活动照片,这些任务都与孩子们的生活紧密相关,有助于他们在实际操作中应用所学知识。每个任务都要求孩子们将事件与对应的日期(昨天、...

    (课堂听写)9.明天要远足课件

    此外,为了使听写更富有趣味性和挑战性,教师还可以设计不同难度的听写任务,例如,逐步增加句子长度,或者在播放语音时加入一些停顿,让学生猜测接下来的内容。同时,结合课文中的插图和情境,可以激发学生的学习...

    十大管理技巧帮你统筹时间.doc

    如果你不能清楚地记得每件事都做了没有,那么一定要把它记下来,并借助时间管理方法保证它的按时完成。 五、制一个表格,把本月和下月需要优先做的事情记录下来 很多人开始制定每一天的工作计划。但是,有多少人会...

    PHP获取昨天、今天及明天日期的方法

    首先,我们来看如何获取昨天的日期。在PHP中,`mktime()` 函数可以用来创建一个时间戳,它接受6个参数:小时、分钟、秒、月份、日期和年份。为了得到昨天的日期,我们可以在当前日期的基础上减去一天。以下是如何...

    个人收支分析系统

    如果你今天忘了输入,没关系可以明天输入,只是改变下消费时间而已. 并不强迫你每天都输入,当然养成了好习惯自然好. 因为每天输入,就可以看到消费的增长,心里就会下意识控制住. 如果月初想输入上个月的记录,也可以在...

    新概念51单片机C语言教程 郭天祥-5

    另外这个133M的书籍是要给那些真正需要的人 如果不设置资源分 有些人可能下载下来以后就不会打开 完全是占有欲所驱使 没有分不要紧 可以直接找我索取。 由于上传权限限制20M 这本书压缩后共分为6个压缩包 需要全部...

    新概念51单片机C语言教程 郭天祥-4

    另外这个133M的书籍是要给那些真正需要的人 如果不设置资源分 有些人可能下载下来以后就不会打开 完全是占有欲所驱使 没有分不要紧 可以直接找我索取。 由于上传权限限制20M 这本书压缩后共分为6个压缩包 需要全部...

    新概念51单片机C语言教程 郭天祥-3

    另外这个133M的书籍是要给那些真正需要的人 如果不设置资源分 有些人可能下载下来以后就不会打开 完全是占有欲所驱使 没有分不要紧 可以直接找我索取。 由于上传权限限制20M 这本书压缩后共分为6个压缩包 需要全部...

    新概念51单片机C语言教程 郭天祥-6

    另外这个133M的书籍是要给那些真正需要的人 如果不设置资源分 有些人可能下载下来以后就不会打开 完全是占有欲所驱使 没有分不要紧 可以直接找我索取。 由于上传权限限制20M 这本书压缩后共分为6个压缩包 需要全部...

    人教版小学四年级科学上册全套教案.doc

    * 刚刚我们观察的是今天的天气,那么明天又会天气怎样呢? * 后天呢? * 一个月内我们 XX 的天气又在发生怎样的变化呢? * 在接下来的一个月时间里请大家每天都能把观察到的天气现象记录下来 课题:天气日历 教学...

    diaryface20:日记脸2.0

    事件的时间从简单的日期变成了更容易阅读的“今天”、“明天”、“星期二”,或者,如果未来足够远,则将日期作为月份名称和日期。 如果手表检测到运动,则事件每3秒更改一次,但每次更改会逐渐减慢至30秒,以节省...

    1明天再练吧——学习ppt课件

    - **明日歌**是一首中国古代流传下来的诗歌,强调时间的宝贵和珍惜现在的重要性。 - **核心思想**:“明日复明日,明日何其多。我生待明日,万事成蹉跎。”这句话深刻揭示了如果总是将事情推迟到明天去做,最终可能...

    百度地图毕业设计源码-Winter-Vacation-Record:记录我寒假的成长:racing_car:

    接下来换一个记录新的开始. 2020-3-18 今天面了两场, 腾讯和阿里, 简单记录一下 腾讯机试, 兼容IE8的拖拽DIV, 感谢DOM编程艺术, 兼容IE8主要是attachEvent, 并且IE8没有事件捕获过程 大数相加, 有点像做过的比较版本...

    湖南省宁乡县玉潭镇2020学年八年级英语上学期期中考试试题(无答案).doc

    接下来的几节,学生需要听取对话或独白,然后从A、B、C三个选项中选择最佳答案。这些对话涵盖了生日、活动安排、个人技能、学习频率以及日常活动等多个话题,都是日常生活和学习中常见的场景。 例如,对话中涉及到...

    ChatGPT,可能不止是最重要的生产力工具

    虽然第二天没有用ChatGPT,但是这个事记心里了,所以昨天,趁大家没注意,来了个 “偷袭”,不知道有多少小伙伴“大意了,没有闪”中招了呢?不过据后台大家留言反馈情况,以及昨天取关人数创了这个月新高的情况来看...

    招商银行时间管理实务.pptx

    每日工作预定表是提升效率的关键,前一天晚上规划好次日的工作,将任务写下来,集中处理相关工作,不偏离预定的任务清单。艾森豪威尔原则指出,任务应按紧急性和重要性分为四类:A类任务立即处理,B类任务有策略性地...

    情商竞争力-行动力实践

    1. **来自太阳的问候**:早晨起床后,面向太阳的方向(即使看不到太阳),想象太阳正在升起,向太阳表达问候,并大声回答太阳提出的三个问题(今天有哪些让你高兴的事?哪些事值得追求?有哪些好事等待你?)。这种...

    《新手学黑客攻防》┊神龙工作室[.PDF]

    系统会将用户在使用电脑过程中的操作记录下来,这样方便了用户查阅以前 的操作,但这些记录往往也会成为网络攻击者利用的漏洞。 3.1 查看电脑的使用记录 76 3.1.1 查看上网时间 76 3.1.2 查看电脑开关机记录 77 ...

    北师大数学二年级上PPT课件.pptx

    接下来的练习部分让孩子们从不同数量黄球和白球的盒子中摸球,以此让他们理解和区分“可能”,“不可能”以及“一定”这些概率概念。例如,如果盒子里全是黄球,那么摸出的球“一定是黄球”。 课件中还有几个填空题...

    【思科ACI】APIC手动安装及升级

    以上的情况都是无论是在哪个 Starting 上停留,如果 10 分钟内没下文了,不用看了,已经被 hung 起来了,你等到明天你也等不出结果来,至于为什么,我在网上也找了很多文章,什么改 inst.rzam=0 或者在引导改内容都...

Global site tag (gtag.js) - Google Analytics