Runtime
Introduction
What is Run-time:stackoverflow.com/questions/3...
Runtime vs Compile Time:www.baeldung.com/cs/runtime-...

Runtime
"运行时"(Runtime)是指计算机程序在执行过程中的时间段,也可以表示程序执行时所处的环境。
在软件开发中,程序的运行时是指程序从开始执行到结束的整个过程。这包括加载程序、分配内存、执行代码和处理输入输出等操作。运行时涉及到程序的执行状态、资源管理、异常处理、并发控制和动态调度等方面。
绝大多数主流编程语言都提供了各自的运行时环境,使得程序能够正确地执行,并与操作系统和硬件进行交互。运行时环境提供了必要的支持和基础设施,包括底层的执行引擎、内存管理、I/O 操作、并发机制等。它为程序的执行提供了一个稳定的平台,并提供了一些公共的函数和服务,以简化开发过程。
总之,"运行时"(Runtime)可以指程序执行的时间段,也可以指程序运行时所依赖的环境和支持。它是程序在实际运行过程中的关键概念,涉及到各种底层操作和资源管理。
Runtime library
在编程语言中,通常也会提到 "运行时"(Runtime)指的是一个具体的库或组件,即运行时库(Runtime library)。
运行时库是一组函数、数据结构和工具类,提供了运行时支持所需的功能。这些功能可能包括动态链接、内存管理、异常处理、并发控制等任务。运行时库为开发者提供了一些常用的函数和服务,以简化编程过程,并提供对底层系统的访问。开发者可以使用这些库来执行特定的操作,如文件输入输出、网络通信、数据序列化等。运行时库通常由编程语言提供者或第三方开发者创建和维护,并在程序中进行引用和调用。
总之,运行时库是编程语言中的一个重要概念,它提供了一组函数和工具类,用于支持程序的运行时环境。这些库可用于处理常见任务,简化开发过程,并与底层系统进行交互。
Example
例如在 Go 的 runtime 包中,我们可以通过 runtime.Caller(0) 函数来获取当前运行的路径,它会返回当前运行的函数调用信息。然后使用 filepath.Dir() 函数获取该路径的目录路径。与 os.Executable() 不同,runtime.Caller(0) 可以在 go run 和 go build 命令下都能够正确地获取可执行文件的路径。
go
package main
import (
"fmt"
"path/filepath"
"runtime"
)
func main() {
// 获取当前运行的文件路径
_, filename, _, _ := runtime.Caller(0)
dir := filepath.Dir(filename)
fmt.Println("Executable path:", dir)
}
Runtime environment
运行时环境(RTE)指的是一种软件平台或系统,用于解释、编译和执行特定编程语言的代码。它提供了一个运行程序所需的基础设施和资源,以便程序能够在该环境中正确地运行。
Functions and components
运行时环境包括各种组件和功能,例如:
- 解释器/编译器:负责将源代码转换为可执行的机器码或中间代码。这些代码可以直接在特定的运行时环境中执行。
- 标准库:提供了一系列内置函数、数据结构和工具类,用于简化开发者编写常见任务的操作。
- 资源管理器:负责分配和管理程序所需的内存、处理输入输出等底层资源。
- 运行时支持:包括异常处理、并发控制、垃圾回收等功能,用于确保程序的安全性、稳定性和性能。
Multiple runtime environments
不同的编程语言可能拥有多种不同的运行时环境,例如:
- Java :
Java运行时环境(Java Runtime Environment,JRE) - C# :
.NET运行时环境 - JavaScript :浏览器端运行时环境和服务器后端
Node.js运行时环境等 - Python :常见的
Interpreter有CPython、JPython、IronPython、Pypy、Anaconda等
总之,运行时环境为开发者提供了一个统一的平台,使得他们可以专注于编写代码而无需关注底层的细节。它确保了程序在特定环境中正确运行,并提供必要的工具和功能来支持程序的执行。
JavaScript runtime
JavaScript 运行时环境指的是能够解析和执行 JavaScript 代码的环境。它提供了一个执行 JavaScript 代码的平台,使得开发者可以在该环境中运行和测试 JavaScript 程序。
这个运行时环境可以是浏览器、服务器端环境(如 Node.js)或其他支持 JavaScript 解释和执行的平台。不同的运行时环境可能会提供不同的功能和 API,以适应特定的应用场景。

