Dart (язык программирования) - Dart (programming language) - Wikipedia

Дротик
Язык программирования дартс logo.svg
ПарадигмаМультипарадигма: функциональный, императив, объектно-ориентированный, отражающий[1]
РазработаноЛарс Бак и Каспер Лунд
РазработчикGoogle
Впервые появился10 октября 2011 г.; 9 лет назад (2011-10-10)[2]
Стабильный выпуск
2.10.4 / 11 ноября 2020 г.; 42 дней назад (2020-11-11)[3]
Предварительный выпуск
2.12.0-29.1.beta / 13 ноября 2020 г.; 40 дней назад (2020-11-13)[3]
Печатная дисциплина1.x: Необязательный
2.x: Предполагаемый[4] (статический, сильный )
ПлатформаКроссплатформенность
Операционные системыКроссплатформенность
ЛицензияBSD
Расширения имени файла.dart
Интернет сайтдротик.dev
Основной реализации
Dart VM, dart2native, dart2js, DDC, Флаттер
Под влиянием
C, C ++, C #, Erlang, Ява, JavaScript, Котлин,[5] Рубин, Болтовня, Strongtalk,[6] Машинопись[7]

Дротик оптимизирован для клиентов[8] язык программирования для Программы на нескольких платформах. Он разработан Google и используется для создания мобильных, настольных, серверных и веб-приложений.[9]

Дротик - это объектно-ориентированный, основанный на классе, сборщик мусора язык с C -стиль синтаксис.[10] Дротик может компилировать либо собственный код или же JavaScript. Он поддерживает интерфейсы, миксины, абстрактные классы, овеществленный дженерики, и вывод типа.[11]

История

Дарт был представлен на конференции GOTO в Орхус, Дания, 10–12 октября 2011 г.[12] Основателем проекта является Ларс Бак и Каспер Лунд.[13] Dart 1.0 был выпущен 14 ноября 2013 года.[14]

Первоначально Dart был встречен неоднозначно, и инициатива Dart была раскритикована некоторыми за фрагментацию сети из-за первоначальных планов по включению виртуальной машины Dart в Chrome. Эти планы были отброшены в 2015 году с выпуском Dart 1.9, чтобы вместо этого сосредоточиться на компиляции Dart в JavaScript.[15]

В августе 2018 года был выпущен Dart 2.0 с изменениями языка, включая систему типов звука.[16]

Dart 2.6 представил новое расширение, dart2native. Эта функция расширяет встроенную компиляцию для настольных платформ Linux, macOS и Windows. Раньше разработчики могли создавать новые инструменты только с помощью устройств Android или iOS. Более того, с этим расширением становится возможным составить программу Dart в автономные исполняемые файлы. Таким образом, по словам представителей компании, сейчас не обязательно устанавливать Dart SDK, автономные исполняемые файлы теперь могут запускаться через несколько секунд. Новое расширение также интегрировано с Флаттер инструментарий, что позволяет использовать компилятор на небольших сервисах (например, с поддержкой backend).[17][18]

Стандартизация

Ecma International сформировал технический комитет TC52[19] чтобы работать над стандартизацией Dart, и поскольку Dart может быть скомпилирован в стандартный JavaScript, он эффективно работает в любом современном браузере. Ecma International утвердила первую редакцию спецификации языка Dart в июле 2014 года на 107-й Генеральной Ассамблее,[20] и второе издание в декабре 2014 г.[21] Последняя спецификация доступна на сайте Спецификация языка Dart.

использование

Есть четыре способа запустить код Dart:

