
# Για προχωρημένους

Τα εσωτερικά της μηχανής. Αν ενσωματώνετε το Phasis, μπορείτε να παραλείψετε αυτή την ενότητα. Αν τροποποιείτε τη μηχανή, κάθε σελίδα εδώ είναι θεμελιώδης.

## Σελίδες

- **[Αρχιτεκτονική](https://phasis.inline0.dev/el/docs/advanced/architecture)** — πώς ο πηγαίος κώδικας γίνεται εκτέλεση: lexer → parser → AST → μεταγλώττιση bytecode → VM bytecode με εφεδρικό περιπατητή δέντρου. Φορτωτής μονάδων, realms και ο ρόλος του `Phasis\Engine` ως ορίου realm.
- **[VM bytecode](https://phasis.inline0.dev/el/docs/advanced/bytecode-vm)** — σύνολο opcode, βρόχος αποστολής, inline caches, η γρήγορη διαδρομή transpiler πηγαίου κώδικα JsToPhp, το heuristic canSkipEnvAlloc για σχήματα συναρτήσεων και πότε οι κλήσεις ακολουθούν τη διαδρομή bytecode ή τον περιπατητή δέντρου.
- **[Συγκριτικές μετρήσεις](https://phasis.inline0.dev/el/docs/advanced/benchmarks)** — οι τρέχουσες μετρήσεις `bench/`, πώς να τις ερμηνεύετε, γιατί περίπου 100× V8 είναι το όριο σταθερής κατάστασης για περιπατητές δέντρου και τι θα μείωνε τη διαφορά.
- **[Δοκιμές](https://phasis.inline0.dev/el/docs/advanced/testing)** — το μοντέλο oracle. Κάθε αλλαγή επαληθεύεται με τρία ανεξάρτητα oracle: Node.js (το βασικό κείμενο της προδιαγραφής V8), test262 και τη σουίτα ισότητας byte δημοφιλών βιβλιοθηκών.

## Συμβάσεις συνεισφοράς

- **Μην αγγίζετε τον βασικό πυρήνα της μηχανής χωρίς σοβαρό λόγο.** Ό,τι βρίσκεται στα `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` είναι στην κρίσιμη διαδρομή του test262. Η αλλαγή τους χωρίς αντίστοιχη επαλήθευση test262 μπορεί να προκαλέσει παλινδρομήσεις. Τα ενσωματωμένα στοιχεία (`src/BuiltIn/`) είναι ασφαλέστερα, καθώς οι επιμέρους σουίτες test262 για κάθε ενσωματωμένο στοιχείο εντοπίζουν τοπικά τα προβλήματα.
- **Χρησιμοποιείτε traits για οργάνωση, όχι κλάσεις.** Όταν ένα αρχείο ξεπερνά περίπου τις 2K γραμμές, χωρίστε το σε αρχεία trait σε έναν γειτονικό κατάλογο (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` κ.λπ.) αντί να δημιουργείτε νέες κλάσεις — έτσι συνεχίζουν να λειτουργούν οι αναζητήσεις `self::` και αποφεύγεται η διατάραξη της επιφάνειας API ιδιωτικών μεθόδων.
- **Εκτελείτε το `bin/verify-all` τοπικά πριν από την προώθηση αλλαγών.** Εκτελεί τα PHPStan, PHPCS, όλες τις σουίτες PHPUnit (unit, oracle, popular, wpt) και τη δοκιμή παλινδρόμησης oracle. Το CI εκτελεί τις σουίτες WPT και popular σε αλλαγές του `src/`· ο πλήρης πίνακας test262 εκκινείται χειροκίνητα, οπότε εκτελείτε τοπικά δείγμα από τις επηρεαζόμενες κατηγορίες test262.
- **Για κάθε προσθήκη Web API, προσθέτετε ένα fixture WPT.** Βάλτε το `.any.js` από το `tests/Wpt/upstream/<area>/` στο `tests/Wpt/fixtures/<category>/` και ο runner θα το εντοπίσει.

## Δείτε επίσης

- [Συμβατότητα](https://phasis.inline0.dev/el/docs/compatibility) — πώς μετρώνται τα αποτελέσματα oracle.
- [Αναφορά CLI](https://phasis.inline0.dev/el/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
