Парадигма | Мультипарадигма : функциональный, императивный, объектно-ориентированный, отражающий |
---|---|
Разработан | Ларсом Баком и Каспером Лундом |
разработчиком | |
Впервые появился | 10 октября 2011 г. ; 9 лет назад (10.10.2011) |
Стабильный выпуск | 2.10.3 / 27 октября 2020 г.; 5 дней назад (27.10.2020) |
Предварительный выпуск | 2.11.0-213.5.beta / 29 октября 2020 г.; 3 дня назад (2020-10-29) |
Дисциплина набора текста | 1.x: Необязательно. 2.x: Предполагаемый (статический, strong ) |
Платформа | Кросс-платформенность |
OS | Кросс-платформенность |
Лицензия | BSD |
Расширения имен файлов | .dart |
Веб-сайт | dart.dev |
Основные реализации | |
Dart VM, dart2native, dart2js, DDC, Flutter | |
Под влиянием | |
C, C#, Erlang, Java, JavaScript, Kotlin, Ruby, Smalltalk, Strongtalk, TypeScript |
Dart оптимизированный для клиентов язык программирования для приложений на нескольких платформах. Он разработан Google и используется для создания мобильных, настольных, серверных и веб-приложений.
Dart - это объектно-ориентированный, на основе классов, язык со сборкой мусора с синтаксисом C в стиле . Dart может компилировать либо в собственный код, либо в JavaScript. Он поддерживает интерфейсы, миксины, абстрактные классы, reified generics и определение типа.
Дарт был представлен на конференции GOTO в Орхусе, Дания, 10–12 октября 2011 года. Основателем проекта является Ларс Бак и Каспер Лунд. Dart 1.0 был выпущен 14 ноября 2013 года.
Первоначально Dart был встречен неоднозначно, и инициатива Dart была раскритикована некоторыми за фрагментацию Интернета из-за первоначальных планов по включению виртуальной машины Dart в Chrome. Эти планы были отброшены в 2015 году с выпуском Dart 1.9, чтобы вместо этого сосредоточиться на компиляции Dart в JavaScript.
В августе 2018 года был выпущен Dart 2.0 с изменениями языка, включая систему типов звука.
Dart 2.6 представил новое расширение, dart2native. Эта функция расширяет встроенную компиляцию для настольных платформ Linux, macOS и Windows. Раньше разработчики могли создавать новые инструменты только на устройствах Android или iOS. Более того, с этим расширением становится возможным составить программу Dart в автономные исполняемые файлы. Таким образом, по словам представителей компании, сейчас не обязательно устанавливать Dart SDK, автономные исполняемые файлы теперь могут запускаться через несколько секунд. Новое расширение также интегрировано с инструментарием Flutter, что делает возможным использование компилятора на небольших сервисах (например, с поддержкой серверной части).
Ecma International сформировала технический комитет TC52 работает над стандартизацией Dart, и, поскольку Dart может быть скомпилирован в стандартный JavaScript, он эффективно работает в любом современном браузере. Ecma International утвердила первую редакцию спецификации языка Dart в июле 2014 года на своей 107-й Генеральной ассамблее и вторую редакцию в декабре 2014 года. Последняя спецификация доступна по адресу Спецификация языка Dart.
Там есть четыре способа запустить код Dart:
Для обеспечения параллелизма Dart использует изоляты, которые являются независимыми рабочими, которые не разделяют память, а вместо этого используют передачу сообщений. Это похоже на процессы Erlang (см. Также Модель актора ). Каждая программа Dart использует как минимум один изолятор, который является основным изолятором. Начиная с Dart 2 веб-платформа Dart больше не поддерживает изоляцию и предлагает разработчикам использовать вместо нее Web Workers.
Snapshots являются основной частью Dart VM. Снимки - это файлы, в которых хранятся объекты и другие данные времени выполнения.
Google представил Flutter для разработки собственных мобильных приложений на Android и iOS. Flutter - это SDK для мобильных приложений с фреймворком, виджетами и инструментами, который дает разработчикам возможность создавать и развертывать мобильные приложения, написанные на Dart. Flutter работает с Firebase и другими SDK мобильных приложений и имеет открытый исходный код.
Dart SDK содержит два компилятора Dart-to-JavaScript. Во время разработки dartdevc поддерживает быстрые циклы обновления. Для окончательной версии приложения dart2js создает развертываемый JavaScript.
Первым компилятором, генерирующим JavaScript из кода Dart, был dartc, но он устарел. Вторым компилятором Dart-to-JavaScript был Frog. Он был написан на Dart, но никогда не реализовывал полную семантику языка. Третьим компилятором Dart-to-JavaScript был dart2js. Dart2js, являющийся развитием более ранних компиляторов, написан на Dart и предназначен для реализации полной спецификации и семантики языка Dart.
28 марта 2013 года команда Dart опубликовала в своем блоге обновление, касающееся кода Dart, скомпилированного в JavaScript с помощью компилятора dart2js, заявив, что теперь он работает быстрее, чем рукописный JavaScript на движке JavaScript V8 Chrome для теста DeltaBlue..
18 ноября 2011 года Google выпустила Dart Editor, программу с открытым исходным кодом, основанную на компонентах Eclipse, для macOS, Операционные системы на основе Windows и Linux . Редактор поддерживает подсветку синтаксиса, завершение кода, компиляцию JavaScript, запуск веб-приложений и серверных приложений Dart, а также отладку.
13 августа 2012 года Google объявил о выпуске плагин Eclipse для разработки Dart.
18 апреля 2015 года Google объявил об отказе от редактора Dart Editor в пользу интегрированной среды разработки JetBrains (IDE), которая теперь является рекомендуемой IDE для этого языка. Плагин Dart доступен для IntelliJ IDEA, PyCharm, PhpStorm и WebStorm. Этот плагин поддерживает множество функций, таких как подсветка синтаксиса, автозавершение кода, анализ, рефакторинг, отладка и многое другое. Для редакторов доступны другие плагины, такие как Sublime Text, Emacs и Visual Studio Code.
В 2013 году команда Chromium начала работать в среде разработки с открытым исходным кодом Chrome App с многоразовой библиотекой виджетов GUI под кодовым названием Spark. Позже проект был переименован в Chrome Dev Editor. Он был построен на Dart и содержал Spark, работающий на Polymer.
В июне 2015 года Google передал проект CDE на GitHub как проект бесплатного программного обеспечения и прекратил активные инвестиции в CDE. По состоянию на апрель 2019 года Chrome Dev Editor больше не находится в активной разработке.
Команда Dart создала DartPad в начале 2015 года, чтобы упростить использование Dart. Это полностью интерактивный редактор, в котором пользователи могут экспериментировать с интерфейсами программирования приложений Dart (API) и запускать код Dart. Он обеспечивает выделение синтаксиса, анализ кода, завершение кода, документацию, а также редактирование HTML и CSS.
В 2013 году Джон МакКатчан объявил, что он создал эффективный интерфейс для одной инструкции, нескольких data (SIMD ) наборы инструкций для Dart.
Интерфейс состоит из двух типов:
Экземпляры эти типы неизменяемы и в оптимизированном коде отображаются непосредственно в регистры SIMD. Операции, выраженные в Dart, обычно компилируются в одну инструкцию без дополнительных затрат. Это похоже на C и C++ встроенные функции. Тесты для умножения матриц 4 × 4 , трехмерного преобразования вершин и визуализации набора Мандельброта показывают почти 400% ускорение по сравнению со скалярным кодом, написанным на Dart.
void main () {print ('Hello World!'); }
Функция для вычисления n-го числа Фибоначчи :
int fib (int n) =>(n>2)? (фиб (п - 1) + фиб (п - 2)): 1; // Реализация функции Фибоначчи с условным оператором в Dart // Этот код читается как: // задано целое число n, // если n>2, вернуть fib (n - 1) + fib (n - 2); // в противном случае в качестве результата вернуть целое число 1 void main () {print ('fib (20) = $ {fib (20)}'); }
Простой класс:
// Импортируем математическую библиотеку, чтобы получить доступ к функции sqrt. // Импортируется с `math` в качестве имени, поэтому доступ должен использовать` math.` в качестве префикса. импортировать dart: math как math; // Создаем класс для Point. class Point {// Окончательные переменные нельзя изменить после их назначения. // Объявление двух переменных экземпляра. конечное число x, y; // Конструктор с синтаксическим сахаром для установки переменных экземпляра. // У конструктора есть два обязательных параметра. Point (this.x, this.y); // Именованный конструктор со списком инициализаторов. Point.origin (): х = 0, у = 0; // Метод. num distanceTo (Другой пункт) {var dx = x - other.x; var dy = y - other.y; вернуть math.sqrt (dx * dx + dy * dy); } // Пример "геттера". // Действует так же, как конечная переменная, но вычисляется при каждом доступе. число получить величину =>math.sqrt (x * x + y * y); // Пример перегрузки оператора Point operator + (Point other) =>Point (x + other.x, y + other.y); // Когда вы создаете экземпляр класса, такого как Point in Dart 2+, new является // необязательным словом} // Все программы Dart начинаются с main (). void main () {// Создание точечных объектов. var p1 = Point (10, 10); print (p1.magnitude); var p2 = Point.origin (); var distance = p1.distanceTo (p2); печать (расстояние); }
Dart является потомком языковой семьи ALGOL, наряду с C, Java, C #, JavaScript и другими.
Синтаксис каскадного метода, который обеспечивает синтаксическое сокращение для вызова нескольких методов один за другим для одного и того же объекта, заимствован из Smalltalk.
На миксины Dart повлияли Strongtalk и Ruby.
. Dart использует изоляты в качестве средства параллелизма и безопасности при структурировании приложений. Концепция Isolate основана на модели Actor, которая наиболее широко реализована в Erlang.
Mirror API для выполнения управляемого и безопасного отражения был впервые предложен в статье Гиладом Браха (который является членом команды Dart) и Дэвид Ангар и изначально реализован в Self.