Скомпилирован как JavaScript
Бежать в мейнстриме веб-браузеры, Дарт полагается на компилятор исходного кода к JavaScript. Согласно сайту проекта, Dart был «разработан таким образом, чтобы было легко писать инструменты разработки, хорошо подходящим для разработки современных приложений и способным к высокопроизводительной реализации».[22] При запуске кода Dart в веб-браузере код предварительно компилируется в JavaScript с помощью компилятора dart2js. Скомпилированный как JavaScript, код Dart совместим со всеми основными браузерами, и браузеры не должны использовать Dart. Благодаря оптимизации скомпилированного вывода JavaScript во избежание дорогостоящих проверок и операций, код, написанный на Dart, в некоторых случаях может работать быстрее, чем эквивалентный код, написанный вручную с использованием идиом JavaScript.[23]
Автономный
Дротик комплект для разработки программного обеспечения (SDK) поставляется с автономной виртуальной машиной Dart, позволяющей запускать код Dart в Интерфейс командной строки среда. Поскольку языковые инструменты, включенные в Dart SDK, в основном написаны на Dart, автономная виртуальная машина Dart является важной частью SDK. Эти инструменты включают компилятор dart2js и менеджер пакетов называется паб. Dart поставляется с полным стандартная библиотека позволяя пользователям писать полностью рабочие системные приложения, такие как пользовательские веб-серверы.[24]
Скомпилировано заранее
Код дротика может быть AOT-скомпилированный в машинный код (собственные наборы инструкций). Приложения, созданные с Флаттер SDK мобильного приложения, созданный с помощью Dart, развертываются в магазинах приложений как код Dart, скомпилированный с помощью AOT.[25]
Родные
Dart 2.6 с компилятором dart2native для компиляции в автономный собственный код исполняемых файлов. До Dart 2.6 эта функция предоставляла эту возможность только на iOS и Android мобильные устройства через Флаттер.[26]

Изолирует

Для достижения параллелизма Dart использует изоляты, которые представляют собой независимые рабочие процессы, которые не разделяют память, а вместо этого используют передачу сообщений. Это похоже на Erlang процессы (см. также Актерская модель ). Каждая программа Dart использует как минимум один изолятор, который является основным изолятором. Начиная с Dart 2 веб-платформа Dart больше не поддерживает изоляты и предлагает разработчикам использовать Веб-воркеры вместо.[27]

Снимки

Снимки - это основная часть виртуальной машины Dart. Снимки - это файлы, в которых хранятся объекты и другие данные времени выполнения.

Снимки скриптов
Программы Dart могут быть скомпилированы в файлы моментальных снимков. Эти файлы содержат весь программный код и зависимости, подготовленные и готовые к выполнению. Это позволяет быстро запускать.
Полные снимки
Основные библиотеки Dart могут быть скомпилированы в файл моментального снимка, что позволяет быстро загружать библиотеки. В большинстве стандартных дистрибутивов основной виртуальной машины Dart есть готовый моментальный снимок для основных библиотек, который загружается во время выполнения.
Снимки объектов
Дротик очень асинхронный язык. При этом он использует изоляты для параллелизм. Поскольку это воркеры, которые передают сообщения, ему нужен способ сериализовать сообщение. Это делается с помощью снимок, который создается из данного объекта, а затем передается другому изоляту для десериализации.

Родные мобильные приложения

Google представил Флаттер для разработки собственных мобильных приложений на обоих Android и iOS.[28] Flutter - это SDK для мобильных приложений с фреймворком, виджетами и инструментами, который дает разработчикам возможность создавать и развертывать мобильные приложения, написанные на Dart. Flutter работает с Firebase и других SDK для мобильных приложений с открытым исходным кодом.

Компиляция в JavaScript

Dart SDK содержит два компилятора Dart-to-JavaScript. Во время разработки dartdevc поддерживает быстрые циклы обновления. Для окончательной версии приложения dart2js создает развертываемый JavaScript.[29]

Первым компилятором, который генерировал JavaScript из кода Dart, был dartc, но он устарел. Вторым компилятором Dart-to-JavaScript был Frog. Он был написан на Dart, но никогда не реализовывал полную семантику языка. Третий компилятор Dart-to-JavaScript был dart2js. Развитие более ранних компиляторов, dart2js написано на Dart и предназначено для реализации полной спецификации и семантики языка Dart.

28 марта 2013 года команда Dart опубликовала в своем блоге обновление кода Dart, скомпилированного в JavaScript с помощью компилятора dart2js,[30] заявив, что теперь он работает быстрее, чем рукописный JavaScript на движке JavaScript V8 Chrome для теста DeltaBlue.[31]

