Первая общедоступная информация об этом языке программирования появилась 12 сентября 2011 года на конференции разработчиков Goto[3]. 10 октября 2011 была проведена официальная презентация языка Google Dart.
Один из разработчиков языка Марк Миллер (Mark S. Miller) во внутренней переписке в компании Google в 2010 году написал, что JavaScript «имеет фундаментальные изъяны, которые невозможно исправить» и назвал это одной из причин появления языка Dart[4].
Задачи, поставленные перед разработчиками языка:[5]
Сделать язык похожим на существующие для упрощения обучения
Высокая производительность получаемых программ как в браузерах, так и в иных окружениях, начиная от смартфонов и заканчивая серверами.
Изначально было предложено два способа исполнения Dart-программ: с использованием виртуальной машины (в поддерживающих язык браузерах) или с промежуточной трансляцией в javascript (универсальный)[5][6].
15 ноября 2013 года Google выпустили первую стабильную версию своего языка программирования — Dart SDK 1.0 .
4 июля 2014 года ECMA одобрили первую редакцию стандарта языка, стандарт получил название ECMA-408[7].
В феврале 2018 года Google выпустила обновленную версию языка — Dart 2.0[8][9]. В язык добавлена строгая статическая типизация и новый компилятор для разработки dartdevc.
Пример
Простое приложение, выводящее надпись Hello, world!:
// Подключить библиотеку math для доступа к функции sqrt()import'dart:math'asmath;// Создание класса PointclassPoint{// Переменные, объявленные как final, не могут быть изменены после инициализации// Объявление двух числовых полейfinalnumx,y;// Конструктор c "синтаксическим сахаром", инициализирующий поля объекта значениями аргументовPoint(this.x,this.y);// Именованный конструктор со списком инициализации по умолчаниюPoint.origin():x=0,y=0;// Метод классаnumdistanceTo(Pointother){vardx=x-other.x;vardy=y-other.y;returnmath.sqrt(dx*dx+dy*dy);}}// Все программы на Dart начинают выполнение с функции main()main(){// Создание двух объектов класса Pointvarp1=newPoint(10,10);varp2=newPoint.origin();vardistance=p1.distanceTo(p2);print(distance);}