各高级语言特点与比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各高级语言特点与比较相关的知识,希望对你有一定的参考价值。
Pascal语言:
Pascal是一种计算机通用的高级程序设计语言,由瑞士Niklaus Wirth教授六十年代末设计并创立的。
Pascal的主要特点有:严格的结构化形式、丰富完备的数据类型、运行效率高、查错能力强等特点。
由于上述特点,Pascal可以方便用于描述各种算法和数据结构。对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一。NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的数学语言。
C语言:
C语言是介于汇编语言和高级语言之间的语言,属于高级语言,也称为中级语言,是集汇编和高级语言优点于一身的程序设计语言。于1972年在美国贝尔实验室里问世。早期的C语言主要用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了九十年代,C语言开始进入其他操作系统,并很快在各类大、中、小和微型计算机上得到广泛的应用。成为当代最优秀的程序设计语言之一。
C的特点
1. 是一种结构化语言。层次清晰,便于按模块化方式组织程序,易于调试和维护。
2. C语言的表现能力和处理能力极强。不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位级别的操作。
3. 由于C语言实现对硬件的编程操作,所以既可用于系统软件的开发,也适合于应用软件的开发。C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类计算机上,从而形成了多种版本的C语言。
4. 由于C语言允许直接对位、字节和地址进行操作,能实现汇编语言的大部分功能。
5. 目标代码质量高,程序执行效率高。
总体上来说,C语言的优点是简洁、紧凑、使用方便、灵活、易于学习和应用。仅有32个关键字。9种控制语句,程序的书写形式也很自由。
C语言的弱点:非强类型;语法限制不严格,使得编程者无法过多地依赖C编译程序去查错;缺少实时检查,如数组越界等。
从严格上来说,C语言是块结构语言,这是因为它在结构上类似于ALGOL、Pascal和Modula-2。从技术上讲,块结构语言允许在过程和函数中定义过程和函数。因为C语言不允许在函数中定义函数,所以不能称为通常意义上的块结构语言。
C语言作为一门面向过程的计算机语言,至今已有三十多年历史,应用广泛,无论是Windows还是Linux,你所看到的底层都是用C写的。大部分的网络协议也都是用C实现的。你看到的最漂亮的游戏画面也是用C实现的,工业控制程序也是用C实现的。不过C不是万能,只是某些方面它适用而已。
C++语言
C++是于1986年由AT&T贝尔实验室开发的,语言开发的目的在于通过数据封装减少程序变量的副作用,从而降低程序的复杂性并提高程序的可靠性。(笔者曾经听到的开发C++的目的是由于懂得C语言的人越来越多,所以需要再出一门更难的、比C语言强大的语言,才能保住饭碗,so。C++出世啦)C++是C语言的直接扩展,C++的多继承机制能更好地描述对象的属性和行为。
C++是C的扩展,但C++可以作为一种全新的语言来看。
C++的特点:面向对象、继承、封装、多态性。
由于C++是C的扩展,所以也具有C的特点。
C++在C的基础上,加入了面向对象编程思想,也就决定了C++的效率在某一方面是不如C的。比如定义一种类型,C++用类(Class)来封装,而C可能就直接几个变量的组合就成了一个结构体(Struct),类不仅具有成员变量,还具有成员函数等,在精细的比较其效率时,C会比C++的效率要高。但由于时代的发展,项目或工程的庞大化,基于面向对象的思想显然更能适应。即C++在这方面能比C要做得更漂亮。现在不少系统级编程都是用C++实现,许多应用级别的软件也是用C++实现。
这里要注意一点,就是C++并不是完全的面向对象语言。它是提供了面向对象的模型以及思路,但是同时兼容了面向过程的模型。
Java语言
Java语言来自于Sun公司的一个叫Green的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们就可以把email发给电冰箱、电视机等家用电器。对他们进行控制和信息交流。开始,准备用C++,但C++太复杂,安全性差,最后用一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾依此投标一个交互式电视项目,但被SGI打败。可怜的Oak几乎无家可归,恰巧这时Mark Ardreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用(Java)编制了HotJava浏览器,得到了Sun首席执行官Scott McNealy的支持,触发了Java进军Internet。Java的取名有一段趣闻:有一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。
Java的特点:
1. 简单性:风格类似于C++,Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。
2. 面向对象:Java是一种完全面向对象语言。从这点来看,Java类似于SmallTalk,但其特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。
3. 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。
4. 健壮:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。
5. 结构中立:Java将程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都执行这种中间代码。这种中间语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。
6. 安全:
1)删除了香指针和手动释放内存等功能,避免了非法内存操作。
2)当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来。
Java在机器上执行前,要经过很多测试,它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。
7. 可移植的:同体系结构无关的特性使得Java应用程序可以在配备Java解释器和运行环境的任何计算机系统上运行。任何Java代码会被解释成一种中间语言,然后通过不同机子的特定环境(如机器指令)运行程序。实现方便移植的特点。
8. 解释性。Java解释器能直接运行目标代码指令。链接程序通常比编译程序所需资源少。
9. 高性能。如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300,000个过程。
10. 多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的更大好处是更好的交互性能和实时控制性能。
11. 动态:动态特性允许程序动态地装入运行过程中所需要的类。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。
Java在诞生之后不久,便受到广大群众的欢迎,甚至有人说出有了Java,可以不要C/C++了。一度把Java提到了很高的地位。这当然是对Java的一种赞赏,只是有点过了。到今天,Java依然不能取代C,C++,而且还出现了新的对手――.Net(后面将会介绍)。
Java目前主要应用:Web浏览器、网络应用系统。
C#语言。
C#是一种精确、简单、类型安全、面向对象的语言。说到C#,就不得不先简单介绍一下.net。到底什么是.net呢,按照微软总裁兼首席执行官Steve Ballrner把它定义为:.Net代表一个集合,一个环境,它可以作为平台支持下一代Internet的可编程结构。C#是.net的代表语言。
C#的特点:
1. 完全面向对象。
2. 支持分布式,之所以有C#,是因为微软相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上。所以C#一出生就注定了能很好解决分布式问题。
3. 跟Java类似,C#代码经过编译后,成为了一种IL(中间语言)。在运行时,再把IL编译为平台专用的代码。
4. 健壮,C#在检查程序错误和编译与运行时错误一点也不逊于Java,C#也用了自动管理内存机制。
5. C#不像Java那样完全摒弃了指针和手动内存管理。C#默认情况下是不能使用指针的,程序员在有必要时可以打开指针来使用。这样可以保证编程的灵活性。
6. 安全性:C#的安全性是有.net平台来提供的。C#代码编译后成为IL语言。是一种受控代码,.net提供类型安全检查等机制保证代码是安全的。
7. 可移植性:由于C#使用类似Java的中间语言机制。使得C#也跟Java类似,可以很方便的移植到其他系统。在运行时,再把中间代码编译为适合特定机器的代码。
8. 解释性:C#也是一种特殊的解释性语言。
9. 高性能:C#把代码编译成中间语言后,可以高效的执行程序。
10. 多线程:与Java类似,可以由一个主进程分出多个执行小任务的多线程。
11. 组件模式:C#很适合组件开发。各个组件可以由其他语言实现的,然后集成在.net中。
C#是在Java流行起来后所诞生的一种新的语言。由于微软在操作系统上占有很大的优势。在以往的开发中累积了不少经验,所形成的.net平台,所以C#在Windows方面可以说比Java具有更大的优势。如果单纯从技术上来讲,C#在网络编程上可以与Java匹敌。C#还在Windows Forms也有一定的优势。
C#是一种非常类似于C++的语言,风格是更接近于Java,不管是C++程序员还是Java程序员,都可以很方便的转到C#上来。
C#的强大是依赖于.net的发展,而.net的发展是看微软在.net上的决心和投入有多少。从Windows 2003和Vista系统可以看出(前者内置.net1.1,后者内置.net2.0。).Net在Windows编程中具有重要的战略意义。
C#目前主要是应用在网络编程上,其他领域比如数据库、窗体编程,都逐渐在增大。
Pascal PK C
现在,看我们学习Pascal和C的过程:学Hello world,然后知道怎么编译,运行。然后学习基本数据类型,然后输入输出。不管学校希望学生能学多好,实际来看,学生学Pascal跟学C是没什么区别的。不同的只是语言风格。有人也许会说,学C的精华在于指针。学C的人会比Pascal强很多。没错,指针是学C的一个重点。但是就按我学C的课本来看,用到的指针只是很简单的。理解了*p和p有什么不同,就够了。然后会编个简单的几行代码,就自认为会C了。C库中有很多函数,教师在课堂上几乎没讲。比如memset,qsort等,少了这些。你学Pascal和C没什么不同,只是作为了学习其他语言的铺垫而已。而新生由于没有语言根基,有不少好学生由于教师在课堂上没讲,就以为学完教师所教的了。这正是好学生的弱点所在。如果是“坏”学生,不听课堂的。倒还可能发现课堂所学的C是多么肤浅。还有,我至今没见过有学校会教C的图形开发的。虽然图形开发不是语言基础。不过对于扩展新生的编程视野是一个不错的选择。现代程序软件支持图形窗口的太丰富了,几乎不会太多的学生去在意窗体的设置,定位等功能。图形编程还能激起学生的编程欲望。笔者曾经实现过C的动画演示,当里面的所有图形都按预期的运动起来的时候,那种兴奋感犹如你在冰天雪地的情况下忽然淋你一盘冰水所感到的那种感觉。
C PK C++
C++是在C的基础上发展起来的。看起来似乎这两个pk,赢者肯定C++。其实未必。C至今还有生存的空间,而没有被C++全盘代替。说明了C还是具有不可替代的作用。C目前主要应用在于硬件底层的部分,以及对于性能要求较高的应用程序中。但是对于复杂的系统级的开发,显然C++显得从容自在。联系实际,不少人学C++的时候,就已经有C 的基础了。有C的基础,学C++的基本类型的时候可以快速渡过,然后学类,继承,多态等概念。还是从我的经历说起,我选了C++,然后几乎没怎上课,因为实在听了想睡觉,期末前用C++做了一个大作业后,就叫懂C++了哈,然后考试当然轻松过了。其实我那时还是没学到C++,本质点说,我只是还是在会点C的基础上。多了一个结构类型:类,而已。后来使用了1年的C++后,才恍然察觉到当年的无知。才明白C++是什么。我相信已经学过C++的同学估计现在连IO流的概念还没搞清楚的人很多。造成这种现象的原因在于:1. 学生本身没有认真去编程实现。2. 教师只是重复的讲课本而已。最终判定学生是否会C++的标准也只是考试为主。关于高校的考试制度在计算机系中的效用,笔者将在未来几天内出一篇个人观点文章。
Java PK C#
目前不少人对这两种语言议论纷纷。笔者在开始学C#的时候,曾经看过Java程序员对于C#的观点。把C#贬得一文不值。忽然发现,似乎很多Java的程序员对C#怀有天生的敌意。笔者目前自认为精通的是C#(别BS我)。以往学过Java,在此我写一下我所感触到的。虽然微软一直称C#是继承于C/C++,但是不论从代码结构,还是内置的支持类,都跟Java有惊人的相似之处。我感觉C#就是在Java之上,针对Java的优点和缺点来设计的。我用过C、C++、Java,感觉还是C#最好,这只是笔者的个人感受。由于C#还保留着指针,当要实现一下比较底层的,性能要求高的时候,解决办法之一是C#可以打开指针,而Java是做不到的,Java只能通过其他途径,比如优化算法来解决。
Java在非windows下获得了很大的成功:某调查公司曾经使用Google搜索引擎来统计以下指标:熟练使用某种语言的工程师数量、某种语言课程教学的可用性、有多少公司在出售用某种语言编写的软件。最后综合得分情况是:Java以45.2分排名第一;第二名是C,得分是32.2;C++是以24.6分排名第三;C#远远落后在第九位,得分为4.6。这些数据是几年前的数据。在这次测试中还发现,C#的受欢迎程度正在急剧上升;而Java相对稳定。这其中一个原因是.net允许许多种编程语言,而不像Java那样,限制人们只能使用一种语言。开发者能够使用包括C、C++、C#甚至Java在内的几乎任何语言来编写代码,然后把这些代码翻译成机器看得懂的CLR代码(公共语言运行时代码)。这样.net可以让开发者保护自己的“代码投资”,换句话说,过去人们用C、C++编写的代码都能再次被利用。而Java只能重新写代码。
以上是关于各高级语言特点与比较的主要内容,如果未能解决你的问题,请参考以下文章