Nie, przeglądarka nie jest interpreterem. To o wiele bardziej skomplikowana bestia.
Na takim najbardziej podstawowym poziomie można wyróżnić w przeglądarce dwa silniki: renderowania i JS-a. Ten od renderowania zajmuje się parsowaniem HTML-a i CSS-a w celu stworzenia kilku struktur drzewiastych:
- DOM – czyli drzewka HTML-a,
- CSSOM – czyli drzewka stylów (CSS-a),
- renderowania – czyli połączenia tych dwóch drzewek w to, co ma zostać wyrenderowane.
Na podstawie drzewka renderowania przeglądarka następnie "rysuje" stronę na ekranie. Chyba najłatwiej to porównać do tego, jak działa canvas w HTML-u.
Oczywiście, żeby nie było za łatwo, równocześnie cały czas działa silnik JS, który zajmuje się odpalaniem kodu JS na stronie. I ten kod JS może wpływać na wspomniane wcześniej drzewka. A każda zmiana musi zostać wyrenderowana. Ergo: renderowanie odbywa się w pętli (coś na wzór requestAnimationFrame()). To, jak dokładnie silnik renderujący jest połączony z tym JS-owym, to można sobie prześledzić w specyfikacji HTML, bo tam jest opis tzw. event loopa (czyli w uproszczeniu – części pętli, o której powiedziałem).
Do tego dochodzi obsługa wszystkich Web APIs, w tym np. dostęp do Bluetootha, integracja z systemem operacyjnym, itd. A Web APIs wymagają odpowiedniego poziomu bezpieczeństwa (czyli trzeba zaimplementować sandbox + Same Origin Policy) oraz często wydajności (stąd praktycznie żaden przeglądarkowy silnik JS nie jest już tylko interpreterem, ale także kompilatorem). A potem wchodzi zabawa z rzeczami pokroju WebGL czy WebGPU, gdzie trzeba gadać bezpośrednio z GPU. Więc nie, silnika przeglądarki nie da się (sensownie) pisać w technologiach webowych. Tutaj praktycznie jedynym wyborem są języki pokroju Rusta czy C++.
A przecież pod spodem jest jeszcze cała obsługa protokołów: HTTP (we wszystkich trzech wersjach), WebSockets, itd. Czy wspominałem już, że standardy sieciowe zmieniają się praktycznie codziennie i przeglądarka musi te zmiany uwzględniać?
Na rynku są obecnie trzy główne silniki przeglądarek (Blink od Chromium, Gecko od Firefoksa i WebKit od Safari). Ilość pracy i czasu, jakie są w nie wkładane, oraz to, jak dynamiczne są standardy sieciowe, skutecznie blokuje pojawienie się jakiegokolwiek nowego silnika. Więc jeśli chcesz tworzyć własną przeglądarkę, to raczej nie tędy droga. Najsensowniej jest wziąć rozwiązanie pokroju Electrona i stworzyć po prostu swoje UI.