Дарт (язык программирования) - Википедия - Dart (programming language)
Парадигма | Мультипарадигма: функциональный, императив, объектно-ориентированный, отражающий[1] |
---|---|
Разработано | Ларс Бак и Каспер Лунд |
Разработчик | |
Впервые появился | 10 октября 2011 г.[2] |
Стабильный выпуск | 2.10.4 / 11 ноября 2020 г.[3] |
Предварительный выпуск | 2.12.0-29.1.beta / 13 ноября 2020 г.[3] |
Печатная дисциплина | 1.x: Необязательный 2.x: Предполагаемый[4] (статический, сильный ) |
Платформа | Кроссплатформенность |
Операционные системы | Кроссплатформенность |
Лицензия | BSD |
Расширения имени файла | .dart |
Интернет сайт | дротик |
Основной реализации | |
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) и Дэвид Ангар и первоначально реализовано в Себя.
Смотрите также
- Google Web Toolkit
- Машинопись, строго типизированный язык программирования, который транспилес в JavaScript
Рекомендации
- ^ Копец, Дэвид (30 июня 2014 г.). Дарт для абсолютных новичков. п. 56. ISBN 9781430264828. Получено 24 ноября 2015.
- ^ Бак, Ларс. «Dart: язык для структурированного веб-программирования». Блог Google Code. Получено 31 января 2016.
- ^ а б "Архив 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. Получено 2018-08-09.
- ^ «Система типа Дарт». dart.dev.
- ^ «Dart, новый язык программирования для структурированного веб-программирования», GOTO конференция (презентация) (вступительный доклад), Конференция в Орхусе, 2011-10-10
- ^ Лэдд, Сет. "Что такое Дарт". Что такое Дарт?. О'Рейли. Получено 16 августа, 2014.
- ^ «Dart 1.0: стабильный SDK для структурированных веб-приложений». news.dartlang.org. Получено 2018-08-08.
- ^ Сет Лэдд. "Новости и обновления Dart". dartlang.org.
- ^ Мур, Кевин (2018-08-07). «Представляем Dart 2 Stable и веб-платформу Dart». Дротик. Получено 2018-08-08.
- ^ «Dart 2.5 переносит компиляцию на рабочий стол». Инфомир. Получено 2019-11-28.
- ^ «Dart 2.6 выпущен вместе с dart2native». SDtimes. Получено 2019-11-28.
- ^ «ТС52 - Дротик». Архивировано из оригинал на 2016-08-02. Получено 2013-12-16.
- ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart". dartlang.org.
- ^ Андерс Торхауг Сандхольм. "Новости и обновления Dart". dartlang.org.
- ^ "Почему?", Dart lang (ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ),
Мы спроектировали Dart таким образом, чтобы было легко писать инструменты разработки, хорошо подходящим для разработки современных приложений и способным к высокопроизводительным реализациям.
- ^ «JavaScript как цель компиляции: сделать это быстро» (PDF). Dartlang.org. Архивировано из оригинал (PDF) на 2016-07-02. Получено 2013-08-18.
- ^ "Введение в библиотеку dart: io". Dartlang.org. Получено 2013-07-21.
- ^ "FAQ по флаттеру". flutter.io. Как Flutter запускает мой код на iOS?. Получено 2016-10-02.
- ^ «Объявление о выпуске Dart 2.6 с dart2native: компиляция Dart в автономные собственные исполняемые файлы». Получено 2019-12-06.
- ^ Мур, Кевин (23 февраля 2018 г.). «Критическое изменение Dart2: удаление веб-поддержки для dart: mirrors и dart: изолировать». Группы Google.
- ^ «Flutter - Красивые нативные приложения в рекордно короткие сроки». flutter.dev.
- ^ «Развертывание». angulardart.dev.
- ^ Лэдд, Сет (2013-03-28). «Новости и обновления Dart: почему dart2js создает более быстрый код JavaScript из Dart». News.dartlang.org. Получено 2013-07-21.
- ^ "Дарт-перформанс". Dartlang.org. Архивировано из оригинал на 2017-01-03. Получено 2013-07-21.
- ^ "Google выпускает редактор Dart для Windows, Mac OS X и Linux". Архивировано из оригинал на 2013-12-03. Получено 2011-11-29.
- ^ «Плагин Dart для Eclipse готов к предварительному просмотру».
- ^ Лэдд, Сет (30 апреля 2015 г.). «Настоящее и будущее редакторов и IDE для Dart». Новости и обновления Dart. Получено 2015-05-18.
- ^ "Репозиторий плагинов JetBrains: Dart". Plugins.intellij.net. Получено 2013-07-21.
- ^ «Инструменты для дротиков». dart.dev. Получено 2016-11-15.
- ^ Бофор, Франсуа. «Команда по хрому в настоящее время активно работает».
- ^ «Среда разработки на основе приложений Chrome».
- ^ «Spark, приложение Chrome от Google - это IDE для вашего Chromebook». 22 ноября 2013 г.
- ^ Саруп, Шри. «Редактор Chrome Dev: объявления».
- ^ "Chrome Dev Editor - это инструмент разработчика для создания приложений на платформе Chrome: приложений Chrome и веб-приложений на JavaScript или Dart. (БЕЗ АКТИВНОЙ РАЗРАБОТКИ) - googlearchive / chromedeveditor". 29 июля 2019 г. - через GitHub.
- ^ Лэдд, Сет (2015-05-06). «Представляем DartPad: удобный способ изучить код Dart». Новости и обновления Dart. Получено 2015-05-18.
- ^ «Перенос SIMD в Интернет через Dart» (PDF). Архивировано из оригинал (PDF) на 02.07.2016.
- ^ «Семья Алгол». c2.com.
- ^ Браха, Гилад; Грисволд, Дэвид (сентябрь 1996 г.). «Расширение языка Smalltalk с помощью миксинов» (PDF). OOPSLA Workshop. OOPSLA.
- ^ "Суть Google Dart: создание приложений, снимков, изоляторов". InfoQ.
- ^ Браха, Гилад; Ангар, Дэвид (2004). «Зеркала: принципы проектирования средств метауровня объектно-ориентированных языков программирования» (PDF). Уведомления ACM SIGPLAN. ACM. 39 (10): 331–344. Дои:10.1145/1035292.1029004. Получено 15 февраля 2014.
Библиография
- Уолрат, Кэти; Лэдд, Сет (7 марта 2012 г.). Что такое Дарт? (1-е изд.). O'Reilly Media. п. 20. ISBN 978-14493-32327.
- Уолрат, Кэти; Лэдд, Сет (7 ноября 2012 г.). Дротик: Вверх и беги (1-е изд.). O'Reilly Media. п. 144. ISBN 978-1449330897.
- Баккет, Крис (28 декабря 2012 г.). Дротик в действии (1-е изд.). Публикации Мэннинга. п. 475. ISBN 978-1617290862.