javascript - 编译Javascript

标签 javascript compiler-construction compilation

能否编写一个编译器,将 javascript 编译成流畅的程序,从而提高效率?

我知道即时编译,但我所说的是采用 javascript 并以类似于编译操作系统应用程序的方式对其进行编译。

只是一个实验问题。

最佳答案

这个问题之前已经讨论过herehere (大概在许多其他地方)。

其要点是:

  • JavaScript 的语言规范并未声明它是一种解释性语言。它仅仅定义了语言的语法和语义。

  • 大多数解释语言首先被解析并翻译成中间形式,又名 Byte Code 。这个过程通常称为“编译”,这是编译器的工作*)

  • 一些 JavaScript 解释器实际上是编译器/字节码执行器,例如Google's V8 (“V8 编译并执行 JavaScript 源代码,...”)。 Microsoft's Jurassic另一方面,用于将 .NET 编译为 CLI 字节码的公司声称只是一个编译器。

  • 程序的后续执行使用字节码,并且不会引用程序的 JavaScript 源代码。 Jurasic 声称分发 .NET CLI 程序集。

您的问题的答案是,具体取决于您要定位的特定平台:

  • 是的,JavaScript 代码可以编译成中间形式,然后由知道处理这种特定形式的字节代码的引擎执行。

  • 不,没有普遍接受的字节代码,也没有此类字节代码的通用解释器(又名 Virtual Machine )。

话虽如此,“编译”与“编译”的问题“解释型”语言常常显得过于夸张。重要的是要认识到,编译结果的“二进制文件”与其相应的“源代码”之间的差异只是逐渐的。最后,源代码和二进制文件是不同形式的同一事物,或者解释一下:它是 symbols all the way down .

*) 维基百科有这个 definition of a compiler :

A compiler is a computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language, often having a binary form known as object code).

关于javascript - 编译Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005773/

相关文章:

javascript - 无法初始化自定义 jQuery 日历

javascript - 为什么这两个函数有不同的结果?(抱歉,我不知道如何描述它们)

algorithm - 动态类型语言中的快速属性查找?

java - Scala 编译器不使用 case 类的 unapply 方法进行模式匹配,这是为什么呢?

c++ - #include <crtdll/stddef.h> 是什么意思?

javascript - 如何根据用户选择显示/排序特定的 div

javascript - 绕过 iframe 沙箱?

c++ - gcc4 模板错误或更可能是 id10t 错误

visual-studio-2008 - 搜索控制其他程序的程序

c - 在 GCC (c99) 中获取基本 trie 结构的 "node has no member"错误