Лучше ли dart2js оптимизирует константные объекты?

Являются ли экземпляры класса, созданные с помощью конструктора const, более оптимизированными, чем обычные экземпляры (созданные с помощью конструктора new) при компиляции в JavaScript с помощью dart2js?


person JAre    schedule 16.07.2014    source источник


Ответы (1)


Вот 2 реализации кортежа:

С постоянным конструктором:

class Tuple{
  final _1, _2;
  foo()=> _1 + _2;
  const Tuple(this._1,this._2);
}

void main() {
  var a = const Tuple(10,20);
  var b = const Tuple(10,20);
  print(a);
  print(b);
  print(a.foo());
}

С новым конструктором:

class Tuple{
  final _1, _2;
  foo()=> _1 + _2;
  Tuple(this._1,this._2);
}
void main() {
  var a = new Tuple(10,20);
  var b = new Tuple(10,20);
  print(a);
  print(b);
  print(a.foo());
}

сравнение результатов dart2js

Вот как new Tuple выглядит в выводе:

main: function() {
    P.print(new S.Tuple(10, 20));
    P.print(new S.Tuple(10, 20));
    P.print(30);
}

const Tuple создается только один раз C.Tuple_10_20 = new S.Tuple(10, 20); и используется следующим образом:

main: function() {
    P.print(C.Tuple_10_20);
    P.print(C.Tuple_10_20);
    P.print(C.Tuple_10_20._1 + C.Tuple_10_20._2);
}

Обратите внимание, что в случае new Tuple вызов функции был заменен литералом возвращаемого значения, но этого не произошло для вывода const Tuple.

person JAre    schedule 16.07.2014
comment
Пожалуйста, включите соответствующую часть разницы в свой ответ; срок действия вашей ссылки истекает через год. - person Ry-♦; 16.07.2014
comment
Это то, что мы (команда dart2js) должны исправить. Константные объекты всегда должны быть не хуже неконстантных. - person Florian Loitsch; 16.07.2014