因此,我是否认为解释部分是语言规范中的要求,还是在尊重一种语言及其多种实现之间的差异时说该语言是一种解释性编程语言是否会产生误导?
EcmaScript语言极客经常使用术语“ ES解释器”来指代EcmaScript的实现,但规范未使用该术语。该语言概述,特别介绍了解释无关的条款的语言:
ECMAScript是基于对象的:基本语言和宿主功能由对象提供,而ECMAScript程序是通信对象的群集。
因此,EcmaScript假定“主机环境”被定义为对象定义的提供者,包括所有允许I / O或与外界的任何其他链接,但不需要解释器的对象。
语言中的语句和表达式的语义是根据完成规范定义的,该规范在解释器中轻松实现,但该规范不要求这样做。
8.9完成规范类型
完成类型用于解释语句的行为(break
,continue
,return
和throw
)来实现控制的非局部传输。Completion类型的值是形式(type,value,target)的三元组,其中type是normal,break,Continue,return或throw之一,value是任何ECMAScript语言值或empty,target是任何ECMAScript标识符或空的。
术语“突然完成”是指非正常类型的任何完成。
可以将控制的非本地传递转换为指令数组,并进行跳转,以实现本机或字节码编译。
“ EcmaScript Engine”可能是表达相同想法的更好方法。
显然没有用于JavaScript的静态编译器
这不是真的。V8“解释程序”在内部编译为本地代码,Rhino可以选择在内部编译为Java字节码,各种Mozilla解释程序({Trace,Spider,Jager} Monkey)使用JIT编译器。
V8:
V8通过在执行之前将JavaScript编译为本机代码,而不是执行字节码或解释它,来提高性能。
犀牛:
public final void setOptimizationLevel(int optimizationLevel)
设置当前的优化级别。优化级别应为-1到9之间的整数。任何负值将被解释为-1,任何大于9的值都将被解释为9。优化级别-1表示解释模式将始终为用过的。级别0到9表示可以生成类文件。更高的优化级别需要在编译时性能与运行时性能之间进行权衡。如果运行时不存在优化程序包,则不能将优化程序级别设置为大于-1。
TraceMonkey:
TraceMonkey将本机代码编译添加到Mozilla的JavaScript®引擎(称为“ SpiderMonkey”)。它基于加州大学欧文分校(UC Irvine)开发的一种称为“跟踪树”的技术,并基于与Tamarin跟踪项目共享的代码和想法。最终结果是大大提高了浏览器镶边和网页内容的速度。