编程语言的比较

上传人:kms****20 文档编号:40480899 上传时间:2018-05-26 格式:DOC 页数:22 大小:52.50KB
返回 下载 相关 举报
编程语言的比较_第1页
第1页 / 共22页
编程语言的比较_第2页
第2页 / 共22页
编程语言的比较_第3页
第3页 / 共22页
编程语言的比较_第4页
第4页 / 共22页
编程语言的比较_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《编程语言的比较》由会员分享,可在线阅读,更多相关《编程语言的比较(22页珍藏版)》请在金锄头文库上搜索。

1、编程语言的比较编程语言的比较C C+ Java .NET Ruby JavaScript类型 无类型 强类型 强类型 强类型 强类型 强类型静态/动态 静态 静态 静态检验类型动态解释执行 动态 动态支持面向过程 是 是 否 否 否 是支持基于对象 否 是 否 是 是 是支持范型 否 否 是 是 否 否支持模板 否 是 否 否 否 否支持面向对象 否 是 是 是 否 否C 语言适合编写操作系统和其他直接操纵硬件硬件的编程。C 语言的优点1, 面向过程开发,以函数为中心。简单有效。实现了简单的接口。2, 面向机器,让用户可以完全的操纵机器,效率较高。C 语言运行高效,广泛应用于各种计算领域。对于

2、简单的任务,非常有效。 C 语言的缺点1, 函数无法有效控制需要的数据。不能保证外部状态不变。容易出现 Bug。2, 对于机器的控制太强,也就是依赖太强。由于过于强调效率,使用 C 语言编程时,更多的需要考虑机器,而不是问题本身。由于过于关注机器,而不是问题域本身,因此抽象能力不足。容易出现各种 Bug。对于编写大型的程序,常常力不从心。C 语言的使用方法C 语言作为一种简单高效的编程语言,适用于编写简单的程序。在编程中,应该注意扬长避短,使用面向过程的编程范式,少用对机器的依赖。1.使用函数编程时,应该尽量使用函数参数传递状态,少用全局数据。因为,你无法保证全局数据不被其他代码改变。这样使用

3、函数,叫作“纯函数” 。类似于函数式编程的用法。而且,使用这种方式编程,由于不存在全局数据,在进行多线程开发时,还不需要考虑多线程问题。2.使用结构化的编程方式。不要卖弄技巧。3.函数是接口。尽量使用函数调用而不是直接的代码。通过层层分层,分配职责,编写出短小精悍,易于维护的代码。4.尽管 C 语言是一种面向机器的语言。但是,我们还是应该尽量少地依赖机器。多从问题域来考虑和抽象问题。如,少用内存假设等等。因为,我们会使用很多种语言,C,C+,Java,C#等语言的很多语法类似。但是实际的表现,各个语言都是不同的。如果过分考虑 C 的机器特性,那么很可能会因为记错而编写出错误的代码。5.代码,首

4、先是给人看的。顺便给机器执行!不要处处优化代码。只应该优化性能瓶颈。因为优化的代码,常常表示很难看懂!6.应该大量使用 Struct 组织相关的数据。在用 C 语言编程时,也应该树立类型和对象状态的概念。把 Struct 作为函数的参数传递数据。过程式设计:1、自上而下(top-down)的设计方式:是一个自顶向下,逐步求精的过程;2、以 main 函数概括出整个应用程序需要做的事情,而 main 函数由对一系列的子函数的调用组成;main 中的每一个子函数都可以被精炼成更小的函数。重复这个过程,即可完成一个过程式的设计;3、特征是以函数为中心,以函数作为划分程序的基本单位,数据往往处于从属地

5、位。过程式设计的优点:易于掌握与理解,符合人们的思维习惯;过程式设计的缺点:1、不能适应问题比较复杂,或者需求经常变化的情况;2、数据与操作分离开,对数据与操作的修改变得很困难;3、程序架构的依赖关系不合理:main 函数依赖于子函数,子函数又依赖于更小的子函数;而子函数往往是细节的实现,这些实现是经常变化的,造成的结构就是:程序的核心逻辑依赖于外延的细节,一个细节上的小改动,会引起一系列的变动。C+的使用方法使用 C/C+开发环境,我们可以同时使用 C 和 C+开发。既然 C+和C 是兼容的,我认为完全没有理由使用 C 语言,而不使用 C+进行开发.即使是很小的问题,使用 C+的“模板支持的

