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

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

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

在<<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.

转载于:https://www.cnblogs.com/diggingdeeply/archive/2009/09/27/Is-csharp-a-Compilation-language-or-Interpretation-language.html

C# 编译或者解释?相关推荐

  1. android将引入aot编译器,Android N混合使用AOT编译,解释和JIT三种运行时

    Android N引入了我们一种主要包含编译.解释和JIT(Just In Time)的混合系统运行时,以便在安装工作时间.内存占用.电池材料消耗和性能指标之间可以获得发展最好的折衷. ART在And ...

  2. 半编译半解释的Java语言和C++、Python等语言的区别

    1. 引言 我们编写的代码需要按照某些组织制定的规范,对于程序员来说,能够轻松理解:但是对于计算机来说,它们根本无法理解我们编写的代码,只能识别二进制指令. 2. 编译型语言(如C++)和解释型语言( ...

  3. python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...

    计算机执行源程序的两种方式:编译和解释 首先,了解一下静态语言,动态语言,目标代码,源代码. 动态类型语言(又称为脚本语言或扩建语言):在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量 ...

  4. 理解python先编译后解释的特点

    理解python先编译后解释的特点 1. CPython默认的标准解释器编译器.JPython支持Java集成,可以生成Java字节码并在JVM中解释执行.IronPython支持.NET集成. 2. ...

  5. 编译程序、解释程序、汇编程序和编译、解释的概念

    计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行.这种"翻译"通常有 ...

  6. 关于程序的编译和解释!

    程序的编译和解释,你知道是什么吗? 如果你不清楚,或者了解的有点模糊,那么今天这篇文章也许会帮到你,不妨来看一看,花不了你几分钟的时间,却可以让你get到一些新的知识点或者加深你的理解! 先来简单了解 ...

  7. 【编译和解释】【源代码和目标代码】【静态语言和脚本语言】

    [编译和解释] 基本概念 1.源代码: 2.目标代码: 3.如何把人类可以阅读的程序变成机器可以执行的目标代码 ①编译: ②解释: ③对比编译和解释: ④静态语言和脚本语言: 基本概念 1.源代码: ...

  8. 编译和解释的区别是什么?

    编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以 ...

  9. 【计算机科学基础】翻译、编译、解释、汇编

    文章目录 翻译程序 编译程序 汇编程序 解释程序 编译型语言和解释型语言 C程序编译 Java程序编译和解释 Python程序解释 翻译程序 翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码) ...

  10. Python——编译与解释

    Python--编译与解释 高级语言: 1.静态语言--编译执行 2.脚本语言--解释执行 ①编译 编译是将源代码转换成目标代码的过程. 源代码是计算机高级语言的代码,而目标代码则是机器语言的代码. ...

最新文章

  1. mysql bin的过期时间_Mysql设置binlog过期时间并自动删除
  2. 关于mydumper的.metadata文件丢失
  3. C++学习之路 | PTA(甲级)—— 1064 Complete Binary Search Tree (30分)(带注释)(精简)
  4. TensorFlow生成.mat文件
  5. 规划 SOA 参考架构
  6. carmaker的弱智算法
  7. 通过Windows的bat方式一键给计算机网卡替换IP地址
  8. NCI和CNC应用中M代码的概念和功能
  9. mac系统我的世界服务器,我的世界Mac版怎么联机?
  10. Python 微信自动化工具开发系列06_根据用户信息自动回复升级版本(2022年10月可用)
  11. AttributeError: ‘RDD‘ object has no attribute ‘toDF‘
  12. 外星人冯诺依曼【转】
  13. Idea一键导入所有缺省的包
  14. 知识蒸馏 | (1) 知识蒸馏概述
  15. 电脑突然找不到蓝牙开关了
  16. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
  17. 回复英文审稿人意见常用格式
  18. 搜索引擎优化(SEO)----关键字
  19. swagger首页空白
  20. 运用arcGIS ArcPy推求管网节点高程

热门文章

  1. python one class svm_sklearn例程:OneClassSVM物种分布建模
  2. python日历下拉框_selenium+Python(Js处理日历控件)
  3. Spring定时任务@Scheduled提前一秒执行
  4. Android Studio右下角显示当前branch名称不一致
  5. javaee7 中文帮助文档_怎么将阿拉伯语翻译成中文?这里有两种翻译方法
  6. [渝粤教育] 盐城工学院 大学物理(力学、振动与波动) 参考 资料
  7. [渝粤教育] 西南科技大学 单片机原理与应用 在线考试复习资料
  8. 信贷违约风险评估模型(下篇):机器学习模型
  9. 【Python实例第13讲】识别手写数字
  10. 梯度下降来龙去脉附matlab代码