C# 编译或者解释?

昨天有个哥们:写了这么篇文章:星期六不谈技术->>走出程序员的悲哀

 



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

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

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

Compilation and Interpretation

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


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

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

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


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

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


邮件来自scott教授:
 

> My problem is that: when I reading the example 1.6 Mixing complication

> and interpretation, according this definition in your words: “These

> two characteristics--thorough analysis and nontrivial transformation

> --

> are the hallmarks of compilation.”,

> It confused me that if the C# language is  complication language or

> not.  As far as I know, the C# first translate C# to IL(Intermediate

> Language), and when the application is executing, the second compiler

> JITTTER will compile the IL to binary code.

> Based on your definition, I think  C# is belong to interpretation

> language, because:

> 1. C# to IL is a simple translation process, IL is a high level

> language 2. C# and IL has lots of similar language filters, they can

> be transformed to each other freely

 

Actually both the translators you mention are real compilers.  One compiles from C# to CIL; the other compiles fro CIL to machine code.

Both transformations are nontrivial, and both involve detailed analysis of the source.

 

posted @ 2009-09-27 12:23  DiggingDeeply  阅读(3627)  评论(31编辑  收藏  举报