2012-05-12 15 views
5

Dart se ejecuta en su propia máquina virtual de Dart, pero puede compilarla con JavaScript optimizado moderno. pero como funciona? ¿Hay algún artículo o documento en línea que explique ese proceso?¿Cómo funciona el compilador dart javascript (dart2js)?

Me pregunto si ese es un elemento fácil de emparejar directo al elemento, solo lleva mucho tiempo desarrollarlo, procesarlo o hay algunos elementos/aspectos de Dart que no se pudieron compilar en JavaScript.

http://www.dartlang.org

EDIT: THX para sus 2 respuestas. El punto es que le dije a un colega mío acerca de dardo y ese dardo se puede compilar a JavaScript. Aceptó que podría compilarse en JavaScript, pero daría como resultado el código mumbojumba y solo funcionaría para cosas simples. Al final dijo: '' 'ok, explícame. ¿Cómo va a funcionar esta compilación en un código no trivial? '' '

Es por eso que estoy preguntando. Esperaba que hubiera algún material en línea que pudiera vincularlo.

Respuesta

4

El editor de Dart ahora compilará su código de Dart a JavaScript con dart2js.

En cuanto a la segunda parte de su pregunta, las bibliotecas dart: io son solo para el servidor/línea de comandos, por lo que no se pueden compilar con dart2js.

que se dan cuenta ahora creo que está pidiendo "¿cómo el diseño de los ingenieros y poner en práctica el compilador dart2js", no "¿cómo se ejecuta dart2js"

Aquí hay un blog sobre el anuncio de dart2js: http://news.dartlang.org/2012/05/new-dart-to-javascript-compiler-ready.html

Kasper Lund, uno de los ingenieros, agrega "Para el técnico interesado, puedo decirle que el nuevo compilador usa una representación interna en forma SSA (asignación única estática) y que el compilador se implementa completamente en Dart."

El código fuente está en http://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Flib%2Fcompiler%2Fimplementation

1

¿Existen artículos o documentos en línea que explican ese proceso?

El front-end es el analizador léxico rodado a mano clásico y el analizador de descenso recursivo. El back-end es, creo, haciendo una gran cantidad de inferencias tipo (dado que las anotaciones tipo Dart son demasiado flojas para permitirles hacer un análisis de tipo estático confiable, y la semántica de tiempo de ejecución no le permite tomar las anotaciones tipo seriamente). Si buscas artículos sobre "inferencia de tipo concreto", creo que encontrarás algo de la literatura que estás buscando. Además, cualquier referencia sobre cómo compilar a formato SSA (y hacer código gen a partir de esa forma, supongo) debería ayudar.