Mellékleteink: HUP | Gamekapocs
Keres
Felhőből visszaköltözéstől egészen egy banki malware evolúciójáig. Üzemeltetői és IT-biztonsági meetupokkal érkezünk!

Masszív frissítéseket kapott a Google JavaScript-motorja

Gálffy Csaba, 2016. május 02. 18:55
Ez a cikk több évvel ezelőtt születetett, ezért előfordulhat, hogy a tartalma már elavult.
Frissebb anyagokat találhatsz a keresőnk segítségével:

Fejlettebb szemétgyűjtéssel, WebAssembly-támogatással és kiterjesztett JavaScript-kompatibilitással érkezik a V8 legfrissebb, 5.1-es kiadása.

hirdetés

Kiadta az egyik iparági etalonnak számító V8 JavaScript-motor új verzióját a Google. A V8 mára egy komplex futtatókörnyezet és de facto fejlesztői platform is lett, amelyre a Chrome böngésző mellett a Node.js szerveroldali JavaScript-környezet, a MongoDB, a CouchDB is épül, de ezt használja például a Mono is, a .NET keresztplatformos portja. A V8 emiatt meghatározó a JavaScript-motorok között, a frontend-fejlesztőktől a szerveres programozókig mindenki közelről figyeli, hogy éppen mit implementál a Google a szabad szoftveres megoldásba.

Előzetes WebAssembly implementáció

A kiugró újdonság az előzetes WebAssembly-támogatás. Erről az új technológiáról még a nyári bejelentéskor írtunk részletesebben, tömören ez egy olyan bináris bájtkód, amely nagyon gyorsan, közel natív sebességgel tudnak futtatni a böngészők. A WebAssembly (vagy más néven wasm) roppant ígéretes technológia, amely a JavaScriptet váltaná ki a köztes kód pozíciójában. Jelenleg ugyanis rengeteg nyelv fordul JS-re (TypeScript, Dart, stb.), mint általános, minden böngésző által megértett nyelvre - ez a közös alap lenne a jövőben a WebAssembly. A WebAssemblyt támogatásáról biztosította a Firefox, a Chrome és a Microsoft Edge fejlesztőcsapata is, így várhatóan tényleg webes szabvánnyá tud majd válni.

A most bejelentett implementáció már nem kísérleti, hanem előzetes státuszú. Ez gyakorlatban annyit jelent, hogy már nem csak kipróbálásra alkalmas, hanem lassan el is lehet kezdeni fejleszteni rá, jelentős változások az implementációban már nem várhatóak. A tavaly bejelentett projekt eszerint elképesztő sebességgel halad előre, az első komoly implementációk birtokában az első WebAssemblyt használó megoldások is hamarosan érkezhetnek.

Folytatódik a szemétgyűjtő-projekt

Tovább halad a Google Orinoco-projektje is. Ez a V8-ban található szemétgyűjtő (GC, garbage collector) átdolgozására irányul, hogy a háttérben lefutó memóriafelszabadítás ne okozzon beakadásokat a böngésző felületén. A V8 5.1-ben a projekt újabb eredményei jelennek meg, mint az új generációs objektumok párhuzamos takarítása, a megtartott halmazok skálázása, és az élő objektumok fejlettebb megkülönböztetése ("fekete allokáció"). Ezekről részletesebben a fenti linken írtak a fejlesztők.

Szabvány? Melyik szabvány?

Tavaly nyáron lett hivatalos szabvány az ES6 (ECMAscript 6, aka "JavaScript 6"), februárban pedig már a következő, ES7 szabvány előzetese (draft) is megérkezett. Az új menetrend szerint az iparági fórum, a TC39-es munkacsoport évente dolgoz ki új szabványt, ennek megfelelően már az ES8 is a futószalagon van. Értelemszerűen e szabványokat a JavaScript-motorok implementálják - de pontosan melyik verziót?

