Soru Dart'ın çıkışı neye benziyor?


Google’ın yeni web dili olan Dart, JavaScript’e çıktı almayı desteklediğini söylüyor.

Basit bir dönüşüm neye benziyor?


32
2017-10-10 16:00


Menşei


"Dart'tan JS'ye nasıl dönüşür?" Derken mi, "Yayılan JS neye benziyor?" Demek istiyor musunuz? Her iki durumda da, SSS veya Dokümantasyonlarını okumak muhtemelen burada sormaktan daha etkilidir. - g.d.d.c
yayıldıktan sonra neye benziyor. - Daniel A. White
@ g.d.d.c - gerçekte neye benzediğine dair bir örnek yoktur. - Daniel A. White


Cevaplar:


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

Dart2js ile derlendiğinde (2013-04-26 itibariyle) (aşağıya bakın notu) dönüştürülür:

// 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

Kuşak için not: Bu sorunun orijinal cevabı, mevcut durumu yansıtacak şekilde değiştirildi.

2012-05-12'de Hello World'ün dart çıkışı 18.718 karakterdir.

2012-08-29'da çıktı 1531 karakterdi.

2013-04-26'da çıktı 2642 karakterdir.

dart2js kodu küçültebilir. İşte bir örnek (2013-04-26 itibariyle)

// Generated by dart2js, the Dart to JavaScript compiler.
function I(){}
init()
var $=I.p
$.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(){I.p={}
I.$finishIsolateConstructor=function(a){var z=a.p
z.$currentScript=typeof document=="object"?document.currentScript||document.scripts[document.scripts.length-1]:null
var y=a.prototype
var x="{\n"
x+="var properties = I.p;\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
u.p=z
return u}}//@ sourceMappingURL=out.js.map

2013-04-26'da, küçültülmüş kod 1386 karakterdi.


46
2017-10-10 19:17



Akıl boggles. "JavaScript’e Dönüştürme" dedikleri zaman, "JavaScript’e program ile yazılmış bir Dart çalışma zamanı eklensin mi"? - Quentin
Oldukça önizleme olduğu için çok fazla bloat olduğundan eminim. Daha sonra optimize etmek için daha iyi olduğu düşüncesini takip ediyorlar. Bu nedenle, çıktıların yalnızca gerekli olanı içerecek şekilde küçültülmesini beklerdim. Her ne kadar onlar (ve) bir şey gibi (-) fly-in-fly kodu için çok şey dahil etmek istiyorlar merak ediyorum. - Marshall
"Bunu tüm uğrumuz için başarılı olmak istiyorum" - JavaScript gerçekten o kırık? Bundan kurtulalım mı? Var mı temel kusurlar daha önce Google tarafından belirtilen aslında bu temel? Buna inanmakta zorlanıyorum. - Ryan Kinal
Dart sonunda JS'den daha iyi / daha küçük olacaktır. Yine de orada değil. JS'de jQuery gibi bir kitaplık kullanmak isterseniz, yalnızca birkaç işlevden yararlanıyor olsanız bile tüm kitaplığı eklemeniz gerekir. Dart, kullanımı analiz edebilmek ve kullandığınız tüm kütüphanelerden ihtiyacınız olan şeyi içeren tüm kodlarınızdan bir paket oluşturabilmek için daha iyi olacaktır. En iyi JS kompresörleri bile, bir işin iyi bir şekilde yapılabilmesi için kodunuzu anlama düzeyine sahip olmayacaktır. Yani sadece sabırlı ol. :-) - Eric J. Smith
Bu cevabı 2012-05-12 tarihinde gerçeği yansıtmak için yeni düzenledim - Seth Ladd


Dart-> JavaScript derleyicisinin çıktısı hareketli bir hedeftir. İlk sürüm (teknik önizleme) çok fazla ağaç sallamadı ve bu yüzden oldukça büyüktü. Yeni (deneysel) kurbağa derleyicisi bu açıdan çok daha iyidir (David Chandler'ın blogu), ama DartC'nin de önemli ölçüde iyileşmesini bekliyorum.


10
2017-11-05 02:00



Bir güncelleme olarak, kurbağa dart2js ile değiştirilecek ve dartc artık sadece bir analizcidir (artık bir derleyici değil). - Seth Ladd