Tech Life

Ilustrační obrázek

JavaScript, SmallTalk, Java Hotspot VM a čo ďalej?

13. 10. 2008 00:00    kategorie: Tech Life    autor: DMl    komentářů: 0

Už nejaký čas sú internety ochromené a nadšenie pomaly, ale isto, upadá. Samotný browser prináša rôzne UI fičúry, taby v samostatných procesoch a podobné revolučné nápady. Chýba mu však niečo, čím by “presvedčil” viac než percento používateľov, pretože keď má niekto presedlať, tak to predsa musí stáť za to! Jeho veličenstvo Chromium ale nie je dnešnou témou, tou je jeho Javascriptový engine, V8.
 

Kto?

Animorphic tým. To sú kluci, ktorý spáchali také nehoráznosti, akými sú Java Hotspot VM a Strongtalk Smalltalk VM. Prvé uvedené myslím u nás nie je potrebné nikomu predstavovať. Čo je Strongtalk Smalltalk? Je to najrýchlejšia implementácia Smalltalku, ktorá vznikla v Animorphic Systems (1994). Táto spoločnosť bola kúpená Sunom v roku 1997 a časti ich VM vytvorili základ dynamických optimalizácií dnešnej slávnej Sunovskej Java VM. Samotný Strongtalk VM bol Sunom vydaný ako open source v roku 2006.

Remember it will still be a lot easier to run other dynamic languages on JavaScript than it is to run them on Java, since at least JavaScript is fully dynamic, unlike Java. – David Griswold

Ako?

  • skryté triedy
  • ich premeny
  • inline caching
  • preklad do natívneho kódu
  • GC

Skryté triedy

Javascript je dynamický, to znamená, že vlastnosti môžeme objektom za behu pridávať a mazať. JS enginy túto skutočnosť riešia tak, že vlastnosti ukladajú do slovníku, to je ale penalizované stratou výkonu, pretože engine musí dynamicky v slovníku tieto vlastnosti hľadať, a to niečo stojí. To ale nie je prípad V8...

Systém skrytých tried sleduje Javascriptové objekty, v ktorých hľadá opakujúce sa vzorce, a kde ich nájde, tam vytvorí skrytú triedu, ktorá urýchľuje prístup k vlastnostiam objektu. Skrytá trieda umožňuje enginu presne vedieť, kde v pamäti sa daná vlastnosť nachádza a tým sa dramaticky jej čítanie zrýchli. Ak pridáme ďalšiu vlastnosť, skrytá trieda sa zmení.

A bonus, keďže V8 vnútorne používa “triedy”, používa aj ďalšie optimalizácie s týmto faktom súvisiace (inline caching).

Machine code

Žiadna interpretácia, žiadny bytecode. A v tom to je. Keď V8 prvýkrát vidí daný Javascript, preloží ho priamo do strojového kódu. Pri prvom spustení kódu, ktorý pristupuje k nejakej vlastnosti daného objektu, V8 nájde jeho skrytú triedu a optimalizuje prístup k vlastnosti, s predpokladom, že všetky ostatné objekty v tej sekcii kódu, používajú tú istú skrytú triedu. Znie to trošku divne, ale zrejme im to funguje. V prípade že predpoklad zlyhá, V8 opatchuje kód a odstráni optimalizáciu.

A väčšinou (dokázateľne 90%), používame nejaké série, zoznamy, polia s rovnakými, alebo podobnými objektmi, takže je jasné, že to fungovať musí. A navyše v kombinácii s prekladom a inline cachovaním, dostaneme skutočne veľký výkon.

Knižnice

Drobná zaujímavosť je aj to, že veľká časť základných JS knižníc, a predpokladám že aj prístup k DOMu, je napísaných priamo v Javascripte. Benefit? Tieto časti kódu podliehajú rovnakým optimalizáciám, ako váš vlastný kód. Čo to znamená? Fast as hell...

Ďalšie jazyky

Tu môžem len dodať, že V8 nie je Javascript špecifická VM, ale je možno ju pri ohnúť pre iné dynamické jazyky, ale na to si asi nejaký nemalý čas počkáme.

The release of the V8 VM is the beginning of a whole new era for dynamic languages (Smalltalk, Ruby, Python, etc). — David Griswold

Tak, a to je pre dnes všetko, Chrome máte pod rukami tak hurá na benchmarky a testovania, malá drobnosť na záver, V8 je, ako inak, open source!

Sdílet odkaz:
tisk

Diskuze k článku

K článku nebyl zatím přidán komentář.

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