Редакторы

18 ноября 2011 года Google выпустила Dart Editor, программу с открытым исходным кодом, основанную на Затмение компоненты, для macOS, Windows, и Linux -основан операционные системы.[32] Редактор поддерживает подсветка синтаксиса, завершение кода, Компиляция JavaScript, запуск веб-приложений и серверных приложений Dart, а также отладка.

13 августа 2012 года Google объявил о выпуске плагина Eclipse для разработки Dart.[33]

18 апреля 2015 года Google объявил, что редактор Dart будет удален в пользу JetBrains интегрированная среда развития (IDE),[34] которая теперь является рекомендуемой IDE для этого языка. Плагин Dart[35] доступен для IntelliJ IDEA, PyCharm, PhpStorm и WebStorm. Этот плагин поддерживает множество функций, таких как подсветка синтаксиса, автозавершение кода, анализ, рефакторинг, отладка и многое другое. Другие плагины доступны для редакторов, например Возвышенный текст, Атом, Emacs, Vim и Код Visual Studio.[36]

Редактор Chrome Dev

В 2013 году команда Chromium начала работу над открытым исходным кодом, Приложение Chrome -среда разработки с многоразовой библиотекой Виджеты GUI под кодовым названием Spark.[37] Позже проект был переименован в Chrome Dev Editor.[38] Он был построен на Dart и содержал Spark, работающий на Polymer.[39]

В июне 2015 года Google передал проект CDE на GitHub как проект бесплатного программного обеспечения и прекратил активные инвестиции в CDE.[40] По состоянию на апрель 2019 года Chrome Dev Editor больше не находится в активной разработке.[41]

DartPad

Команда Dart создала DartPad в начале 2015 года, чтобы упростить использование Dart. Это полностью онлайн-редактор, в котором пользователи могут экспериментировать с Dart. интерфейсы прикладного программирования (API) и запустите код Dart. Он обеспечивает выделение синтаксиса, анализ кода, автозавершение кода, документацию и редактирование HTML и CSS.[42]

SIMD

В 2013 году Джон Маккатчан объявил[43] что он создал эффективный интерфейс для одной инструкции, нескольких данных (SIMD ) наборы инструкций для Dart.

Интерфейс состоит из двух типов:

  • Float 32 × 4, 4 × значения с плавающей запятой одинарной точности
  • Uint32 × 4, 4 × 32-битные целые числа без знака

Экземпляры этих типов неизменяемы и в оптимизированном коде отображаются непосредственно в регистры SIMD. Операции, выраженные в Dart, обычно компилируются в одну инструкцию без дополнительных затрат. Это похоже на C и C ++ внутренняя сущность. Тесты для 4х4 матричное умножение, 3D преобразование вершин, и Набор Мандельброта Визуализация показывает ускорение почти на 400% по сравнению со скалярным кодом, написанным на Dart.

Пример

А Привет, мир! пример:

пустота главный() {  Распечатать('Привет, мир!');}

Функция для вычисления n-го Число Фибоначчи:

int выдумать(int п) => (п > 2) ? (выдумать(п - 1) + выдумать(п - 2)) : 1;// Реализация функции Фибоначчи с условным оператором в Dart// Этот код читается как:// задано целое число n,// если n> 2, возвращаем fib (n - 1) + fib (n - 2); // в противном случае в качестве результата вернуть целое число 1пустота главный() {  Распечатать('fib (20) = ${выдумать(20)}');}

Простой класс:

