2012-05-12 15 views
5

Dart viene eseguito in una propria Dart VM, ma è possibile compilarlo in JavaScript ottimizzato moderno. Ma come funziona? Ci sono articoli o documenti online che spiegano tale processo?Come funziona il compilatore dart javascript (dart2js)?

Mi chiedo se si tratti di un semplice elemento di allineamento diretto all'elemento, che richiede solo tempo per sviluppare, elaborare o ci sono alcuni elementi/aspetti di Dart che non possono essere compilati in JavaScript.

http://www.dartlang.org

EDIT: thx per le 2 risposte. Il punto è che ho raccontato a un mio collega di freccette e che il dardo può essere compilato su JavaScript. Ha accettato che potesse essere compilato in JavaScript ma risulterebbe in codice mumbojumba e funzionerà solo per cose semplici. Alla fine disse: "ok, spiegami. come va questa compilazione andando a lavorare su un codice non banale? '' '

Ecco perché sto chiedendo. Speravo che ci fosse del materiale online che potrei collegare a lui.

risposta

4

Il Dart Editor ora compilerà il codice Dart su JavaScript con dart2js.

Per quanto riguarda la seconda parte della domanda, le librerie dardo: io sono solo per server/riga di comando, quindi non possono essere compilate con dart2js.

mi rendo conto ora penso ti stai chiedendo "come ha fatto la progettazione ingegneri e implementare il compilatore dart2js", non "come si fa a correre dart2js"

Ecco un post sul blog l'annuncio di dart2js: http://news.dartlang.org/2012/05/new-dart-to-javascript-compiler-ready.html

Kasper Lund, uno degli ingegneri, aggiunge "Per il tecnico interessato, posso dirti che il nuovo compilatore utilizza una rappresentazione interna in formato SSA (assegnazione singola statica) e che il compilatore è implementato interamente in Dart."

Il codice sorgente è a http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Flib%2Fcompiler%2Fimplementation

1

sono lì tutti gli articoli o documenti online che spiegano questo processo?

Il front-end è il tuo classico lexer arrotolato a mano e parser di discesa ricorsivo. Il back-end è, credo, un po 'di inferenza di tipo (dal momento che le annotazioni di tipo di Dart sono troppo lente per consentire l'analisi affidabile dei tipi statici da esse e la semantica runtime non consente di prendere sul serio le annotazioni del tipo). Se cerchi documenti su "inferenza di tipo concreto", credo che troverai una parte della letteratura che stai cercando. Inoltre, qualsiasi riferimento sulla compilazione del modulo SSA (e il codice gen di quel modulo, presumo) dovrebbe aiutare.