Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

История [ править ]

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

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

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

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

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

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

Использование [ править ]

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

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

Изолирует [ править ]

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

Снимки [ править ]

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

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

Родные мобильные приложения [ править ]

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

Компиляция в JavaScript [ править ]

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

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

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

Редакторы [ править ]

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

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

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

Редактор Chrome Dev [ править ]

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

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

DartPad [ править ]

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

SIMD [ править ]

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

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

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

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

Пример [ править ]

Hello, World! пример:

void  main ()  {  print ( 'Привет, мир!' ); }

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

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

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

// Импортируем математическую библиотеку, чтобы получить доступ к функции sqrt. // Импортируется с `math` в качестве имени, поэтому доступ должен использовать` math.` в качестве префикса. импортировать  dart: math  как  math ;// Создаем класс для Point. class  Point  { // Окончательные переменные нельзя изменить после их назначения.  // Объявление двух переменных экземпляра.  конечное  число  x ,  y ; // Конструктор с синтаксическим сахаром для установки переменных экземпляра.  // У конструктора есть два обязательных параметра.  Точка ( this . X ,  this . Y ); // Именованный конструктор со списком инициализаторов.  Точка . origin ()  :  x  =  0 ,  y  =  0 ; // Метод.  num  distanceTo ( Другой пункт  ) { var dx = x - другое . х ; var dy = y - другое . у ; вернуть математику . sqrt ( dx * dx + dy * dy ); }                        // Пример "геттера".  // Действует так же, как конечная переменная, но вычисляется при каждом доступе.  число  получить  величину  =>  математика . sqrt ( х  *  х  +  у  *  у ); // Пример перегрузки оператора  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 );  печать ( p1 . величина );  var  p2  =  Point . origin ();  var  расстояние  =  p1 . distanceTo ( p2 );  печать ( расстояние ); }

Влияния из других языков [ править ]

Dart является потомком семейства языков ALGOL [45] наряду с C, Java, C #, JavaScript и другими.

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

Дарта Примеси под влиянием Strongtalk [ править ] [46] и Руби .

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

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

См. Также [ править ]

  • Google Web Toolkit
  • TypeScript , язык программирования со строгой типизацией, который переносится на JavaScript.

Ссылки [ править ]

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

Библиография [ править ]

  • Уолрат, Кэти; Лэдд, Сет (7 марта 2012 г.). Что такое Дарт? (1-е изд.). O'Reilly Media . п. 20. ISBN 978-14493-32327.
  • Уолрат, Кэти; Лэдд, Сет (7 ноября 2012 г.). Dart: Up and Running (1-е изд.). O'Reilly Media . п. 144. ISBN 978-1449330897.
  • Баккет, Крис (28 декабря 2012 г.). Дарт в действии (1-е изд.). Публикации Мэннинга . п. 475. ISBN 978-1617290862.

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • DartPad
  • Сайт Russian Dart
  • Переменные в Dart