6、基于对象”的编程范式也是首选的开发方式。另一方面,在整个类库的外部,如果我们希望向其他语言提供接口,那么我们还应当提供 C 语言的 API 函数作为接口。C 语言是程序世界的世界语。使用 C+的基本类型,struct,STL 库的 Vector,STL 的string:c_str()等都可以得到 C 语言兼容的接口。还不能使用异常。因为 C 语言不支持异常,而且 C+本身的异常,在不同的编译器中也可能不兼容。总之1,使用 C+开发,只在外部接口中使用 C 语言开发。使用“模板支持的基于对象”的编程范式,或者面向对象的编程范式。不要使用面向过程的编程范式。2,尽量把代码放到类中,而不是使用全局或

7、者命名空间的变量。3,尽量不要使用操作符重载。4,必须注意到 C+不像 C 语言那样面向机器,不能对 C+对象内存布局进行假设。不能根据内存内的数据直接构建对象。不要进行内存操作。5,C+还是很面向机器的。很多语言规则都规定了内存的布局,必须按照规则定义、初始化等等。这和 Java,.NET,Ruby 等语言不同。用惯高级语言的程序员特别需要注意 C+和 C 对程序员的繁琐要求。C/C+的设计哲学中,始终把自己作为一门系统编程语言,针对机器进行了很多优化。因此,对于人,就很不照顾了。很多规则很不人性化。但没办法,你必须适应它们!它们就是为了高效而生的。它们就是汇编的替代者。Java 是一门静态

8、强类型面向对象的编程语言。它是 C+和Smalltalk 取长补短的产物。Java 是静态编译的强类型语言。你必须声明变量的类型,以便编译器能够检查代码的类型是否正确。这和 C+是相同的。Java 是一门类型非常安全的编程语言。Java 只支持一种编程范式:面向对象编程范式。对于过时的面向过程编程范式并不支持。也不支持基于对象的编程范式,也没有模板。原因可能是,当 java 在 90 年代中期刚刚诞生时,面向过程的编程已被唾弃。而 C+的基于对象的编程方式,由于没有和模板相互结合,而名声扫地。C+对于面向对象的编程范式的支持又比较差。于是,汲取经验教训之后, Java 作为一门纯正的面向对象编

9、程语言诞生了。Java 使用面向对象的编程范式实现了动态多态,实现了抽象化的编程方式。取得了巨大的成功。Java 语言中,除了基本类型是值类型之外,没有任何值类型,你也不能创建任何值类型。这样,基于对象编程这条路就被卡死了。虽然丧失了值类型的效率,但是也避免了基于对象编程的大量错误。Java 语言中所有方法也都是虚函数。这也是为了保证纯正的面向对象编程。Java 语言是静态面向对象编程范式的顶峰。使用面向接口的抽象编程,是有效使用 java 开发的唯一途径!另一方面,Java 实际上是一门动态语言。它是动态解释执行的。和 Ruby,JavaScript 等一样。这使 java 具备了运行时的灵

10、活性。可以实现自省,反射等 C+等传统静态语言无法实现的功能。.NET 是 java 的兄弟。是微软因为被 Sun 排除在 java 之外而开发的一套语言。主要包括 C#,VB.net,C+/CLI 等语言。它的设计理念基本和 java 相同,也是一个支持静态面向对象编程范式的平台。对于.NET 语言平台,选择 C#和 C+/CLI 这两种语言进行论述。C#C#.net 还支持值类型,也就是基于对象的编程范式。 (当然,.NET框架也是支持值类型的)C#.net 的泛型类型替换是在运行时执行的。对于引用类型(在堆内存中创建实例的类型),它使用类型强制转换,而不是 C+模板的源代码生成来实现参数

11、化类型。对于值类型,则使用类似于 C+模板的 MSIL 中间代码生成机制实现。顺便提一下,java 的泛型实现和 C#的机制类似。也是使用强制类型转换实现。而且,Java 中没有值类型,也不能对基本类型进行泛型操作,因此没有 C#和 C+中的源代码扩张问题。但是,老实说,java 的泛型机制确实太弱了!C#语言首选的是面向对象编程范式。C#也可以使用泛型支持的基于对象的编程范式。使用值类型,对于用惯面向对象编程范式的 C#和 java 程序员来说有一定的难度。而且,提升的效率也并不很高。同时,在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C+ 模板的复杂性。此外,C# 并不尝试