Core components
JavaScript 运行时环境通常包含以下主要组件:
- JavaScript 引擎 :负责解析和执行
JavaScript代码的核心组件。不同的运行时环境使用不同的JavaScript引擎,例如V8引擎(Chrome和Node.js)、SpiderMonkey引擎(Firefox)等。 - 标准库:提供了一系列内置函数和对象,以便开发者可以直接使用它们来完成常见的任务,如字符串处理、数组操作、日期处理等。
- 宿主环境 API :针对特定的运行时环境,提供了与环境相关的扩展功能和服务的接口。例如,在浏览器环境中,提供了
DOM操作、网络请求、事件处理等API;而在服务器端环境中,提供了文件系统访问、网络通信等API。
JavaScript 运行时环境允许开发者编写和运行 JavaScript 代码,并与环境进行交互。它为开发者提供了一种统一的平台,无论是在浏览器中构建 Web 应用,还是在服务器端编写后端逻辑,都可以使用相同的语言和工具来实现。
Browser
一个典型的浏览器运行时环境包含以下主要组件:
- Rendering 渲染引擎 :负责解析
HTML、CSS和其他网页资源,并将它们渲染成用户可以看到的页面。 - JavaScript 执行引擎 :解析和执行
JavaScript代码,使得网页能够具备交互性和动态功能。 - 文档对象模型(DOM) :表示网页中的结构化内容,允许通过
JavaScript访问和操作网页元素。 - 浏览器 API:提供访问浏览器功能和服务的接口,例如访问网络资源、处理用户输入、操作浏览历史等。
浏览器作为一个运行时环境,提供了一个完整的运行环境来展示和操作网页。它不仅仅用于呈现静态的 HTML 内容,还可以动态地执行 JavaScript 代码,并与用户进行交互。通过浏览器提供的 API 和 DOM,开发者可以创建交互式的 Web 应用程序,并访问各种浏览器功能。

Nodejs
Node.js 运行时环境是一个基于 V8 引擎的 JavaScript 运行时平台,它提供了以下核心组件和功能:
- V8 JavaScript 引擎 :
Node.js使用V8引擎作为默认的JavaScript引擎。V8引擎负责解析和执行JavaScript代码,并提供高性能和优化的能力。 - 事件驱动和非阻塞 I/O 模型 :
Node.js使用事件驱动和非阻塞的I/O模型,允许在处理并发请求时保持高效。这意味着可以同时处理多个请求而无需等待每个请求完成。 - 标准库和模块 :
Node.js提供了一系列内置的模块,可以进行文件系统操作、网络通信、加密、流处理等常见任务。同时,Node.js还支持模块化编程,使开发者可以轻松引入和使用第三方模块。 - 服务器端 API :
Node.js提供了一些服务器端API,例如HTTP、HTTPS、TCP和UDP等。这些API允许开发者构建服务器端应用程序,并处理网络请求、建立连接等。 - 包管理器(npm 或 yarn) :
Node.js生态系统中的主要包管理器是npm(Node Package Manager),使开发者能够方便地安装、管理和分享JavaScript库和工具。 - 跨平台支持 :
Node.js可以运行在多个操作系统上,如Windows、MacOS和Linux等。这使得开发者可以在不同平台上使用相同的代码来构建应用程序。
总之,Node.js 运行时环境基于 V8 引擎,并提供了事件驱动、非阻塞 I/O、标准库和模块、服务器端 API、包管理器和跨平台支持等功能,以支持开发者构建高性能、可扩展的服务器端应用程序。

Deno
-
Next-generation JavaScript Runtime(A secure TypeScript runtime on V8)
- Secure by default
- Native support for TypeScript and JSX
- Testing, linting, formatting, and more out of the box
- High performance async I/O with Rust and Tokio
- Backwards compatible with Node.js and npm
-
Deno是 Ryan Dahl(Node.js作者)新开的一个坑,底层基于Rust实现的JavaScriptruntime。 -
相关文章与视频:

Bun
-
Bun is a fast JavaScript all-in-one toolkit
- Bun is a fast JavaScript runtime
- Bun is a fast JavaScript package manager
- Bun is a fast JavaScript bundler
- Bun is a fast JavaScript test runner
-
Bun是一个采用Zig语言编写的高性能的JavaScript运行时工具。它被设计成一个"全家桶",内置了打包器和转译器等功能。同时,Bun还可以兼容使用npm的JavaScript包,并且支持直接运行TypeScript文件。与Node.js、Deno等其他类似工具不同的是,Bun.js并没有基于V8引擎,而是使用了JavaScriptCore引擎。这个引擎提供了更快的执行速度,相比传统的V8引擎有着更好的性能表现。然而,由于使用了不同的引擎,也可能存在一些兼容性问题需要注意。

