
# 호환성

Phasis은 서로 독립적인 세 가지 기준으로 검증됩니다:

1. **test262** — 공식 TC39 ECMAScript 적합성 테스트 모음입니다. 저장소에 고정된 리비전의 **100 %** 를 통과합니다.
2. **Web Platform Tests** — ECMAScript가 아닌 웹 API(fetch, XHR, WebSocket, Streams, Headers, Blob, 인코딩, URL, structured-clone, abort, hr-time, atob, crypto)에 대한 공식 WHATWG / W3C 테스트 모음입니다. 가져온 테스트 모음에서 **100 %** 를 통과합니다.
3. **인기 라이브러리** — 널리 사용되는 npm 패키지 204개(acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …)가 Node.js와 바이트 단위로 동일하게 실행됩니다.

## 다른 엔진과 비교

| 엔진 | test262 | 참고 사항 |
|---|---:|---|
| **Phasis** | **100 %** | 순수 PHP. ES2024 이상을 대상으로 합니다. |
| V8 (Node, Chrome) | 99.8 % | 기준 C++ 엔진입니다. |
| SpiderMonkey (Firefox) | 99.6 % | 기준 C++ 엔진입니다. |
| JavaScriptCore (Safari) | 99.4 % | 기준 C++ 엔진입니다. |
| QuickJS | ~97 % | C로 작성된 경량 임베드형 엔진입니다. |
| Hermes (React Native) | ~95 % | 모바일에 최적화된 임베드형 엔진입니다. |

수치는 [test262.fyi](https://test262.fyi)의 자료입니다. Phasis은 프로덕션 브라우저 엔진과 함께 최상위권에 속합니다.

## 페이지

- **[test262 커버리지](https://phasis.inline0.dev/ko/docs/compatibility/test262)** — 무엇을 테스트하는지, 테스트 모음이 어떻게 실행되는지, 100%가 중요한 이유를 설명합니다.
- **[웹 API(WPT)](https://phasis.inline0.dev/ko/docs/compatibility/web-apis)** — Web Platform Pack과 Fetch Pack: URL, 인코딩, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams와 crypto, WebSocket, XMLHttpRequest를 다룹니다.
- **[Streams](https://phasis.inline0.dev/ko/docs/compatibility/streams)** — WHATWG Streams Standard 전체: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, 대기열 전략, 비동기 반복을 다룹니다.
- **[인기 패키지](https://phasis.inline0.dev/ko/docs/compatibility/popular-packages)** — 파싱, 템플릿, 유효성 검사, 날짜/시간, 수학, 해싱, 검색/차이 비교, 색상, URL 처리 등을 포함한 204개의 npm 패키지가 Node.js와 바이트 단위로 일치하는지 CI에서 검사합니다.
- **[명세 범위](https://phasis.inline0.dev/ko/docs/compatibility/spec-surface)** — Phasis이 제공하는 모든 ECMAScript 내장 기능, 구문 기능, 표준 라이브러리 객체를 다룹니다.
- **[알려진 제한 사항](https://phasis.inline0.dev/ko/docs/compatibility/limitations)** — Phasis이 V8와 의도적으로 다른 부분: 성능 상한, 멀티 에이전트 동시성, Wasm, 브라우저 전용 웹 API.

## 측정 방법

- **test262** — `bin/test262`이 테스트 모음을 로컬에서 실행합니다. 전체 매트릭스는 매 푸시 때가 아니라 수동으로 시작하는 `compat-matrix.yml` 워크플로에서 실행됩니다. 성공적으로 실행되면 실행 시점과 기준 커밋을 기록하는 스냅샷이 [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md)에 커밋됩니다. 테스트 모음 리비전은 `test262` git 서브모듈에 고정된 버전입니다.
- **Web Platform Tests** — `bin/wpt`이 가져온 픽스처를 실행합니다. `wpt.yml` 워크플로는 `main`에 푸시하거나 `src/`, 픽스처 또는 Composer 파일을 변경하는 풀 리퀘스트가 있을 때 실행됩니다.
- **인기 라이브러리** — `composer test`이 `tests/Popular/`에서 인기 라이브러리 바이트 일치 테스트 모음을 포함한 PHPUnit을 실행합니다. `popular.yml` 워크플로는 같은 경로 필터를 적용해 테스트를 실행하고, 실제 Node에서 모든 기준값도 다시 생성하므로 vendored 라이브러리의 버전을 올릴 때 오래된 기준값을 감지합니다.

WPT 또는 인기 패키지에서 회귀가 발생하면 이를 일으킨 풀 리퀘스트가 실패합니다. test262의 회귀는 다음 매트릭스 실행 때 나타납니다.
