
# Совместимость

Phasis проверяется по трем независимым эталонам:

1. **test262** — официальный набор тестов соответствия ECMAScript от TC39. В репозитории закреплена версия; пройдено **100 %**.
2. **Web Platform Tests** — официальный набор WHATWG / W3C для веб-API вне ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, кодирование, URL, structured-clone, abort, hr-time, atob, crypto). Импортированный корпус пройден на **100 %**.
3. **Популярные библиотеки** — 204 широко используемых пакетов npm (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/ru/docs/compatibility/test262)** — что проверяется, как запускается набор тестов и почему важен показатель 100%.
- **[Веб-API (WPT)](https://phasis.inline0.dev/ru/docs/compatibility/web-apis)** — Web Platform Pack и Fetch Pack: URL, кодирование, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, а также crypto, WebSocket и XMLHttpRequest.
- **[Потоки](https://phasis.inline0.dev/ru/docs/compatibility/streams)** — полный стандарт WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, стратегии постановки в очередь, асинхронная итерация.
- **[Популярные пакеты](https://phasis.inline0.dev/ru/docs/compatibility/popular-packages)** — побайтовое совпадение с Node.js, контролируемое в CI, для 204 npm пакетов в областях разбора, шаблонов, проверки данных, даты и времени, математики, хеширования, поиска и сравнения, цвета, работы с URL и не только.
- **[Возможности спецификации](https://phasis.inline0.dev/ru/docs/compatibility/spec-surface)** — все встроенные средства ECMAScript, синтаксические возможности и объекты стандартной библиотеки, поставляемые с Phasis.
- **[Известные ограничения](https://phasis.inline0.dev/ru/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` запускает PHPUnit, в том числе набор тестов побайтового совпадения популярных библиотек в `tests/Popular/`. Рабочий процесс `popular.yml` запускается по тому же фильтру путей и заново создает все эталонные результаты с помощью настоящего Node, чтобы обнаруживать устаревшие эталонные результаты при обновлении сторонней библиотеки.

Регрессия в WPT или популярном пакете приведет к сбою запроса на слияние, который ее внес. О регрессии test262 станет известно при следующем запуске матрицы.