// Импортируем математическую библиотеку, чтобы получить доступ к функции sqrt.// Импортируется с `math` в качестве имени, поэтому доступ должен использовать` math.` в качестве префикса.импорт 'дротик: математика' в качестве математика;// Создаем класс для Point.учебный класс Точка {  // Окончательные переменные нельзя изменить после их назначения.  // Объявление двух переменных экземпляра.  окончательный число Икс, у;  // Конструктор с синтаксическим сахаром для установки переменных экземпляра.  // У конструктора есть два обязательных параметра.  Точка(это.Икс, это.у);  // Именованный конструктор со списком инициализаторов.  Точка.источник()      : Икс = 0,        у = 0;  // Метод.  число distanceTo(Точка Другой) {    вар dx = Икс - Другой.Икс;    вар dy = у - Другой.у;    возвращаться математика.sqrt(dx * dx + dy * dy);  }    // Пример "геттера".  // Действует так же, как конечная переменная, но вычисляется при каждом доступе.  число получать величина => математика.sqrt(Икс * Икс + у * у);  // Пример перегрузки оператора  Точка оператор +(Точка Другой) => Точка(Икс + Другой.Икс, у + Другой.у);  // Когда вы создаете экземпляр класса, такого как Point in Dart 2+, new   // необязательное слово}// Все программы Dart начинаются с main ().пустота главный() {  // Создание экземпляров точечных объектов.  вар p1 = Точка(10, 10);  Распечатать(p1.величина);  вар p2 = Точка.источник();  вар расстояние = p1.distanceTo(p2);  Распечатать(расстояние);}

Влияния из других языков

Дарт является потомком АЛГОЛ языковая семья,[44] наряду с C, Java, C #, JavaScript и другими.

В каскад методов Синтаксис, обеспечивающий синтаксическое сокращение для вызова нескольких методов один за другим для одного и того же объекта, заимствован из Smalltalk.

Дартс миксины находились под влиянием Strongtalk[нужна цитата ][45] и Рубин.

Dart использует изоляты как средство параллелизма и безопасности при структурировании приложений.[46] Концепция Isolate основана на Актерская модель, который наиболее широко реализован в Erlang.

Mirror API для выполнения контролируемых и безопасных отражение был впервые предложен в статье[47] к Гилад Браха (который является членом команды Dart) и Дэвид Ангар и первоначально реализовано в Себя.

Смотрите также

