Парадигма | Мультипарадигма : функциональная , императивная , объектно-ориентированная , рефлексивная [1] |
---|---|
Разработано | Ларс Бак и Каспер Лунд |
Разработчик | |
Впервые появился | 10 октября 2011 г . [2] |
Стабильный выпуск | 2.10.5 [3] / 19 января 2021 г . |
Предварительный выпуск | 2.12.0-259.9.beta / 8 февраля 2021 г . [4] |
Печатная дисциплина | 1.x: Необязательно 2.x: Предполагаемый [5] ( статический , сильный ) |
Платформа | Кроссплатформенность |
Операционные системы | Кроссплатформенность |
Лицензия | BSD |
Расширения имени файла | .dart |
Интернет сайт | dart |
Основные реализации | |
Dart VM, dart2native, dart2js, DDC, Flutter | |
Под влиянием | |
C , C ++ , C # , Erlang , Java , JavaScript , Kotlin , [6] Ruby , Smalltalk , Strongtalk , [7] TypeScript [8] |
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.
Ссылки [ править ]
- ^ Копец, Дэвид (30 июня 2014). Дарт для абсолютных новичков . п. 56. ISBN 9781430264828. Проверено 24 ноября 2015 года .
- ^ Бак, Ларс. «Дарт: язык для структурированного веб-программирования» . Блог Google Code . Проверено 31 января 2016 года .
- ^ «Выпуск 2.10.5» . Проверено 21 января 2021 года .
- ^ "Архив Dart SDK" .
- ^ "Система типов Дарт" . dart.dev .
- ^ «Анонсируем Dart 2.7: более безопасный, более выразительный Dart - Dart - Medium» . Майкл Томсен . Проверено 24 января 2020 года .
- ^ «Веб-языки и виртуальные машины: быстрый код всегда в моде. (V8, Dart) - Google I / O 2013» . Проверено 22 декабря 2013 года .
- ^ «Команда Dart приветствует TypeScript» . Проверено 22 февраля 2020 .
- ^ «Язык программирования, оптимизированный для создания пользовательских интерфейсов с такими функциями, как оператор распространения для расширения коллекций и сборник для настройки пользовательского интерфейса для каждой платформы» . dart.dev .
- ^ "Язык программирования Дарт" . dart.dev .
- ^ «Экскурсия по языку дротиков» . dart.dev . Проверено 9 августа 2018 .
- ^ "Система типов Дарт" . dart.dev .
- ^ «Dart, новый язык программирования для структурированного веб-программирования» , конференция GOTO (презентация) (вступительный доклад), конференция в Орхусе, 2011-10-10
- ^ Лэдд, Сет. «Что такое Дротик» . Что такое Дарт? . О'Рейли . Проверено 16 августа 2014 года .
- ^ «Dart 1.0: стабильный SDK для структурированных веб-приложений» . news.dartlang.org . Проверено 8 августа 2018 .
- ^ Сет Лэдд. "Новости и обновления Dart" . dartlang.org .
- ^ Мур, Кевин (2018-08-07). «Представляем Dart 2 Stable и веб-платформу Dart» . Дарт . Проверено 8 августа 2018 .
- ^ "Dart 2.5 переносит компиляцию на рабочий стол" . Инфомир . Проверено 28 ноября 2019 .
- ^ «Dart 2.6 выпущен вместе с dart2native» . SDtimes . Проверено 28 ноября 2019 .
- ^ "TC52 - Дротик" . Архивировано из оригинала на 2016-08-02 . Проверено 16 декабря 2013 .
- ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart" . dartlang.org .
- ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart" . dartlang.org .
- ^ «Почему?», Dart lang (FAQ),
Мы разработали Dart так, чтобы было легко писать инструменты разработки, хорошо подходящим для разработки современных приложений и способным к высокопроизводительным реализациям.
- ^ «JavaScript как цель компиляции: сделать это быстро» (PDF) . Dartlang.org. Архивировано из оригинального (PDF) 2 июля 2016 года . Проверено 18 августа 2013 .
- ^ «Введение в библиотеку dart: io» . Dartlang.org . Проверено 21 июля 2013 .
- ^ "Часто задаваемые вопросы по Flutter" . flutter.io . Как Flutter запускает мой код на iOS? . Проверено 2 октября 2016 .
- ^ «Объявление о выпуске Dart 2.6 с dart2native: компиляция Dart в автономные, нативные исполняемые файлы» . Проверено 6 декабря 2019 .
- ↑ Мур, Кевин (23 февраля 2018 г.). «Критическое изменение Dart2: Удаление веб-поддержки для dart: mirrors и dart: изолировать» . Группы Google .
- ^ «Flutter - Красивые нативные приложения в рекордно короткие сроки» . flutter.dev .
- ^ «Развертывание» . angulardart.dev .
- Перейти ↑ Ladd, Seth (2013-03-28). «Новости и обновления Dart: почему dart2js производит более быстрый код JavaScript из Dart» . News.dartlang.org . Проверено 21 июля 2013 .
- ^ "Дротик" . Dartlang.org . Архивировано из оригинала на 2017-01-03 . Проверено 21 июля 2013 .
- ^ "Google выпускает редактор Dart для Windows, Mac OS X и Linux" . Архивировано из оригинала на 2013-12-03 . Проверено 29 ноября 2011 .
- ^ «Плагин Dart для Eclipse готов к предварительному просмотру» .
- ^ Лэдд, Сет (2015-04-30). «Настоящее и будущее редакторов и IDE для Dart» . Новости и обновления Dart . Проверено 18 мая 2015 .
- ^ "Репозиторий плагинов JetBrains: Dart" . Plugins.intellij.net . Проверено 21 июля 2013 .
- ^ «Инструменты дротика» . dart.dev . Проверено 15 ноября 2016 .
- ^ Бофорт, Франсуа. «Команда по хрому в настоящее время активно работает» .
- ^ «Среда разработки на основе приложений Chrome» .
- ^ «Spark, приложение Chrome от Google - это IDE для вашего Chromebook» . 22 ноября 2013 г.
- ^ Saroop, Шри. «Редактор Chrome Dev: объявления» .
- ^ «Chrome Dev Editor - это инструмент разработчика для создания приложений на платформе Chrome: приложений Chrome и веб-приложений, на JavaScript или Dart. (БЕЗ АКТИВНОЙ РАЗРАБОТКИ) - googlearchive / chromedeveditor» . 29 июля 2019 г. - через GitHub.
- ^ Лэдд, Сет (2015-05-06). «Представляем DartPad: удобный способ изучить код Dart» . Новости и обновления Dart . Проверено 18 мая 2015 .
- ^ «Перенос SIMD в Интернет через Dart» (PDF) . Архивировано из оригинального (PDF) 2 июля 2016 года.
- ^ "Семья Алгол" . c2.com .
- ^ Браха, Гилад; Грисволд, Дэвид (сентябрь 1996 г.). «Расширение языка Smalltalk с помощью миксинов» (PDF) . OOPSLA Workshop . OOPSLA.
- ^ «Суть Google Dart: создание приложений, снимков, изолятов» . InfoQ .
- ^ Браха, Гилад; Ангар, Дэвид (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