Ebbe a kérdésbe futott bele most a Google, a cég hosszas magyarázó posztban próbálja kifejteni, hogy miért hozott néhány döntést az ES6 és ES7 szabványok implementációja kapcsán a V8 5.1-ben. Ugyan az 5.1-es kiadás elvben "támogatja" az ES6 és az ES7 szabványokat is, az idézőjel nem véletlen, az implementáció ugyanis nem száz százalékos.

Vegyük előre a fontos információt: igen, a V8 új kiadása teljes mértékben támogatja a legfontosabb ES6-újdonságokat, az osztályok, a nyilas függvények, az ígéretek, iterátorok, generátorok, proxyk, és az átdolgozott szintaxis is része a frissítésnek. Emellett a fejlesztők az ES7-ből is beemeltek olyan elemeket, amelyek már egészen biztosan nem fognak változni a hivatalos szabvány kiadásáig, így a hatványozási operátor vagy az Array.prototype.includes() is támogatott lesz.

Vannak azonban a szabványnak olyan elemei, amelyek a gyakorlatban problémásnak bizonyultak. a Google példája a RegExp sticky tulajdonsága, amely az ES6-ban specifikált működés szerint rengeteg meglévő oldalon hibásan fut, néhány meglévő implementációval nem kompatibilis. Erre reakcióként a munkacsoport egy javítás mellett döntött, de ez még a gyors iteráció mellett is csak az ES8-ban lenne elérhető. A Google azonban ezt a döntést már úgy értelmezte, hogy a javítás ezzel "az ECMAScript nyelv részévé vált", így fogta, és implementálta a V8-ban. Tehát a motor kompatibilitási okokból de facto nem követi az ES6 szabványt, helyette egy, várhatóan az ES8-ban debütáló alternatív működést implementál.

Nem folyamatosan telik a progress bar...

Ez nyilván hasznos a problémás weboldalak fejlesztőinek és használóinak, de felvet néhány kérdést a webes szabványok követése kapcsán. E szabványoknak ugyanis pontosan az a lényege, hogy a webfejlesztőnek nem kell követnie, hogy mely képességet mely böngésző pontosan hogyan implementálja, elegendő tudnia, hogy az X vagy Y böngésző egészében ES6-kompatibilis. Márpedig ilyen biztos alapot a Google nem ígér, csupán egy igen homályos próbálkozást tesz a cég arra, hogy a támogatási politikát definiálja: a V8 támogatja a jövőbeni ECMAScript szabványok folyamatosan frissített tervezetét (angolul is szép: V8 supports compliance with the "continually maintained draft future ECMAScript standard").

A probléma illusztrációjára a Google egy másik példát is hoz, ez a procedúrák utolsó hívásának kezelési kérdése (proper tail call). Ez szintén egy olyan képesség, amely bekerült az ES6 szabványba, a megfogalmazás azonban nem jó (ebben a Google mérnökeivel a Mozilla és a Microsoft is egyetért), így egy alternatív javaslat várhatóan felül fogja azt írni (a részletes leírásért lásd a Google bejegyzését). Amennyiben ez a javaslat átmegy, ez kerül be a V8 implementációjába, amennyiben a munkacsoport ezt nem fogadja el, akkor élesedik az amúgy már implementált eredeti proper tail calls funkció.

A V8 5.1 a tervek szerint a Chrome 52-es kiadásával, néhány héten belül kerül majd a felhasználók kezébe - és eszközeire. A V8 új kiadása (és annak forráskódja) a projekt weboldalán érhető el.

Facebook

Mit gondolsz? Mondd el!

Adatvédelmi okokból az adott hír megosztása előtt mindig aktiválnod kell a gombot! Ezzel a megoldással harmadik fél nem tudja nyomon követni a tevékenységedet a HWSW-n, ez pedig közös érdekünk.
4-4 klassz téma a HWSW júniusi üzemeltetői és IT-biztonsági meetupjain. Nézz meg a programot!