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

редактировать
Язык программирования Язык программирования
Dart
Язык программирования Dart logo.svg
Парадигма Мультипарадигма : функциональный, императивный, объектно-ориентированный, отражающий
Разработан Ларсом Баком и Каспером Лундом
разработчиком Google
Впервые появился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 и определение типа.

Содержание

  • 1 История
  • 2 Использование
  • 3 Изолирует
  • 4 Снимки
  • 5 Собственные мобильные приложения
  • 6 Компиляция в JavaScript
  • 7 Редакторы
    • 7.1 Редактор Chrome Dev
    • 7.2 DartPad
  • 8 SIMD
  • 9 Пример
  • 10 Влияние других языков
  • 11 См. Также
  • 12 Ссылки
  • 13 Библиография
  • 14 Внешние ссылки

История

Дарт был представлен на конференции 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:

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

Isolates

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

Snapshots

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

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

Собственные мобильные приложения

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

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

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.

Chrome Dev Editor

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

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

DartPad

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

SIMD

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

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

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

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

Пример

A Пример Hello World :

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.

См. Также

  • значок Портал компьютерного программирования
  • Портал бесплатного программного обеспечения с открытым исходным кодом

Ссылки

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

Внешние ссылки

Последняя правка сделана 2021-05-16 13:45:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте