
# 고급

내부 동작을 설명합니다. Phasis을 임베딩한다면 이 섹션은 건너뛰어도 됩니다. 엔진을 수정한다면 여기의 각 페이지를 반드시 확인하세요.

## 페이지

- **[아키텍처](https://phasis.inline0.dev/ko/docs/advanced/architecture)** — 소스가 실행으로 바뀌는 과정: 렉서 → 파서 → AST → 바이트코드 컴파일 → 트리 워커 대체 경로를 갖춘 바이트코드 VM. 모듈 로더, realm, realm 경계로서의 `Phasis\Engine`의 역할을 다룹니다.
- **[바이트코드 VM](https://phasis.inline0.dev/ko/docs/advanced/bytecode-vm)** — opcode 집합, 디스패치 루프, 인라인 캐시, JsToPhp 소스 트랜스파일러의 빠른 경로, 함수 셰이프의 canSkipEnvAlloc 휴리스틱, 호출이 바이트코드 경로와 트리 워커 중 어느 쪽을 사용하는지 설명합니다.
- **[벤치마크](https://phasis.inline0.dev/ko/docs/advanced/benchmarks)** — 현재 `bench/` 수치와 해석 방법, 트리 워커의 정상 상태 한도가 약 100× V8인 이유, 격차를 줄일 방법을 다룹니다.
- **[테스트](https://phasis.inline0.dev/ko/docs/advanced/testing)** — 오라클 모델을 설명합니다. 모든 변경 사항은 서로 독립적인 세 가지 오라클인 Node.js(V8 사양의 기준 정답), test262, 인기 라이브러리의 바이트 동등성 테스트로 검증합니다.

## 기여 규칙

- **강한 이유 없이 핵심 엔진을 수정하지 마세요.** `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` 아래의 모든 항목은 test262 핵심 경로에 있습니다. 이에 해당하는 test262 검증 없이 수정하면 회귀가 발생할 수 있습니다. 내장 기능(`src/BuiltIn/`)은 각 내장 기능의 test262 하위 테스트 모음에서 문제를 개별적으로 잡아내므로 더 안전합니다.
- **클래스 대신 트레이트로 코드를 구성하세요.** 파일이 약 2K줄을 넘으면 새 클래스를 만드는 대신 형제 디렉터리(`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` 등)에 트레이트 파일로 분리하세요. `self::` 조회가 계속 작동하고 비공개 메서드 API 표면이 깨지지 않습니다.
- **푸시 전에 로컬에서 `bin/verify-all`을 실행하세요.** PHPStan, PHPCS, 모든 PHPUnit 테스트 모음(unit, oracle, popular, wpt), 오라클 회귀 테스트를 실행합니다. CI는 `src/` 변경 시 WPT 및 인기 테스트 모음을 실행합니다. 전체 test262 매트릭스는 수동으로 시작하므로 영향을 받는 test262 카테고리를 로컬에서 표본 검사하세요.
- **Web API 항목을 추가할 때마다 WPT 픽스처를 추가하세요.** `tests/Wpt/upstream/<area>/`의 `.any.js`를 `tests/Wpt/fixtures/<category>/`에 넣으면 러너가 이를 자동으로 가져옵니다.

## 관련 항목

- [호환성](https://phasis.inline0.dev/ko/docs/compatibility) — 오라클 출력을 측정하는 방법입니다.
- [CLI 참조](https://phasis.inline0.dev/ko/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