ECMAScript
ECMAScript(简称 ES)是 JavaScript 的标准化规范。它定义了 JavaScript 这门编程语言的基本特性、语法、API 等方面,旨在统一不同浏览器和环境中对 JavaScript 的实现。 ECMAScript 由 Ecma 国际组织制定和维护,该组织的全名是 European Computer Manufacturers Association(欧洲计算机制造商协会)。ECMAScript 标准当前的最新版本是 ECMAScript 2023,并且每年都有新的版本发布(ESNext)。通过 ECMAScript 规范,开发者可以了解 JavaScript 的语法、数据类型、函数、对象、数组等核心概念,并使用提供的内置函数和方法来进行编程。
ECMAScript 定义了 JavaScript 的核心功能,使得 JavaScript 在不同平台和环境下具备一致的行为和特性。JavaScript 引擎如 V8、JavaScriptCore 和 SpiderMonkey 等,根据 ECMAScript 规范来实现 JavaScript 的解析和执行过程。这些引擎将 ECMAScript 规范翻译成可执行的指令,以便在浏览器、服务器、移动设备等各种环境中运行 JavaScript 代码。
总结来说,ECMAScript 是 JavaScript 的标准化规范,它定义了 JavaScript 的基本特性和语法,并为 JavaScript 引擎提供了一致的行为标准。通过遵循 ECMAScript 规范,开发者可以编写可移植、兼容性良好的 JavaScript 代码。
Draft ECMA-262 (ECMAScript® 2024 Language Specification):tc39.es/ecma262/

JavaScript engine
JavaScript 引擎是用于解析和执行 JavaScript 代码的软件组件。它负责将 JavaScript 代码转化为可执行的指令,并提供对 JavaScript 代码的运行环境。
JavaScript 引擎实现了 ECMAScript 规范中定义的语法和语义,以确保对 JavaScript 代码的正确解析和执行。它可以被嵌入到不同的应用程序或系统中,如浏览器、服务器、移动设备等,以提供对 JavaScript 的支持。
Core components
JavaScript 引擎通常包含以下主要组件:
- 解析器 ( Parser ) :解析器将 JavaScript 代码的源代码解析为抽象语法树(AST),以便引擎能够理解和处理代码的结构。
- 编译器(Compiler) :编译器将抽象语法树(AST)转换为可执行的中间表示(字节码、IR 等)。这个过程可能会进行优化,例如变量提升、内联函数等。
- 执行引擎(Execution Engine) :执行引擎负责将中间表示(字节码、IR 等)转换为机器码,并执行这些机器码。引擎可以根据代码的上下文和执行情况进行动态优化,以提高执行效率。
Common engines
常见的 JavaScript 引擎包括:
-
V8 :由
Google开发的高性能JavaScript引擎,用于Chrome浏览器和Node.js环境。V8是基于即时编译(JIT: Just-In-Time Compilation)技术,通过将JavaScript代码直接编译成本地机器代码来提高执行速度。
-
JavaScriptCore :苹果公司开发的
JavaScript引擎,用于Safari浏览器和IOS系统。JavaScriptCore主要采用解释执行和即时编译相结合的方式。
-
SpiderMonkey :
Mozilla基金会开发的JavaScript引擎,用于Mozilla Firefox浏览器。它是最早的JavaScript引擎之一,也是首个实现ECMAScript规范的引擎。
除了这些主流的 JavaScript 引擎,还有许多其他引擎,如 Trident(用于 Internet Explorer 浏览器,已被历史所淘汰)、Chakra(用于 Microsoft Edge 浏览器)、JerryScript(用于嵌入式设备)等。
尽管每个引擎都有不同的性能特点、优化策略和兼容性,以适应各种使用场景,但它们都遵循 ECMAScript 标准并提供 JavaScript 的执行功能。
Browser engine (Rendering engine)
浏览器内核或渲染引擎是浏览器的核心组件,负责解析和渲染网页内容,以实现对 HTML、JavaScript 等语言的正确解释和显示。它是浏览器能够呈现网页并提供丰富用户体验的重要部分。
常见的 Browser 引擎包括:
- Webkit :
Webkit是一个开源的浏览器引擎,最初由苹果公司开发。它提供了渲染网页和执行JavaScript代码的功能,并包括渲染引擎(用于解析HTML和CSS)、JavaScript引擎等。 - Blink :
Blink是基于Webkit的另一个开源浏览器引擎,由谷歌开发并在Chromium项目中使用。Blink最初是作为Webkit的分支而创建的,后来演变成独立的引擎。Blink继承了Webkit的渲染引擎部分,并通过集成V8引擎实现对JavaScript代码的解析和执行。
