V8 wersja 8.4 beta został właśnie wydany

V8 wersja 8.4 beta, czyli silnik stanowiący podstawę Node.js, doczekał się kolejnego wydania. Każda kolejna wersja V8 jest wydawana bezpośrednio przed kolejną wersją Chrome Beta. W nowej wersji znajdziemy wiele przydanych nowości dla programistów, w zakresie WebAssembly i JavaScript.
V8 wersja 8.4 beta – Java Script – WeakReferences
JS jest językiem odśmiecania pamięci. Automatycznie przydziela pamięć w trakcie tworzenia obiektów, a gdy nie są już używane – zwalnia ją. Wszystkie referencje w JS, za wyjątkiem WeakMap oraz WeakSet, są silne, a także zapobiegają odmieceniu obiektu referencyjnego. Przykładowo, dopóki globalRef jest osiągalny przez globalny zasięg, ani on, ani funkcja w jego właściwości zwrotnej nie będą gromadzone.
const globalRef = { callback() { console.log('foo'); } };
Teraz programiści JS za pomocą funkcji WeakRef mogą przytrzymać słabe referencje. Obiekty, do których się odwołują, nie zapobiegają ich odśmiecaniu, jeśli także nie są silnie odwoływane. Po pierwsze globalWeakRef gwarantuje, że będzie utrzymany do pierwszego zwoju pętli zdarzeń po jej utworzeniu. Po zwrocie pętli zdarzeń (a właściwie po pierwszej turze), pamięć z obiektami wewnątrz globalWeakRef może być odśmiecona. W przeciwnym razie, obiekty nie są osiągalne.
const globalWeakRef = new WeakRef({ callback() { console.log('foo'); } }); (async function() { globalWeakRef.deref().callback(); await new Promise((resolve, reject) => { setTimeout(() => { resolve('foo'); }, 42); }); globalWeakRef.deref()?.callback(); })();
JavaScript – finalizatory
Razem z WeakRef pojawiła się funkcja FinalizationRegistry. Dzięki niej programiści rejestrują wywołania zwrotne, po tym jak obiekt jest odśmiecony z pamięci. Tak zwane finalizatory działają w pętli zdarzeń, nigdy nie przerywają synchronicznego wykonywania JS.
Prywatne metody oraz akcesory
W wersji 7.4 V8 pojawiły się prywatne pola. W V8 wersja 8.4 beta są one uzupełnione o obsługę prywatnych metod i akcesorów. Nazwy akcesorów i metod zaczyna się tak jak nazwy pól prywatnych, od #. Tak samo jak prywatnych pól określa się również ich zakres oraz semantykę.
Lepszy czas uruchamiania w WebAssembly
W V8 wersja 8.4 beta kompilator WebAssembly obsługuje instrukcje atomowe i operacje pamięci masowej, co oznacza, że czas uruchamiania jest teraz krótszy. Nawet, jeśli korzystamy z nowych dodatków do specyfikacji.
V8 wersja 8.4 beta – poprawa debugowania WebAssembly
Teraz można sprawdzić każdą ramkę WebAssembly , aktywną za każdym razem, gdy programista wstrzyma wykonywanie lub osiągnie punkt przerwania. Poprawa debugowania nastąpiła przez ponowne użycie do niego Liftoff. Wcześniej cały kod z punktami przerwania trzeba było wykonywać w interpreterze WebAssembly. Spowalniało to wykonywanie programu nawet sto razy. Aktualnie traci się prawie jedną trzecią wydajności, ale można w każdym momencie przejść przez kod i go sprawdzić.