Wie kann Googles Dart bessere Leistung erzielen?

7

Ich habe den Artikel über die kommende DASH / DART-Sprache von Google gelesen, was ich ziemlich interessant fand.

Eine Sache, über die ich gestolpert bin, ist, dass sie sagen, dass sie die inhärenten Leistungsprobleme von JavaScript beseitigen werden. Aber was genau sind diese Leistungsprobleme? Es gibt keine Beispiele im Text. Das ist alles, was es sagt:

  
  • Performance - Dash ist mit Leistungsmerkmalen in   Beachten Sie, dass es möglich ist, VMs zu erstellen, die nicht über die Leistung verfügen   Probleme, die alle EcmaScript-VMs haben müssen.
  •   

Haben Sie irgendwelche Ideen, was diese inhärenten Leistungsprobleme sind?

    
Sune1987 25.09.2011, 15:16
quelle

3 Antworten

5

Ein Beispiel ist Tail Call Eliminierung (ich bin sicher, dass einige es für eine hohe Leistung benötigen funktionelle Programmierung ). Ein Feature-Request wurde für die Google V8 Javascript VM eingereicht, aber dies war die Antwort:

  

Tail Call Elimination ist nicht kompatibel mit JavaScript, wie es in der realen verwendet wird   Welt.

    
Dan Cecile 25.09.2011, 15:24
quelle
8

Dieser Thread ist ein Muss für alle, die sich für dynamische Language Just-in-Time-Compiler interessieren: Ссылка

Die Teilnehmer dieses Threads sind die Schöpfer von Luajit, der Pypy-Leute, Mozilla's JavaScript-Entwickler und viele mehr. Achte besonders auf Mike Palls Kommentare (er ist der Schöpfer von luajit) und seine Meinungen zu Javascript und Python im Besonderen. Er sagt, dass Sprachdesign die Leistung beeinflusst. Er legt Wert auf Einfachheit und Orthogonalität und vermeidet dabei die verrückten Fälle, in denen beispielsweise Javascript jagt.

Viele verschiedene Techniken und Ansätze werden dort diskutiert (Jits, Method Jits, Interpreter usw.). Schau es dir an!

Luis

    
user876508 26.09.2011 22:13
quelle
6

Der Artikel bezieht sich auf die Optimierungsschwierigkeiten, die von extrem dynamischen Sprachen wie JavaScript und prototypischen Vererbung stammen.

In Sprachen wie Ruby oder JavaScript kann sich die Programmstruktur zur Laufzeit ändern. Klassen können eine neue Methode erhalten, Funktionen können eval () 'in Existenz gesetzt werden und mehr. Das macht es für Laufzeiten schwieriger, ihren Code zu optimieren, da die Struktur niemals garantiert festgelegt wird.

Die Prototyp-Vererbung ist schwieriger zu optimieren als herkömmliche Klassen-basierte Sprachen. Ich vermute, dies liegt daran, dass es viele Jahre der Forschungs- und Implementierungserfahrung für klassenbasierte VMs gibt.

Interessanterweise verwendet V8 (Chrome-JavaScript-Engine) versteckte Klassen als Teil seiner Optimierungsstrategie. Natürlich hat JS keine Klassen, daher ist das Objektlayout in V8 komplizierter.

Das Objektlayout in V8 erfordert mindestens 3 Wörter in der Kopfzeile. Im Gegensatz dazu benötigt die Dart-VM nur 1 Wort in der Kopfzeile. Die Größe und Struktur eines Dart-Objekts ist zur Kompilierungszeit bekannt. Dies ist sehr nützlich für VM-Designer.

Ein anderes Beispiel: In Dart gibt es echte Listen (auch bekannt als Arrays). Sie können eine Liste fester Länge haben, die einfacher zu optimieren ist als JavaScript's Nicht-wirklich-Arrays und immer variablen Längen.

Lesen Sie mehr über das Kompilieren von Dart (und JavaScript) für effizienten Code mit dieser Präsentation: Ссылка

Eine weitere Leistungsdimension ist die Startzeit. Wenn Web-Apps komplexer werden, steigt die Anzahl der Codezeilen. Das Design von JavaScript erschwert die Optimierung des Startvorgangs, da beim Parsen und Laden des Codes auch der Code ausgeführt wird. In Dart wurde die Sprache sorgfältig entworfen, damit sie schnell analysiert werden kann. Dart führt beim Laden und Parsen der Dateien keinen Code aus.

Dies bedeutet auch, dass Dart-VMs eine Binärdarstellung der geparsten Dateien (bekannt als Snapshot) zwischenspeichern können, um noch schneller starten zu können.

    
Seth Ladd 27.04.2013 03:27
quelle

Tags und Links