W artykule odnosi się do trudności optymalizacyjnych, które pochodzą z niezwykle dynamicznych języków takich jak JavaScript, plus prototypal dziedziczenia.
W językach takich jak Ruby lub JavaScript struktura programu może się zmieniać w czasie wykonywania. Klasy mogą uzyskać nową metodę, funkcje mogą być eval() 'ed do istnienia i więcej. Utrudnia to środowisku wykonawczemu optymalizację kodu, ponieważ struktura nigdy nie jest gwarantowana.
Dziedziczenie prototypowe jest trudniejsze do zoptymalizowania niż bardziej tradycyjne języki oparte na klasach. Podejrzewam, że tak jest, ponieważ istnieje wiele lat doświadczeń w zakresie badań i wdrażania dla maszyn wirtualnych opartych na klasach.
Co ciekawe, V8 (silnik JavaScript Chrome) wykorzystuje ukryte klasy w ramach strategii optymalizacji. Oczywiście JS nie ma klas, więc układ obiektów jest bardziej skomplikowany w V8.
Układ obiektu w V8 wymaga co najmniej 3 słów w nagłówku. W przeciwieństwie do Dart VM wymaga tylko 1 słowo w nagłówku. Rozmiar i struktura obiektu Dart jest znana podczas kompilacji.Jest to bardzo przydatne dla projektantów VM.
Kolejny przykład: w Dart istnieją rzeczywiste listy (inaczej tablice). Możesz mieć listę o stałej długości, która jest łatwiejsza do zoptymalizowania niż tablice JavaScript niezupełnie rzeczywiste i zawsze zmienne długości.
Więcej o kompilacji Dart (i JavaScript) do efektywnego kodu z tej prezentacji: http://www.dartlang.org/slides/2013/04/compiling-dart-to-efficient-machine-code.pdf
wymiar innego świadczenia jest czas rozruchu. Ponieważ aplikacje internetowe stają się bardziej złożone, liczba linii kodu rośnie. Konstrukcja JavaScript utrudnia optymalizację uruchamiania, ponieważ parsowanie i ładowanie kodu również wykonuje kod. W Dart język został starannie opracowany, aby można go było szybko przeanalizować. Dart nie wykonuje kodu podczas ładowania i analizowania plików.
Oznacza to również, że maszyny wirtualne Dart mogą buforować binarną reprezentację przeanalizowanych plików (zwaną migawką), aby jeszcze szybciej uruchomić komputer.
Benchmarki lub się nie stało. Spekulowanie na temat wykonania czegoś, co nie zostało wydane, jest zupełną bzdurą. – fijal
Zabawne jest to, że Dart wydaje się być ** wolniej ** niż JS. – c69