Siirry sisältöön

Lisäasetukset

Sisäisiä tietoja. Jos upotat Phasis-ratkaisun, voit ohittaa tämän osion. Jos muokkaat moottoria, jokainen tämän osion sivu on olennainen.

Sivut

  • Arkkitehtuuri — miten lähdekoodista syntyy suoritus: leksikaalinen analyysi → jäsennin → AST → tavukoodin käännös → tavukoodi-VM ja varalla toimiva puun läpikäyjä. Moduulilataaja, realm-ympäristöt ja kohteen Phasis\Engine rooli realm-rajana.
  • Tavukoodi-VM — käskyjoukko, suorituslooppi, sisäiset välimuistit, JsToPhp-lähdekoodin transpiloiva nopea polku, funktiomuodon canSkipEnvAlloc-heuristiikka sekä se, milloin kutsut käyttävät tavukoodipolkua ja milloin puun läpikäyjää.
  • Vertailutestit — nykyiset bench/-tulokset, niiden tulkinta, miksi noin 100× V8 on puun läpikäyjien tasaisen suorituskyvyn yläraja ja mikä voisi kuroa eroa umpeen.
  • Testaus — vertailumalli. Jokainen muutos varmennetaan kolmea toisistaan riippumatonta vertailukohtaa vasten: Node.js (V8-määrityksen totuudenlähde), test262 ja suositun kirjaston tavutasavertaisuuden testisarja.

Osallistumiskäytännöt

  • Älä koske moottorin ytimeen ilman painavaa syytä. Kohteissa src/Runtime/, src/Bytecode/, src/Lexer/, src/Parser/ ja src/Regex/ oleva koodi on test262:n kriittisellä polulla. Niiden muokkaaminen ilman vastaavaa test262-varmennusta johtaa helposti regressioihin. Sisäänrakennetut toiminnot (src/BuiltIn/) ovat turvallisempia, koska niiden test262-alitestisarjat havaitsevat rikkoutumiset paikallisesti.
  • Käytä järjestelyyn traitteja, älä luokkia. Kun tiedosto ylittää noin 2K riviä, jaa se trait-tiedostoihin sisarhakemistossa (src/BuiltIn/Temporal/, src/Runtime/Parts/ jne.) uusien luokkien muodostamisen sijaan — näin self::-haut toimivat ja yksityisten metodien API-pinta säilyy.
  • Suorita bin/verify-all paikallisesti ennen työntämistä. Se suorittaa PHPStan, PHPCS, jokaisen PHPUnit-testisarjan (yksikkö-, vertailu-, popular- ja wpt-testit) sekä vertailuregression. CI suorittaa WPT- ja popular-testisarjat, kun kohdetta src/ muutetaan; koko test262-matriisi käynnistetään käsin, joten testaa paikallisesti muutokseen liittyviä test262-luokkia.
  • Lisää jokaista Web API -toimintoa varten WPT-testitiedosto. Siirrä .any.js kohteesta tests/Wpt/upstream/<area>/ kohteeseen tests/Wpt/fixtures/<category>/, niin suorittaja poimii sen mukaan.

Katso myös