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.
转载于:https://www.cnblogs.com/diggingdeeply/archive/2009/09/27/Is-csharp-a-Compilation-language-or-Interpretation-language.html
C# 编译或者解释?相关推荐
- android将引入aot编译器,Android N混合使用AOT编译,解释和JIT三种运行时
Android N引入了我们一种主要包含编译.解释和JIT(Just In Time)的混合系统运行时,以便在安装工作时间.内存占用.电池材料消耗和性能指标之间可以获得发展最好的折衷. ART在And ...
- 半编译半解释的Java语言和C++、Python等语言的区别
1. 引言 我们编写的代码需要按照某些组织制定的规范,对于程序员来说,能够轻松理解:但是对于计算机来说,它们根本无法理解我们编写的代码,只能识别二进制指令. 2. 编译型语言(如C++)和解释型语言( ...
- python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...
计算机执行源程序的两种方式:编译和解释 首先,了解一下静态语言,动态语言,目标代码,源代码. 动态类型语言(又称为脚本语言或扩建语言):在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量 ...
- 理解python先编译后解释的特点
理解python先编译后解释的特点 1. CPython默认的标准解释器编译器.JPython支持Java集成,可以生成Java字节码并在JVM中解释执行.IronPython支持.NET集成. 2. ...
- 编译程序、解释程序、汇编程序和编译、解释的概念
计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行.这种"翻译"通常有 ...
- 关于程序的编译和解释!
程序的编译和解释,你知道是什么吗? 如果你不清楚,或者了解的有点模糊,那么今天这篇文章也许会帮到你,不妨来看一看,花不了你几分钟的时间,却可以让你get到一些新的知识点或者加深你的理解! 先来简单了解 ...
- 【编译和解释】【源代码和目标代码】【静态语言和脚本语言】
[编译和解释] 基本概念 1.源代码: 2.目标代码: 3.如何把人类可以阅读的程序变成机器可以执行的目标代码 ①编译: ②解释: ③对比编译和解释: ④静态语言和脚本语言: 基本概念 1.源代码: ...
- 编译和解释的区别是什么?
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以 ...
- 【计算机科学基础】翻译、编译、解释、汇编
文章目录 翻译程序 编译程序 汇编程序 解释程序 编译型语言和解释型语言 C程序编译 Java程序编译和解释 Python程序解释 翻译程序 翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码) ...
- Python——编译与解释
Python--编译与解释 高级语言: 1.静态语言--编译执行 2.脚本语言--解释执行 ①编译 编译是将源代码转换成目标代码的过程. 源代码是计算机高级语言的代码,而目标代码则是机器语言的代码. ...
最新文章
- mysql bin的过期时间_Mysql设置binlog过期时间并自动删除
- 关于mydumper的.metadata文件丢失
- C++学习之路 | PTA(甲级)—— 1064 Complete Binary Search Tree (30分)(带注释)(精简)
- TensorFlow生成.mat文件
- 规划 SOA 参考架构
- carmaker的弱智算法
- 通过Windows的bat方式一键给计算机网卡替换IP地址
- NCI和CNC应用中M代码的概念和功能
- mac系统我的世界服务器,我的世界Mac版怎么联机?
- Python 微信自动化工具开发系列06_根据用户信息自动回复升级版本(2022年10月可用)
- AttributeError: ‘RDD‘ object has no attribute ‘toDF‘
- 外星人冯诺依曼【转】
- Idea一键导入所有缺省的包
- 知识蒸馏 | (1) 知识蒸馏概述
- 电脑突然找不到蓝牙开关了
- 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
- 回复英文审稿人意见常用格式
- 搜索引擎优化(SEO)----关键字
- swagger首页空白
- 运用arcGIS ArcPy推求管网节点高程
热门文章
- python one class svm_sklearn例程:OneClassSVM物种分布建模
- python日历下拉框_selenium+Python(Js处理日历控件)
- Spring定时任务@Scheduled提前一秒执行
- Android Studio右下角显示当前branch名称不一致
- javaee7 中文帮助文档_怎么将阿拉伯语翻译成中文?这里有两种翻译方法
- [渝粤教育] 盐城工学院 大学物理(力学、振动与波动) 参考 资料
- [渝粤教育] 西南科技大学 单片机原理与应用 在线考试复习资料
- 信贷违约风险评估模型(下篇):机器学习模型
- 【Python实例第13讲】识别手写数字
- 梯度下降来龙去脉附matlab代码