Рекомендации

  1. ^ Копец, Дэвид (30 июня 2014 г.). Дарт для абсолютных новичков. п. 56. ISBN  9781430264828. Получено 24 ноября 2015.
  2. ^ Бак, Ларс. «Dart: язык для структурированного веб-программирования». Блог Google Code. Получено 31 января 2016.
  3. ^ а б "Архив Dart SDK".
  4. ^ «Система типа Дарт». dart.dev.
  5. ^ «Представляем Dart 2.7: более безопасный и выразительный Dart - Dart - Medium». Майкл Томсен. Получено 24 января 2020.
  6. ^ «Веб-языки и виртуальные машины: быстрый код всегда в моде. (V8, Dart) - Google I / O 2013». Получено 22 декабря 2013.
  7. ^ «Команда Dart приветствует TypeScript». Получено 22 февраля 2020.
  8. ^ «Язык программирования, оптимизированный для создания пользовательских интерфейсов с такими функциями, как оператор распространения для расширения коллекций и сборник для настройки пользовательского интерфейса для каждой платформы». dart.dev.
  9. ^ «Язык программирования Дарт». dart.dev.
  10. ^ «Экскурсия по языку дротиков». dart.dev. Получено 2018-08-09.
  11. ^ «Система типа Дарт». dart.dev.
  12. ^ «Dart, новый язык программирования для структурированного веб-программирования», GOTO конференция (презентация) (вступительный доклад), Конференция в Орхусе, 2011-10-10
  13. ^ Лэдд, Сет. "Что такое Дарт". Что такое Дарт?. О'Рейли. Получено 16 августа, 2014.
  14. ^ «Dart 1.0: стабильный SDK для структурированных веб-приложений». news.dartlang.org. Получено 2018-08-08.
  15. ^ Сет Лэдд. "Новости и обновления Dart". dartlang.org.
  16. ^ Мур, Кевин (2018-08-07). «Представляем Dart 2 Stable и веб-платформу Dart». Дротик. Получено 2018-08-08.
  17. ^ «Dart 2.5 переносит компиляцию на рабочий стол». Инфомир. Получено 2019-11-28.
  18. ^ «Dart 2.6 выпущен вместе с dart2native». SDtimes. Получено 2019-11-28.
  19. ^ «ТС52 - Дротик». Архивировано из оригинал на 2016-08-02. Получено 2013-12-16.
  20. ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart". dartlang.org.
  21. ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart". dartlang.org.
  22. ^ "Почему?", Dart lang (ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ), Мы спроектировали Dart таким образом, чтобы было легко писать инструменты разработки, хорошо подходящим для разработки современных приложений и способным к высокопроизводительным реализациям.
  23. ^ «JavaScript как цель компиляции: сделать это быстро» (PDF). Dartlang.org. Архивировано из оригинал (PDF) на 2016-07-02. Получено 2013-08-18.
  24. ^ "Введение в библиотеку dart: io". Dartlang.org. Получено 2013-07-21.
  25. ^ "FAQ по флаттеру". flutter.io. Как Flutter запускает мой код на iOS?. Получено 2016-10-02.
  26. ^ «Объявление о выпуске Dart 2.6 с dart2native: компиляция Dart в автономные собственные исполняемые файлы». Получено 2019-12-06.
  27. ^ Мур, Кевин (23 февраля 2018 г.). «Критическое изменение Dart2: удаление веб-поддержки для dart: mirrors и dart: изолировать». Группы Google.
  28. ^ «Flutter - Красивые нативные приложения в рекордно короткие сроки». flutter.dev.
  29. ^ «Развертывание». angulardart.dev.
  30. ^ Лэдд, Сет (2013-03-28). «Новости и обновления Dart: почему dart2js создает более быстрый код JavaScript из Dart». News.dartlang.org. Получено 2013-07-21.
  31. ^ "Дарт-перформанс". Dartlang.org. Архивировано из оригинал на 2017-01-03. Получено 2013-07-21.
  32. ^ "Google выпускает редактор Dart для Windows, Mac OS X и Linux". Архивировано из оригинал на 2013-12-03. Получено 2011-11-29.
  33. ^ «Плагин Dart для Eclipse готов к предварительному просмотру».
  34. ^ Лэдд, Сет (30 апреля 2015 г.). «Настоящее и будущее редакторов и IDE для Dart». Новости и обновления Dart. Получено 2015-05-18.
  35. ^ "Репозиторий плагинов JetBrains: Dart". Plugins.intellij.net. Получено 2013-07-21.
  36. ^ «Инструменты для дротиков». dart.dev. Получено 2016-11-15.
  37. ^ Бофор, Франсуа. «Команда по хрому в настоящее время активно работает».
  38. ^ «Среда разработки на основе приложений Chrome».
  39. ^ «Spark, приложение Chrome от Google - это IDE для вашего Chromebook». 22 ноября 2013 г.
  40. ^ Саруп, Шри. «Редактор Chrome Dev: объявления».
  41. ^ "Chrome Dev Editor - это инструмент разработчика для создания приложений на платформе Chrome: приложений Chrome и веб-приложений на JavaScript или Dart. (БЕЗ АКТИВНОЙ РАЗРАБОТКИ) - googlearchive / chromedeveditor". 29 июля 2019 г. - через GitHub.
  42. ^ Лэдд, Сет (2015-05-06). «Представляем DartPad: удобный способ изучить код Dart». Новости и обновления Dart. Получено 2015-05-18.
  43. ^ «Перенос SIMD в Интернет через Dart» (PDF). Архивировано из оригинал (PDF) на 02.07.2016.
  44. ^ «Семья Алгол». c2.com.
  45. ^ Браха, Гилад; Грисволд, Дэвид (сентябрь 1996 г.). «Расширение языка Smalltalk с помощью миксинов» (PDF). OOPSLA Workshop. OOPSLA.
  46. ^ "Суть Google Dart: создание приложений, снимков, изоляторов". InfoQ.
  47. ^ Браха, Гилад; Ангар, Дэвид (2004). «Зеркала: принципы проектирования средств метауровня объектно-ориентированных языков программирования» (PDF). Уведомления ACM SIGPLAN. ACM. 39 (10): 331–344. Дои:10.1145/1035292.1029004. Получено 15 февраля 2014.

Библиография

внешняя ссылка