Napredno
Podrobnosti delovanja v ozadju. Če vdelujete Phasis, lahko ta razdelek preskočite. Če spreminjate pogon, je vsaka stran tukaj ključna.
Strani
- Arhitektura — kako izvorna koda postane izvajanje: leksikalna analiza → razčlenjevalnik → AST → prevajanje v bajtno kodo → navidezni stroj z bajtno kodo z nadomestnim sprehajalnikom dreves. Nalagalnik modulov, okolja in vloga
Phasis\Enginekot meje okolja. - Navidezni stroj z bajtno kodo — nabor opkod, zanka dispečiranja, vgrajeni predpomnilniki, hitra pot transpilerja izvorne kode JsToPhp, hevristika canSkipEnvAlloc za obliko funkcije ter kdaj klici uporabijo pot bajtne kode in kdaj sprehajalnik dreves.
- Primerjalni testi — trenutne meritve
bench/, kako jih razlagati, zakaj je približno 100× V8 zgornja meja zmogljivosti sprehajalnikov dreves v ustaljenem stanju in kaj bi zmanjšalo vrzel. - Testiranje — model oraklov. Vsaka sprememba se preveri glede na tri neodvisne oracle: Node.js (izhodišče resnice za specifikacijo V8), test262 in zbirko testov enakosti bajtov za priljubljene knjižnice.
Dogovori za prispevke
- Osrednjega pogona se dotikajte le z utemeljenim razlogom. Vse pod
src/Runtime/,src/Bytecode/,src/Lexer/,src/Parser/,src/Regex/je na kritični poti test262. Spremembe brez ustreznega preverjanja test262 lahko povzročijo regresije. Vgrajene funkcije (src/BuiltIn/) so varnejše, ker podnabori testov test262 za vsako vgrajeno funkcijo lokalno zaznajo napake. - Za organizacijo uporabljajte lastnosti, ne razredov. Ko datoteka preseže približno 2K vrstic, jo razdelite na datoteke z lastnostmi v podrejeni mapi (
src/BuiltIn/Temporal/,src/Runtime/Parts/itd.) namesto ustvarjanja novih razredov — tako iskanjeself::še naprej deluje in se izognete spremembam površine zasebnih metod API. - Pred pošiljanjem lokalno zaženite
bin/verify-all. Zažene PHPStan, PHPCS, vse zbirke PHPUnit (unit, oracle, popular, wpt) in regresijski test oracle. CI ob spremembah vsrc/zažene zbirki WPT in popular; celotna matrika test262 se zažene ročno, zato lokalno vzorčno preizkusite prizadete kategorije test262. - Ob vsaki dodani spletni funkciji API dodajte testni primer WPT. Datoteko
.any.jsiztests/Wpt/upstream/<area>/dodajte vtests/Wpt/fixtures/<category>/in izvajalnik jo bo zaznal.
Glejte tudi
- Združljivost — kako se merijo izhodi orakla.
- referenca — CLI,
bin/phasis,bin/test262,bin/wpt.