首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行时环境和编译器/解释器是否相同?

运行时环境和编译器/解释器是否相同?
EN

Stack Overflow用户
提问于 2021-10-24 07:27:54
回答 3查看 657关注 0票数 4

我刚刚开始使用Node.js,我有相当多的Python和C++背景。我知道Node.js是一个运行时环境,但我很难理解它对代码的实际作用,这使得它不同于编译器。如果有人能够解释具体的运行时环境与典型的编译器和解释器有何不同,那就更好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-24 14:18:59

让我们这样做:

Node.js是建立在Chrome的V8 JavaScript引擎上的JavaScript运行时。

V8是引擎,Google也使用同样的引擎。还有其他JS引擎,如火狐使用的SpiderMonkey,Safari使用的JavaScriptCore,以及边缘最初基于Chakra的JS引擎,但是它已经被重新构建为使用V8引擎。

在讨论V8的工作方式之前,我们必须先了解这种关系。

JavaScript引擎独立于它所在的浏览器。这个关键特性促成了Node.js的兴起。V8被选为驱动Node.js的引擎。

由于V8是独立的、开源的,所以我们可以将它放入我们的C++程序中,Nodejs本身只是一个用C++编写的程序。Nodejs采用了V8,并通过添加服务器需要的特性对其进行了增强。

JavaScript通常被认为是一种解释语言,但是现代的JavaScript引擎不再仅仅解释JavaScript,而是编译它。

由于您有C++背景,C++执行所谓的“提前编译”(AOT)编译,在编译期间将代码转换为执行前的机器代码。

另一方面,JavaScript是由V8内部编译的,而JIT编译是在执行过程中完成的。当代码由解释器执行时,它将跟踪经常调用的函数,并将它们标记为热函数,然后将它们编译成机器代码并存储它们。

票数 4
EN

Stack Overflow用户

发布于 2021-10-24 07:45:50

编译器是将代码从一种语言转换为另一种语言的程序。例如,在Java中,我们有一个java编译器javac,您可以在.java文件上运行它,将代码编译成与平台无关的java文件(任何jvm都可以理解和执行)。由于您是JavaScript新手,您将遇到将下一代 JavaScript代码转换为可由所有浏览器(甚至旧浏览器)处理的遗留JavaScript代码的转播器(比如babel)。运行时是一个比较模糊的概念。它可以从在特定操作系统上运行编译代码的一组函数转变为程序运行的整个环境。对于NodeJS,它是您可以在浏览器之外运行JavaScript程序的环境。它采用了在Chrome浏览器上运行JavaScript的Chrome的JavaScript引擎,并使其随处可见。这就是JavaScript如何从只在浏览器上运行的客户端编程语言转变为可以在运行时环境NodeJS的服务器上运行的服务器端编程语言。

票数 2
EN

Stack Overflow用户

发布于 2021-10-24 07:58:27

以下几个简单的要点可能会有所帮助:

  1. C/C++代码将由C/C++编译器编译成机器代码,并且不需要运行任何运行时环境(主要是运行时库除外)。
  2. Python代码需要Python解释器来执行它。就像你说的,你有C++/Pythons的背景,你必须熟悉所有这些细节。
  3. JavaScript本来是要在浏览器中运行的,但是大多数情况下都是这样的,但是一些聪明人想要在浏览器之外运行它,他们创建了JavaScript执行引擎(这是一种独立的JavaScript执行器),而Node.js只是其中之一。它只是自己运行浏览器外部的JavaScript代码。执行仍然是对JavaScript代码的解释,所以它只是一个解释器,它具有管理运行时依赖项、包管理等的大量支持功能。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69694677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档