【问题标题】:What language is JavaScript written in?JavaScript 是用什么语言编写的?
【发布时间】:2011-08-10 03:58:41
【问题描述】:

如果它是一种脚本语言,顾名思义,它必须是用较低级别的语言编写的,对吧?比如 PHP 是用 C 写的,JavaScript 是用什么语言写的?

【问题讨论】:

  • “一定要用低级语言写”,不一定,比如Narcissus是一个Javascript解释器,用纯Javascript写的(就是meta-circular evaluator):)
  • 我猜有许多不同的 JavaScript 引擎用各种不同的语言编写。
  • @CMS 是的,但这里的根本问题是,第一个 JS 解释器是用什么语言编写的?当你没有工具来阅读你的 JavaScript 代码时,你不能用 JavaScript 编写 JavaScript 解释器(在这种情况下是解释器)。这里的这个链接解释了这个鸡蛋问题:stackoverflow.com/questions/18247888/…

标签: javascript


【解决方案1】:

Javascript 只是一个标准,更正式地称为ECMAScript。它可以用任何语言实现,就像任何标准一样。

Chrome 的 Javascript 引擎 V8 是用 C++ 编写的。

来自项目页面:

V8 是用 C++ 编写的,用于谷歌的开源浏览器 Google Chrome。

V8 实现了 ECMA-262 第 5 版中指定的 ECMAScript,以及 在 Windows(XP 或更新版本)、Mac OS X(10.5 或更新版本)和 Linux 上运行 使用 IA-32、x64 或 ARM 处理器的系统。

Firefox 的 Javascript 引擎SpiderMonkey(现在是 TraceMonkey)也是用 C++ 编写的。正如下面的 maerics 所说,Rhino 是用 Java 编写的。

【讨论】:

  • 确实如此。虽然我敢打赌the majority of them are implemented in C++(或C 及其衍生物)。 Rhino 显然是 Java。
  • Python 也是标准吗?除了 C 和 C++ 之外的所有语言都是标准吗?我找不到任何信息。关于差异。
  • 那么 JavaScript 只是一个复杂的概念概念吗?例如。以同样的方式,我可以写下房子的规格(它必须有 1 个门,2 个房间,每个房间 2 个窗户,自来水,电等),然后其他人可以解释这些规格,建造房子并称之为一个房子?我假设答案是否定的,因为有一个语言的创造者,而且他确实创造了一个功能性的“东西”。 那个最初的事物是什么?它看起来像什么?它是用什么语言编写的(或者它“只是”机器代码的抽象/简写)?
  • PS - 也许第一个“东西”是第一个 JavaScript 引擎 SpiderMonkey,它是用 C 语言编写的:en.m.wikipedia.org/wiki/SpiderMonkey,另见:brendaneich.com/2011/06/new-javascript-engine-module-owner
【解决方案2】:

到目前为止所有的答案都是正确的,但由于尚未提及,JavaScript can be written in JavaScript

【讨论】:

  • 阿特伍德定律是最好的!
  • 很酷的回复,但我的极客也必须纠正你。 SpiderMonkey 是引擎,所以有小鸡,但我没有看到鸡蛋,
  • 我用石头来破坏石头
【解决方案3】:

大多数 Javascript 解释器是用 C/C++(V8、Nitro 等)编写的,但是兼容的解释器可以用任何语言(Rhino→Java、Interpreter→Javascript 等)编写。

【讨论】:

    【解决方案4】:

    Javascript 是 ECMAScript 标准的实现,但没有像您在 PHP 中看到的单一规范解释器。

    出于性能原因,大多数主要实现(独立或作为 Web 浏览器的一部分)往往主要是用 C 或 C++ 编写的,但情况并非总是如此。 Rhino 是 Mozilla 维护的引擎,是用 Java 编写的。

    【讨论】:

    • 可能有多种 PHP 实现,但是……没有人感兴趣。
    • @IgnacioVazquez-Abrams - 原来 Facebook 很感兴趣 :)
    【解决方案5】:

    客户端 webbrowsers javascript 解释器是用哪种语言编写的:)

    【讨论】:

      【解决方案6】:

      大多数 Javascript 实现显示的行为显然是由使用指针和 byref 参数传递引起的,这通常指向使用 C 或 C++

      这显然是值得注意的,例如,当您在循环中分解一个多维数组时,需要借助中间数组。如果您不熟悉指针和 byref 参数传递,这些往往表现得非常“奇怪”(您需要每次都执行 var hlp = new Array() 否则它将覆盖您已经存储在其他地方的先前值)

      我很好奇如何在 Java 中实现 javascript,因为我想这种行为在这种情况下会完全不同?

      【讨论】:

      • 没有。 JavaScript 执行的语义不依赖于实现它们的语言。
      • 您可以在底层编写函数来绕过该行为(即在 c++ 中使用新的和垃圾收集,而不是设置指针)。 Javascript(技术上是 EMCA)的行为方式与其实现语言几乎没有关系,因为它只是一个标准
      【解决方案7】:

      C++ 是任何现代和花哨的基本语言。大多数现代高级语言都是低级语言的子集C++。你今天看到的所有现代语言都是C++ 的一个子集。甚至Java 也是C++ 的子集。

      【讨论】:

      • 这是错误的。 Java 不是 C++ 的子集。 C++ 不被视为低级语言。您可能会想到 C,即使如此,Java 和其他语言也不是 C 的“子集”。它们可能基于 C,但它们不是子集。公认的答案给出了更好的答案,即 Javascript 可以用任何语言编写,但最流行的实现是 C++ 即 Google 的 V8。
      • 我不明白你的意思。 C++ 是另一种语言,起源于 C 的超集。如果任何语言是 C++ 的子集,那么这个 python 代码应该在 C++ 中工作:print("hello world")。将其粘贴到一个新文件中并使用 C++ 编译器对其进行编译。它编译吗?如果不是,那么 Python 不是 c++ 的子集
      猜你喜欢
      • 2011-02-14
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多