2012-05-12 7 views
5

Dart läuft in einer eigenen Dart VM, aber Sie können es zu modernem optimierten JavaScript kompilieren. Aber wie funktioniert das? Gibt es online Artikel oder Artikel, die diesen Prozess erklären?Wie funktioniert der Dart-Javascript-Compiler (dart2js)?

Ich frage mich, ob das ein einfaches, direktes passendes Element zu Element ist, nur zeitaufwändig zu entwickeln, zu verarbeiten oder gibt es einige Elemente/Aspekte von Dart, die nicht in JavaScript kompiliert werden konnten.

http://www.dartlang.org

EDIT: thx für Ihre 2 Antworten. Der Punkt ist, dass ich einem Kollegen von mir über Dart erzählt habe und dass Dart in JavaScript kompiliert werden kann. Er akzeptierte, dass es zu JavaScript kompiliert werden könnte, aber es würde in Mumbojumba-Code resultieren und wird nur für einfache Sachen funktionieren. Am Ende sagte er: "Okay, erkläre es mir. Wie funktioniert das Kompilieren mit nicht-trivialem Code? '' '

Deshalb frage ich. Ich hatte gehofft, dass es online Material gibt, das ich verlinken könnte.

Antwort

4

Der Dart-Editor wird nun Ihren Dart-Code mit dart2js in JavaScript übersetzen.

Was den zweiten Teil Ihrer Frage betrifft, sind die dart: io-Bibliotheken nur für den Server/die Befehlszeile gedacht und können daher nicht mit dart2js kompiliert werden.

Ich weiß jetzt, ich glaube, Sie werden fragen: „Wie haben die Ingenieure entwerfen und implementieren die dart2js Compiler“, nicht „wie laufen Sie dart2js“

Hier ist ein Blog-Post auf die Ankündigung von dart2js: http://news.dartlang.org/2012/05/new-dart-to-javascript-compiler-ready.html

Kasper Lund, einer der Ingenieure, fügt hinzu: "Für die technisch Interessierten kann ich Ihnen sagen, dass der neue Compiler eine interne Darstellung in SSA-Form (statische Einzelzuweisung) verwendet und dass der Compiler vollständig in Dart implementiert ist."

Der Quellcode ist bei http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Flib%2Fcompiler%2Fimplementation

1

Gibt es irgendwelche Artikel oder Online-Papiere, die diesen Prozess erklären?

Das Frontend ist Ihr klassischer handgerollter Lexer und rekursiver Descent-Parser. Das Back-End ist, glaube ich, eine Reihe von Typ-Inferenzen (da Dart-Typ-Annotationen zu lose sind, um eine zuverlässige statische Typanalyse von ihnen zu ermöglichen, und die Laufzeit-Semantik lässt Sie die Typ-Annotationen nicht ernst nehmen). Wenn Sie nach Artikeln über "konkrete Art Schlussfolgerung" suchen, glaube ich, dass Sie etwas von der Literatur finden, die Sie suchen. Auch sollte jeder Verweis auf das Kompilieren zum SSA-Formular (und das Ausführen von Code-Gen von diesem Formular, nehme ich an) helfen.