Почему Дарт компилирует константы времени?

У Дарта есть понятие констант времени компиляции. Константа времени компиляции анализируется и создается во время компиляции и канонизируется.

Например, вот конструктор const для Point:

class Point {
  final num x, y;
  const Point(this.x, this.y);
}

И вот как вы его используете:

main() {
  var p1 = const Point(0, 0);
  var p2 = const Point(0, 0);
  print(p1 == p2); // true
  print(p1 === p2); // true
}

Это неочевидная функция, которая, по-видимому, не параллельна функциям других динамических языков. Существуют ограничения на объекты const, так как все поля должны быть окончательными и должны иметь конструктор const.

Почему у Дарта есть константы времени компиляции?

Ответ 1

Из списка рассылки Флориан Лоич пишет:

Свойство canonicalization констант компиляции - это хорошо, но не главная причина их иметь. Реальная польза от времени компиляции константы заключаются в том, что они не допускают произвольного исполнения при и поэтому их можно использовать в тех местах, где мы не хотим код для выполнения. Например, инициализаторы статических переменных были первоначально ограничивались константами времени компиляции, чтобы избежать на высшем уровне. Короче говоря, они обеспечивают, чтобы программа начиналась с "главное", а не где-то еще.