讨论:到底C#是编译语言还是解释语言

开发 后端
这里我们将要讨论一下到底C#是编译语言还是解释语言,希望通过此次讨论能帮助大家更好的理解C#。

我们这里需要讨论的是C#是编译语言还是解释语言?将从定义来进行讨论,并结合流程图来说明。希望***的结论,能对大家有所帮助。

“C# Java是解释型语言?Oh my god”

“引用vls:C# Java是解释型语言?Oh my god

呵呵 我也很诧异“

“引用DiggingDeeply:@vlsC#不是解释行语言,那JIT是干啥用的?

无知并不可怜,无知还不知道自己无知才叫可怜”

“。。。但如果因为它是"一边变换一边执行", 就将其当作解释语言……只能说你看到表象却没抓住本质。”

很是无语,既然您认为别人无知那您的有知拿出来给无知的人看看,行不?

抛开这些不谈,谁能给编译型和解释型给下个定义。无一例外,要么就是某人的博客,要么就是搜索来的网页,再要么就是放个阙词就消失,这些作为论据充分不?

昨天翻了翻龙书,也没有给这两个概念下详细的定义,可见两个概念是很难下个精确的定义的。

在<>(by Michaei L. Scott)这本书里面,我找到了相关的定义和说明,特摘录如下

Compilation and Interpretation

高级语言里一个程序的编译和执行大概是 下面的情况:

一个程序的编译和执行

编译器将高级语言从源代码翻译成与之等价的目标程序(就相当于从中文翻译成中文),而后就隐退了。在随后的某个时刻,用户启动目标程序由操作系统执行。实现高级语言的另外一种方式为解释:

实现高级语言

与编译不同的是,解释器在目标程序(其实根本就没有目标程序,只是与编译来对比)执行期间,解释器一直随之运行。这种执行过程完全由解释器控制的。从效果上看,解释器实现了一台“虚拟计算机”,其“机器语言”就是高级语言,解释器一次读入一条或多条语句,按照其自身规定的方式去执行相应的操作。一般说来,解释比编译有着很好的灵活性;编译一般有着较好的性能。但是有些语言确是采用了两者的混合形式:

混合形式

书中的原文:”如果初始阶段的翻译器比较简单,我们就说这个语言是“解释的”。如果翻译器很复杂,我们就说这一语言是“编译的”。现在两者的区分变得有些模糊了,因为“简单”和“复杂”都是修饰性术语,也因为完全可能出现用一个编译器(复杂的翻译过程)生成代码,而后又由一个复杂的虚拟机(解释器)执行。对于***这种情况,如果翻译器对程序做了彻底的分析(而不是做某种“机械的”变换),而且有关的中间语言程序与源程序并没有很强的相似性,我们还是说这个语言是编译的。这两种特性----彻底的分析和非平凡的变换-----是刻画编译方式的标志性特征。“

根据以上标准,首先CSC只是对C#到IL做”机械“的翻译,而且C#和IL之间有很强的相似性,因为两者的程序代码几乎可以100%相互转换(比如reflector可以将C#反编成IL,也可以将IL反编为C#)。您认为呢?

PS:再者某些人认为的ngen和cache程序集其实也是支持C#是解释语言的结论,因为编译型语言因为性能的天然因素是不需要这些手段的。也许我是错的,请您不吝赐教,感激涕零.本人禁止了不负责任的匿名评论,请大家海涵。

原文标题:C# 编译或者解释?

链接:http://www.cnblogs.com/diggingdeeply/archive/2009/09/27/Is-csharp-a-Compilation-language-or-Interpretation-language.html

【编辑推荐】

  1. C#参差数组初始化概述
  2. C#数组初始化全面分析
  3. C#一维数组和多维数组浅谈
  4. C#参差数组初始化概述
  5. C#动态数组实例介绍
责任编辑:彭凡 来源: 博客园
相关推荐

2010-01-13 14:17:53

C++编译语言

2009-12-22 02:48:23

COBOL语言Grace Hoppe编译语言

2020-08-31 19:17:24

Python强类型语言弱类型语言

2023-11-08 13:17:00

Python解释型语言

2009-09-02 17:10:45

C#语言入门

2011-07-05 16:57:53

C语言

2009-08-03 16:28:53

Java语言与C#语言

2009-08-13 17:04:09

C#语言C#程序

2015-04-21 09:20:40

SwfitObject—C

2009-09-11 10:44:55

C#语言

2009-11-02 17:38:56

VB.NET与C#

2009-08-19 16:50:32

Visual C#C#语言特性

2009-06-15 11:03:10

Java语言C#语言

2009-08-14 10:59:35

C#分部方法

2009-08-12 16:22:29

C#插件技术

2009-08-06 14:08:08

C#语言异常处理

2009-08-21 08:59:35

C#语言规范

2009-08-26 17:22:09

C#语言

2010-01-18 09:39:25

C++语言

2009-08-25 16:32:24

C#语言
点赞
收藏

51CTO技术栈公众号