나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-08-19 09:42:04

JavaScript/구현체


파일:상위 문서 아이콘.svg   상위 문서: JavaScript
[[JavaScript|
파일:JavaScript 로고.svg
JavaScript
관련 문서
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#f7df1e,#f7df1e><colcolor=#000,#000> 관련 문서 표준(TC39 · 브라우저 전쟁) · Vanilla JS · AJAX · JSFuck · 상태관리 라이브러리 · JSON
문법 표준 내장 객체, this · undefined
구현체 <bgcolor=#f7df1e,#f7df1e> 엔진 V8 · SpiderMonkey · JavaScriptCore · 헤르메스 · Boa
<bgcolor=#f7df1e,#f7df1e> 런타임 Node.js · Deno · Bun · workerd
패키지 관리자 npm · Bun
파생 언어 TypeScript · CoffeeScript · 액션스크립트 · AssemblyScript · elm · ReasonML · ReScript
관련 인물 브랜든 아이크
기타 JavaScript npm 마비 사태 }}}}}}}}}

1. 개요2. 코어 ECMAScript 구현체3. 런타임4. 파생 언어5. 관련 문서

1. 개요

구성 요소가 많고 표준 스펙이 통일되기까지 과정의 험난했던 JavaScript의 특성상 다양한 구현체가 존재한다.

후술할 내용에서 ECMAScript란 대체로 ECMA-262 표준을 의미한다. ECMA-402 표준을 구현하지 않는 구현체도 많고, TC39 제안상태인 스펙들은 정식 표준으로 간주하지 않아 메이저 브라우저 엔진을 제외하면 pre-implement되는 경우가 드물다.

2. 코어 ECMAScript 구현체

브라우저에서 출발한 역사적 맥락상 흔히 엔진이라고 불린다. 다양한 버전의 ECMAScript를 스펙에 맞게 파싱하고, 실행하는, 또는 스펙과 동일한 실행 semantic을 보존하는 기계어/바이트코드를 유도하는 영역을 가리킨다. 스펙 자체는 언어의 내부 구현 방식에 일절 관여하지 않기에, 대부분의 엔진은 내부 아키텍처 구조가 상이하다. 대부분의 browser-grade 엔진의 경우 자체적인 bytecode set을 정의하고 JIT 컴파일을 사용해 구현된다.

3. 런타임

JavaScript를 실행하는 데 필요한 여러 IO 구현 및 시스템 콜 바인딩, 언어 내부에 보여지는 내장 객체 구현을 포함한 완성형 구현체. 주로 위 항목의 언어 구현체와 대비에 런타임이라고 불린다.

과거 serverside-js라는 개념이 부족했던 시절엔 '브라우저 API와 분리된 내장 시스템 인터페이스'라는 개념이 희박해 CommonJS라는 독자적인 확장 표준이 생겨나기도 했으나, 현재는 대부분 표준 Web API 인터페이스 수준에서 구현할 수 있도록 표준화가 이루어진 상태이다. Deno가 이와 같은 구현의 대표적인 사례. 다만 파일 시스템 등은 브라우저 API단에서 커버할 수 없기 때문에 최소한의 런타임 의존성은 생겨나게 되며, 이로 인해서 각 런타임간 호환성 역시 내려간다. 가령 내장 Deno 객체로 작성된 코드를 바로 Node.js에서 실행시킬 순 없다. 때문에 최근 등장하는 대부분의 런타임은 Bun과 같이 사실상 Node.js 인터페이스와의 호환 레이어를 기본적으로 내장하는 편.

이를 해결하기 위해 현재는 TC55 위원회에서 mincomm API 스펙을 정의하려고 시도하는 중이다.

런타임에 시스템 인터페이스 외에도 다양한 부가 API를 넣는 것이 현대 웹 개발환경 추세가 되고 있다. 일례로 Bun은 테스트, SSR 렌더 엔진까지 내장한다. 이전에는 보통 독자적인 모듈 시스템이나 패키지 관리 시스템을 구현했지만 현재는 대부분 npm 호환으로 굳어진 상태. JSR 등 최신 외부 레지스트리의 경우 PM단에서 first-class로 구현되나, 런타임 간 패키징 시스템 호환성 문제는 여전하다. 때문에 npm 패키지를 다이렉트로 쓸 수 있냐 없느냐가 중요 평가 요소로 갈리는 편.

4. 파생 언어

JavaScript의 영향을 받은 언어들 중 ECMAScript 표준과 100% 호환성을 보장하는 언어들 또는 ECMAScript 표준을 준수하면서 부가적인 요소를 추가한 언어들을 기재한다. 단순 JavaScript로 컴파일을 지원하는 언어(예: Kotlin, Nim)는 해당하지 않으며, 호환성과 무관한 목록은 분류:JavaScript 파생 언어를 참고.

5. 관련 문서