使用谷歌浏览器(V8)时,Javascript可以被视为解释语言吗?

时间:2012-07-10 19:58:13

标签: javascript google-chrome browser v8 interpreted-language

我正在阅读这篇关于V8的优秀文章,谷歌的Javascript引擎:https://developers.google.com/v8/design#mach_code

有一次,他们说Javascript直接编译成机器语言,没有任何字节码或解释器。

引用:

  

V8将JavaScript源代码直接编译成机器代码   是第一次执行。没有中间字节代码,没有   解释

那么,为什么Javascript仍然与“脚本”和“解释”语言一起列出,当它被清楚地编译时(至少在V8中)?


<小时/> 编辑我可以以某种方式使用Javascript创建可执行文件(如果已编译)吗?这需要以某种方式将其链接到V8?

考虑到这个问题,我发现了这句话:

  

V8可以独立运行,也可以嵌入到任何C ++应用程序中。

此处:http://code.google.com/p/v8/

3 个答案:

答案 0 :(得分:15)

这就是为什么“解释语言”和“编译语言”是草率术语的例子。语言是编译还是解释是实现的属性,而不是语言本身的属性。

许多人将“动态类型语言”(如JavaScript)与“已解释”和“静态类型语言”与“已编译”混淆,但这些仅仅是相关而不是绝对。编译动态语言是可能的(虽然它通常比编译静态语言更棘手),并且可以解释静态语言(例如:Hugs是Haskell的解释器)。

答案 1 :(得分:2)

它是一种脚本语言,因为JS代码旨在作为源代码提供和运行。

如果编码人员要提供一个编译的二进制文件供你执行,那么它就不是一个脚本。

此外,无论在Chrome上做什么,相同的Javascript源代码也必须在其他平台上运行,这可能或多或少是传统的脚本环境。这也不会改变作为脚本的代码本身的性质。

即使你极度编译它,JS仍然是一种脚本语言。几乎所有你能想到的脚本语言都有适当的传统编译器(Perl,PHP ....);这不会阻止他们成为脚本语言,也不会阻止他们的源代码成为脚本。

同样,有许多传统编译语言的解释器。

最后,将一种语言“编译”成另一种语言的概念使问题更加混乱。这已经存在了一段时间,但是这个想法实际上已经开始使用像Coffeescript这样的语言来编译成Javascript。那么你怎么称呼已编译的Coffeescript代码?

术语实际上并没有那么有用,特别是现在,但在您提出的上下文中,您的问题的最终答案是肯定的,Javascript仍然是一种脚本语言。

答案 2 :(得分:1)

在这里,让我演示代码:

  later(); // prove that js is a compiling language
  function later(num) {
    console.log("Your number is: " + num);
  }

这段代码可以在Chrome浏览器和Node js上运行。

如果有人说js是一种解释语言,那么这段代码就会崩溃,就像你以后运行()时一样,它不应该知道后面的函数体。

这可以证明js是一种编译语言,因为它编译后面的函数(因此机器可以知道它),然后执行它。