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
命令下都能够正确地获取可执行文件的路径。
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
)指的是一种软件平台或系统,用于解释、编译和执行特定编程语言的代码。它提供了一个运行程序所需的基础设施和资源,以便程序能够在该环境中正确地运行。
techterms.com/definition/…
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
引擎,例如 V8
引擎(Chrome
和 Node.js
)、SpiderMonkey
引擎(Firefox
)等。DOM
操作、网络请求、事件处理等 API
;而在服务器端环境中,提供了文件系统访问、网络通信等 API
。JavaScript
运行时环境允许开发者编写和运行 JavaScript
代码,并与环境进行交互。它为开发者提供了一种统一的平台,无论是在浏览器中构建 Web
应用,还是在服务器端编写后端逻辑,都可以使用相同的语言和工具来实现。
Browser
一个典型的浏览器运行时环境包含以下主要组件:
HTML
、CSS
和其他网页资源,并将它们渲染成用户可以看到的页面。JavaScript
代码,使得网页能够具备交互性和动态功能。JavaScript
访问和操作网页元素。浏览器作为一个运行时环境,提供了一个完整的运行环境来展示和操作网页。它不仅仅用于呈现静态的 HTML
内容,还可以动态地执行 JavaScript
代码,并与用户进行交互。通过浏览器提供的 API
和 DOM
,开发者可以创建交互式的 Web
应用程序,并访问各种浏览器功能。
Nodejs
Node.js
运行时环境是一个基于 V8
引擎的 JavaScript
运行时平台,它提供了以下核心组件和功能:
Node.js
使用 V8
引擎作为默认的 JavaScript
引擎。V8
引擎负责解析和执行 JavaScript
代码,并提供高性能和优化的能力。Node.js
使用事件驱动和非阻塞的 I/O
模型,允许在处理并发请求时保持高效。这意味着可以同时处理多个请求而无需等待每个请求完成。Node.js
提供了一系列内置的模块,可以进行文件系统操作、网络通信、加密、流处理等常见任务。同时,Node.js
还支持模块化编程,使开发者可以轻松引入和使用第三方模块。Node.js
提供了一些服务器端 API
,例如 HTTP
、HTTPS
、TCP
和 UDP
等。这些 API
允许开发者构建服务器端应用程序,并处理网络请求、建立连接等。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
实现的JavaScript
runtime
。 -
相关文章与视频:
- Node.js 十大设计缺陷 - Ryan Dahl
- Deno 1.0: What you need to know
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 引擎通常包含以下主要组件:
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
是一个开源的浏览器引擎,最初由苹果公司开发。它提供了渲染网页和执行 JavaScript
代码的功能,并包括渲染引擎(用于解析 HTML
和 CSS
)、JavaScript
引擎等。Blink
是基于 Webkit
的另一个开源浏览器引擎,由谷歌开发并在 Chromium
项目中使用。Blink
最初是作为 Webkit
的分支而创建的,后来演变成独立的引擎。Blink
继承了 Webkit
的渲染引擎部分,并通过集成 V8
引擎实现对 JavaScript
代码的解析和执行。