Являются ли экземпляры класса, созданные с помощью конструктора const
, более оптимизированными, чем обычные экземпляры (созданные с помощью конструктора new
) при компиляции в JavaScript с помощью dart2js?
Лучше ли dart2js оптимизирует константные объекты?
Ответы (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());
}
Вот как 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
Пожалуйста, включите соответствующую часть разницы в свой ответ; срок действия вашей ссылки истекает через год.
- person Ry-♦; 16.07.2014
Это то, что мы (команда dart2js) должны исправить. Константные объекты всегда должны быть не хуже неконстантных.
- person Florian Loitsch; 16.07.2014