본문으로 건너뛰기

사양 지원 범위

Phasis는 최신 ECMAScript 사양(ES2024+)을 대상으로 하며 Stage 3 이상인 TC39 제안도 추적합니다. 이 페이지는 실제로 제공되는 기능을 사람이 읽기 쉽게 정리한 색인입니다.

언어

기능 상태
TDZ가 적용되는 어휘적 선언(let, const) ✅
블록 스코프, 함수 스코프, 모듈 스코프 ✅
어휘적 this를 사용하는 화살표 함수 ✅
기본 매개변수, 나머지 매개변수, 스프레드 ✅
구조 분해(배열, 객체, 중첩, 기본값, 나머지) ✅
템플릿 리터럴, 태그 템플릿 ✅
계산된 속성 이름 ✅
단축 속성 및 메서드 ✅
클래스 — 생성자, 메서드, getter/setter, static ✅
클래스 필드(공개, 비공개, static) ✅
비공개 메서드 및 접근자 ✅
메서드 및 생성자의 super ✅
데코레이터(Stage 3) ✅
static 초기화 블록 ✅
선택적 체이닝(?.), 널 병합(??) ✅
논리 할당 연산자(&&=, ||=, ??=) ✅
숫자 구분자(1_000_000) ✅
BigInt 리터럴(123n) 및 연산자 ✅
비동기 함수, 비동기 제너레이터, 최상위 await ✅
제너레이터(동기 및 비동기) ✅
for…of, for…in, for await…of ✅
반복자 및 반복 가능 객체(Symbol.iterator) ✅
Symbol 원시 값 및 잘 알려진 심볼 ✅
ES 모듈(import / export, 동적 import()) ✅
import.meta ✅
import attributes(Stage 3) ✅
strict 모드 및 Annex B 레거시 동작 ✅
정규 표현식(/u, /v, /d, 명명된 그룹, 후방 탐색) ✅
자동 세미콜론 삽입(ASI) ✅
해시뱅 문법(#!/usr/bin/env phasis) ✅
strict 모드의 적절한 꼬리 호출(ES2015, 사양에서 요구) ✅

표준 라이브러리

기본 요소

객체 지원 범위
Object 전체 — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries 등
Array 전체 — at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap을 포함한 모든 프로토타입 메서드
String 전체 — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number 전체 — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER 등
BigInt 전체 — bcmath를 통한 임의 정밀도 지원
Boolean 전체
Math 전체 — NaN / Infinity / -0의 모든 메서드 및 특수 사례
JSON 전체 — parse, stringify, 사용자 지정 replacer, reviver, 들여쓰기
Symbol 전체 — for, keyFor, 모든 잘 알려진 심볼, Symbol.toPrimitive
Function 전체 — call, apply, bind, length, name, prototype 의미론

컬렉션

객체 지원 범위
Map 전체 — groupBy 및 실시간 반복 포함
Set 전체 — intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom 포함
WeakMap, WeakSet, WeakRef, FinalizationRegistry 전체

비동기

객체 지원 범위
Promise 전체 — all, race, any, allSettled, withResolvers, 비동기 반복 포함
AsyncIterator, AsyncGenerator 전체
마이크로태스크 스케줄링 ✅

바이너리 데이터

객체 지원 범위
ArrayBuffer, SharedArrayBuffer 전체
DataView 전체 — getBigInt64, setBigInt64 등
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array 전체
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync 전체(단일 에이전트 전용)

리플렉션 및 프록시

객체 적용 범위
Proxy 취소 가능한 트랩 13개 전체
Reflect 정적 메서드 14개 전체

오류

객체 적용 범위
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError 전체
AggregateError 전체
SuppressedError (Stage 3 명시적 리소스 관리) 전체

날짜 및 시간

객체 적용 범위
Date 전체
Temporal (Stage 3) 전체 — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (히브리어, 중국어, Dangi, 에티오피아 달력 등 포함)

국제화

객체 적용 범위
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter 전체 (사용 가능한 경우 PHP의 intl 확장에 위임)

리소스 관리

객체 적용 범위
DisposableStack, AsyncDisposableStack (Stage 3) 전체
Symbol.dispose, Symbol.asyncDispose 전체
using / await using 선언 전체

기타

객체 적용 범위
RegExp (/v 집합 표기법, 명명된 캡처, 전후 탐색, sticky/global 플래그 포함) 전체
Iterator 헬퍼(Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find 전체
ShadowRealm (Stage 3) 전체
globalThis ✅

웹 플랫폼 API(WHATWG / W3C, TC39 제외)

순수 ECMAScript 외에도 Phasis는 실제 JS 라이브러리가 사전 검사하는 여러 계층형 Web API 팩을 제공합니다. 전체 API 범위와 영역별 적합성은 Web API에서 확인하세요.

팩 전역 객체 WPT
웹 플랫폼 URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (globalThis의 별칭), DOMException 100 %
Fetch fetch, Request, Response, Headers, Body 믹스인, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, WHATWG Streams 전체(ReadableStream, WritableStream, TransformStream, 큐잉 전략, BYOB), CompressionStream / DecompressionStream (zlib + ext-brotli를 통한 선택적 brotli), navigator 100 %¹
암호화 crypto.getRandomValues, crypto.randomUUID, SubtleCrypto 전체(digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (생성자 + RFC 6455 프레임 코덱, setWebSocketTransport를 통한 교체 가능한 전송) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (fetch 전송 계층 위에 구축되어 정책 훅 적용) 100 %
이벤트 루프 setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) 해당 없음(오라클 테스트 완료)

¹ 압축 픽스처의 허용 목록 하위 테스트는 제외합니다. ext-brotli가 필요한 brotli 사례와 SharedArrayBuffer 기반 입력을 전달하는 사례(tests/Wpt/WptTest.php의 EXPECTED_FAILURES)가 여기에 해당합니다.

가져온 나머지 Web Platform Tests는 모두 통과합니다. 적합성 항목별 결과는 Web API에서 확인하세요.

아직 구현되지 않은 항목

  • 단일 에이전트를 넘어서는 SharedArrayBuffer 워커 의미론 — 실제 OS 스레드 간 멀티스레드 원자적 알림에는 pcntl가 필요하며 로드맵에 없습니다. 단일 에이전트 원자 연산은 작동합니다.
  • ICU 76+가 필요한 자소 클러스터를 사용하는 Intl.Segmenter — 호스트 PHP의 intl 확장 버전에 따라 달라집니다.

버전 관리

Phasis는 시맨틱 버저닝을 따릅니다. 버전 계열은 ECMAScript 사양 초안을 기준으로 합니다.

Phasis 버전 사양 대상 Stage 3 제안
0.x ES2024 데코레이터, Temporal, 명시적 리소스 관리, 이터레이터 헬퍼, 집합 메서드

1.0으로 올리려면 ES2025 초안의 모든 Stage 4 제안을 구현하고 안정적인 Promise drain 의미론을 갖춰야 합니다.