¿Cómo se ve la salida de Dart?

Dart, el nuevo lenguaje web de Google, dice que admite la salida a JavaScript.

¿Cómo se ve una conversión simple?

main() { print('Hello, Dart!'); } 

Cuando se comstack con dart2js (desde 2013-04-26) (vea la nota en la parte inferior) se convierte en:

 // Generated by dart2js, the Dart to JavaScript compiler. // The code supports the following hooks: // dartPrint(message) - if this function is defined it is called // instead of the Dart [print] method. // dartMainRunner(main) - if this function is defined, the Dart [main] // method will not be invoked directly. // Instead, a closure that will invoke [main] is // passed to [dartMainRunner]. function Isolate() {} init(); var $ = Isolate.$isolateProperties; // Bound closures $.Primitives_printString = function(string) { if (typeof dartPrint == "function") { dartPrint(string); return; } if (typeof window == "object") { if (typeof console == "object") console.log(string); return; } if (typeof print == "function") { print(string); return; } throw "Unable to print message: " + String(string); }; $.main = function() { $.Primitives_printString("Hello, Dart!"); }; $.String = {builtin$cls: "String"}; var $ = null; Isolate = Isolate.$finishIsolateConstructor(Isolate); var $ = new Isolate(); // BEGIN invoke [main]. if (typeof document !== "undefined" && document.readyState !== "complete") { document.addEventListener("readystatechange", function () { if (document.readyState == "complete") { if (typeof dartMainRunner === "function") { dartMainRunner(function() { $.main(); }); } else { $.main(); } } }, false); } else { if (typeof dartMainRunner === "function") { dartMainRunner(function() { $.main(); }); } else { $.main(); } } // END invoke [main]. function init() { Isolate.$isolateProperties = {}; Isolate.$finishIsolateConstructor = function(oldIsolate) { var isolateProperties = oldIsolate.$isolateProperties; isolateProperties.$currentScript = typeof document == "object" ? document.currentScript || document.scripts[document.scripts.length - 1] : null; var isolatePrototype = oldIsolate.prototype; var str = "{\n"; str += "var properties = Isolate.$isolateProperties;\n"; var hasOwnProperty = Object.prototype.hasOwnProperty; for (var staticName in isolateProperties) { if (hasOwnProperty.call(isolateProperties, staticName)) { str += "this." + staticName + "= properties." + staticName + ";\n"; } } str += "}\n"; var newIsolate = new Function(str); newIsolate.prototype = isolatePrototype; isolatePrototype.constructor = newIsolate; newIsolate.$isolateProperties = isolateProperties; return newIsolate; }; } //@ sourceMappingURL=out.js.map 

Nota para la posteridad: la respuesta original a esta pregunta se ha modificado para reflejar el estado actual de las cosas.

En 2012-05-12 la salida del dardo para Hello World fue de 18,718 caracteres.

El 2012-08-29 la salida fue de 1531 caracteres.

En 2013-04-26, la salida fue de 2642 caracteres.

dart2js puede minificar el código. Aquí hay un ejemplo (a partir del 2013-04-26)

 // Generated by dart2js, the Dart to JavaScript compiler. function I(){} init() var $=Ip $.ib=function(a){if(typeof dartPrint=="function"){dartPrint(a) return}if(typeof window=="object"){if(typeof console=="object")console.log(a) return}if(typeof print=="function"){print(a) return}throw "Unable to print message: " + String(a)} $.E2=function(){$.ib("Hello, Dart!")} $.qU={builtin$cls:"qU"} var $=null I = I.$finishIsolateConstructor(I) var $=new I() if (typeof document !== "undefined" && document.readyState !== "complete") { document.addEventListener("readystatechange", function () { if (document.readyState == "complete") { if (typeof dartMainRunner === "function") { dartMainRunner(function() { $.E2(); }); } else { $.E2(); } } }, false); } else { if (typeof dartMainRunner === "function") { dartMainRunner(function() { $.E2(); }); } else { $.E2(); } } function init(){Ip={} I.$finishIsolateConstructor=function(a){var z=ap z.$currentScript=typeof document=="object"?document.currentScript||document.scripts[document.scripts.length-1]:null var y=a.prototype var x="{\n" x+="var properties = Ip;\n" var w=Object.prototype.hasOwnProperty for(var v in z){if(w.call(z,v)){x+="this."+v+"= properties."+v+";\n"}}x+="}\n" var u=new Function(x) u.prototype=y y.constructor=u up=z return u}}//@ sourceMappingURL=out.js.map 

El 2013-04-26, el código modificado fue de 1386 caracteres.

La salida del comstackdor Dart-> JavaScript es un objective mobile. El primer lanzamiento (vista previa técnica) no causó muchos temblores de tree y, por lo tanto, era bastante grande. El nuevo comstackdor de rana (experimental) es mucho mejor en este sentido ( el blog de David Chandler ), pero espero que DartC también mejore considerablemente.