Compiler construction 编译和解释有什么区别?
我刚刚与一位同事进行了一次对话,我们正在讨论V8 JavaScript引擎。根据维基百科 V8在执行之前将JavaScript编译为本机机器代码[…],而不是更传统的技术,如解释字节码或将整个程序编译为机器代码并从文件系统执行Compiler construction 编译和解释有什么区别?,compiler-construction,compilation,interpreter,interpretation,Compiler Construction,Compilation,Interpreter,Interpretation,我刚刚与一位同事进行了一次对话,我们正在讨论V8 JavaScript引擎。根据维基百科 V8在执行之前将JavaScript编译为本机机器代码[…],而不是更传统的技术,如解释字节码或将整个程序编译为机器代码并从文件系统执行 (如果我错了),“解释字节码”是java的工作方式,“编译整个程序”将适用于C语言或C++语言。现在,我们对差异、相似性进行了猜测、辩论和假想。为此,我建议请专家们这样做 那么,谁能做到呢 命名、解释和/或引用所有主要方法(例如预编译与运行时解释) 设想或提供一个关于资料
(如果我错了),“解释字节码”是java的工作方式,“编译整个程序”将适用于C语言或C++语言。现在,我们对差异、相似性进行了猜测、辩论和假想。为此,我建议请专家们这样做
那么,谁能做到呢注:
- 我不是在寻找一篇关于不同范式的冗长平淡的文章,而是一篇视觉支持的快速概述
- 我知道Stackoverflow并不是程序员的百科全书(而是更具体问题的问答平台)。但是,由于我可以找到很多流行的问题,这些问题为某些主题提供了百科全书式的观点(例如,,),我开始了这个问题
- 如果此问题更适合任何其他StackExchange网站(例如),请让我知道或标记此问题以供审核
if
语句,for
,等等),并且每个类都有一个计算给定节点的Evaluate
方法。这也通常被称为
作为一个例子,考虑下面的代码片段在一个假设的解释器中实现< <代码>如果语句(在C中实现):
class-IfStatement:AstNode{
私有只读节点条件、truePart、falsePart;
公共IfStatement(AstNode条件、AstNode truePart、AstNode falsePart){
这个条件=条件;
this.truePart=truePart;
this.falsePart=falsePart;
}
公共覆盖值求值(EvaluationContext){
bool yes=condition.Evaluate(context.IsTrue();
如果(是)
评价(上下文);
其他的
错误部分。评估(上下文);
返回值.None;/`if`语句没有值。
}
}
这是一个非常简单但功能齐全的解释器。回答您的问题几乎是不可能的,原因很简单:没有几种方法,它们是一个连续体。这个连续体中涉及的实际代码也相当相同,唯一的区别在于事情发生的时间,以及中间步骤是否以某种方式保存。这个连续体中的各个点(不是一条直线、一个级数,而是一个具有不同角点的矩形,您可以靠近它)是: