
# İleri Düzey

İç yapıya dair bilgiler. Phasis projenize gömüyorsanız bu bölümü atlayabilirsiniz. Motoru değiştiriyorsanız buradaki her sayfa kritik önemdedir.

## Sayfalar

- **[Mimari](https://phasis.inline0.dev/tr/docs/advanced/architecture)** — kaynak kodunun yürütmeye dönüşümü: lexer → parser → AST → bayt kodu derlemesi → ağaç yürüyücüsü yedekli bayt kodu VM'si. Modül yükleyicisi, realm'ler ve realm sınırı olarak `Phasis\Engine`'ın rolü.
- **[Bayt Kodu VM'si](https://phasis.inline0.dev/tr/docs/advanced/bytecode-vm)** — işlem kodu kümesi, dağıtım döngüsü, satır içi önbellekler, JsToPhp kaynak kodu aktarım hızlı yolu, function-shape canSkipEnvAlloc sezgiseli, çağrıların bayt kodu yolunu mu yoksa ağaç yürüyücüsünü mü kullandığı.
- **[Kıyaslamalar](https://phasis.inline0.dev/tr/docs/advanced/benchmarks)** — güncel `bench/` sayıları, bunları yorumlama biçimi, ağaç yürüyücülerinde ~100× V8 değerinin neden kararlı durum üst sınırı olduğu ve aradaki farkı neyin kapatacağı.
- **[Test](https://phasis.inline0.dev/tr/docs/advanced/testing)** — oracle modeli. Her değişiklik üç bağımsız oracle'a göre doğrulanır: Node.js (V8 belirtiminde doğru kabul edilen sonuç), test262 ve popüler kütüphanelerle bayt eşitliği sağlayan test paketi.

## Katkıda bulunma kuralları

- **Güçlü bir gerekçe olmadan çekirdek motora dokunmayın.** `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` altındaki her şey test262 kritik yolundadır. İlgili bir test262 doğrulaması olmadan bunlara dokunmak gerilemelere davetiye çıkarır. Yerleşikler (`src/BuiltIn/`) daha güvenlidir; çünkü her yerleşiğin test262 alt test paketleri bozulmaları kendi içinde yakalar.
- **Sınıflar yerine düzenleme için trait'leri kullanın.** Bir dosya yaklaşık 2K satırı aştığında yeni sınıflar oluşturmak yerine onu kardeş dizindeki trait dosyalarına (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` vb.) ayırın — böylece `self::` aramalarının çalışmasını sürdürür ve özel yöntem API yüzeyinin bozulmasını önlersiniz.
- **Göndermeden önce `bin/verify-all` komutunu yerel olarak çalıştırın.** Bu komut PHPStan, PHPCS, tüm PHPUnit paketlerini (birim, oracle, popüler, wpt) ve oracle gerileme testini çalıştırır. CI, `src/` değişikliklerinde WPT ve popüler test paketlerini çalıştırır; test262 matrisinin tamamı elle başlatılır, bu nedenle etkilenen test262 kategorilerini yerel olarak örnekleyin.
- **Her Web API eklemesi için bir WPT fikstürü ekleyin.** `tests/Wpt/upstream/<area>/` konumundaki `.any.js` öğesini `tests/Wpt/fixtures/<category>/` içine bırakın; çalıştırıcı onu bulur.

## Ayrıca bkz.

- [Uyumluluk](https://phasis.inline0.dev/tr/docs/compatibility) — oracle çıktılarının nasıl ölçüldüğü.
- [CLI başvurusu](https://phasis.inline0.dev/tr/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