12、提供 C+ 模板所提供的所有功能。因此,C#泛型支持的基于对象编程要比模板支持的基于对象的编程要弱很多。理念上,泛型编程有些不伦不类,有着太强的面向对象编程的气味。C#中,使用泛型支持的基于对象的编程范式不如面向对象编程范式。我认为,C#语言还是应该首先使用面向对象编程范式。C+/CLIC+/CLI 是为了让 C+使用.NET 平台而提供的扩展机制。.NET 平台是类似于 java 的静态强类型动态执行的执行平台。是面向对象编程范式理念的框架。C+/CLI 使用了新的语法,使用 C+/CLI 进行.NET 开发时,类似于 C#编程。同时,也可以使用模板进行 C+/CLI编程。这是 C+/CLI

13、2005 新增的功能。使用 C+/CLI 进行.NET 编程时,既可以使用 C#样式的面向对象编程。也可以使用模板支持的基于对象的编程范式进行开发。可以把模板支持的基于对象的编程范式和.NET 的面向对象的编程范式结合起来使用。C+/CLI 可以同时使用原生 C+和.NET 编程。如果使用.NET 框架执行,那么 C+原生代码就会存放在生成的 MSIL 中间代码中,在运行时再使用 C+编译器编译成机器码。.NET 的互操作机制.NET 运行时本身就是使用 COM 编写的,是一个 COM 服务器。因此,.NET 和 COM 互操作是非常简单的。也可以使用 COM 技术,用 C/C+直接调用.NE

14、T 内的方法。在互操作上。.NET 比 java 实现得更好。不能从 C 语言调用 Java 方法,只能从 java 代码中使用 JNI 调用 C方法。总体评价.NET 是 java 的表兄弟。又做出了一下改变。1,定义了.NET 的汇编语言。基于.NET 的汇编语言可以支持任何语言在.NET 平台上执行。Java 自然也可以作为一个平台。但是 java平台的设计目标就是 java 这一种语言,因此没有定义汇编语言,只有 java 的机器码。2,支持值类型。虽然用处不大,但是可以提高性能,也方便与 C 语言的函数库交互。3,泛型的实现比 java 强大。4,特别是 C+/CLI,具有模板*.N

15、ET 运行库的强大能力。主流编程语言比较本文的目的并非是想挑起语言之争,而是希望通过客观地分析每一种主流语言的能力,辨明其长短,让程序员能够扬长避短,有效地使用各种语言。让各种语言能够各安其位,为你更好的服务。程序员应当成为语言的主人,而不是语言的奴隶。正文这里,我将比较一下几种主流编程语言:C,C+,Java,.NET,Ruby,JavaScript。其他主流编程语言,如 Pascal,Delphi,我不太熟悉。希望熟悉的朋友能够补全对这些语言的评价。至于 Basic,它的版本差异很大,而且能力不太全面,这里也不做评价。语言特性对比表C C+ Java .NET Ruby JavaScrip

16、t类型 无类型 强类型 强类型 强类型 强类型 强类型静态/动态 静态 静态 静态检验类型动态解释执行 动态 动态支持面向过程 是 是 否 否 否 是支持基于对象 否 是 否 是 是 是支持范型 否 否 是 是 否 否支持模板 否 是 否 否 否 否支持面向对象 否 是 是 是 否 否可能你对于我这样的语言评价有些疑问,请首先看我的另一篇文章基于对象和面向对象编程范式辨析和主流编程语言中的应用 理清相关的概念。我对与面向对象和基于对象的定义和流行的定义不太一样。C 语言由来让我们先回顾一下历史。电脑使用 CPU 指令,通过寄存器,内存等物件执行计算。最早的编程,是直接使用代表 CPU 指令的机器码编写的。直接使用二进制的数据编程,当然很容易出错。于是,人们后来发明了一种方法,就是使用英语单词作为助记符,代表各条 CPU 指令。这就是汇编语言。现在,程序员可以使用英语单词进行编程,然后使用一个解释程序,把汇编指令翻译成机器语言,再交给计算机执行。1970 年,UNIX 操作系统的研制者丹尼斯?里奇(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号