Dart — язык программирования , разработанный Ларсом Баком и Каспером Лундом и разработанный Google . [8] Его можно использовать для разработки веб- приложений и мобильных приложений , а также серверных и настольных приложений .
Dart — объектно-ориентированный , основанный на классах язык со сборкой мусора и синтаксисом в стиле C. [9] Он может компилироваться в машинный код , JavaScript или WebAssembly . Он поддерживает интерфейсы , примеси , абстрактные классы , обобщенные шаблоны и вывод типов . [4]
Dart был представлен на конференции GOTO в Орхусе , Дания, 10–12 октября 2011 года. [10] Ларс Бак и Каспер Лунд основали проект. [11] Dart 1.0 был выпущен 14 ноября 2013 года. [12]
Поначалу Дарт встретили неоднозначно. Некоторые раскритиковали инициативу Dart за фрагментацию сети из-за планов по включению виртуальной машины Dart в Chrome . Эти планы были отменены в 2015 году с выпуском Dart 1.9. Фокус сместился на компиляцию кода Dart в JavaScript. [13]
Dart 2.0 был выпущен в августе 2018 года с языковыми изменениями, включая систему типов. [14]
В Dart 2.6 появилось новое расширение dart2native
. Это расширенная встроенная компиляция для настольных платформ Linux, macOS и Windows. [15] Раньше разработчики могли создавать новые инструменты, используя только устройства Android или iOS. С помощью этого расширения разработчики могут развертывать программу в автономные исполняемые файлы. Для запуска этих автономных исполняемых файлов не требуется устанавливать Dart SDK. [16] Набор инструментов Flutter интегрирует Dart, поэтому его можно компилировать для небольших сервисов, таких как серверная поддержка. [17] [18]
Dart 3.0 был выпущен в мае 2023 года [19] с изменениями в системе типов, требующими надежной нулевой безопасности. В этот выпуск включены новые функции, такие как записи, шаблоны, [20] и модификаторы классов. [21]
Dart может компилироваться в WebAssembly начиная с версии 3.4. [22]
Dart выпустила 5-е издание своей спецификации языка 9 апреля 2021 года. [23] Она охватывает весь синтаксис Dart 2.10. Черновой вариант 6-го издания включает весь синтаксис до версии 2.13. [24] Принятые предложения по спецификации и проекты потенциальных функций можно найти в репозитории языка Dart на GitHub. [25]
ECMA International сформировала технический комитет TC52 [26] для стандартизации Dart. ECMA утвердила первую редакцию спецификации языка Dart как ECMA-408 [27] в июле 2014 года на своей 107-й Генеральной ассамблее. [28] Последующие редакции были утверждены в декабре 2014 г., [29] июне 2015 г. и декабре 2015 г. [27]
Комплект разработки программного обеспечения Dart (SDK) поставляется с автономной средой выполнения Dart. Это позволяет коду Dart запускаться в среде интерфейса командной строки . SDK включает инструменты для компиляции и упаковки приложений Dart. [30] Dart поставляется с полной стандартной библиотекой , позволяющей пользователям писать полностью работающие системные приложения, например собственные веб-серверы. [31]
Разработчики могут развертывать приложения Dart шестью способами:
Dart 3 может развертывать приложения в Интернете как приложения JavaScript или WebAssembly. Dart поддерживает компиляцию в WebAssembly по состоянию на май 2024 года [обновлять].
dartc
. Он устарел в Dart 2.0.dart2js
. Представленный в Dart 2.0, [36] основанный на Dart компилятор dart2js
развился из более ранних компиляторов. Он намеревался реализовать полную спецификацию и семантику языка Dart. Разработчики используют этот компилятор для производственных сборок. Он компилируется в минифицированный JavaScript .dartdevc
. [37] Разработчики могут использовать этот компилятор для разработки сборок. Он компилируется в удобочитаемый JavaScript. 28 марта 2013 года команда Dart опубликовала в своем блоге обновление, посвященное коду Dart, скомпилированному в JavaScript с помощью компилятора dart2js
, [38] заявив, что теперь он работает быстрее, чем рукописный JavaScript на JavaScript-движке Chrome V8 для теста DeltaBlue. [39]dart2js
и dartdevc
можно было вызывать из командной строки. В Dart 2.18 эти функции включены в Dart SDK. Это удалило оболочки прямой командной строки, но сохранило два компилятора. Команда webdev serve
вызывает dartdevc
компилятор. Команда webdev build
вызывает dart2js
компилятор.webdev serve
компиляцию более крупного файла JavaScript с удобочитаемым кодом. Сгенерированный Dart JavaScript можно отлаживать только с помощью Chrome .$ cd <dart_app_directory> $ webdev служат [ --debug ] [ -o <target.js> ]
webdev build
компиляцию мини-файла JavaScript.$ cd <dart_app_directory> $ webdev build [ -o <target.js> ]
Dart может компилироваться в собственный машинный код для macOS, Windows и Linux в качестве инструментов командной строки. Dart может компилировать приложения с пользовательскими интерфейсами для Интернета, iOS, Android, macOS, Windows и Linux с помощью платформы Flutter .
$ dart compile exe <source.dart> -o <target_app>Сгенерировано: <target_app>$ ./<целевое_приложение>
$ dart скомпилировать aot-snapshot <source.dart>Создан <target_app.aot>$ dartaotruntime <target_app.aot>
$ dart скомпилировать jit-snapshot <source.dart>Компиляция <source.dart> в файл jit-снимка <target_app.jit> Привет, мир!$ dart run <target_app.jit>Привет, мир!
$ dart компилирует ядро <source.dart>Компиляция <source.dart> в файл ядра <target_app>.dill. $ dart run <target_app>.dill
Для достижения параллелизма Dart использует изолированные, независимые рабочие процессы, которые не совместно используют память, но используют передачу сообщений [46] аналогично процессам Erlang (см. также модель актера ). Каждая программа Dart использует как минимум один изолят, который является основным. Начиная с Dart 2, веб-платформа Dart больше не поддерживает изоляты и предлагает разработчикам вместо этого использовать Web Workers . [47]
Начиная с Dart 2.12, Dart представил надежную нулевую безопасность . [48] Это служит гарантией того, что переменные не смогут вернуть нулевое значение, если на это не будет явного разрешения. Нулевая безопасность не позволяет разработчику вводить исключения с нулевым указателем — распространенную, но сложную для отладки ошибку. В Dart 3.0 весь код должен соответствовать требованиям нулевой безопасности.
Файлы моментальных снимков — основная часть виртуальной машины Dart — хранят объекты и другие данные времени выполнения. [46]
18 ноября 2011 года Google выпустила Dart Editor — программу с открытым исходным кодом, основанную на компонентах Eclipse , для операционных систем на базе macOS , Windows и Linux . [50] Редактор поддерживает подсветку синтаксиса , завершение кода , компиляцию JavaScript, запуск веб- и серверных приложений Dart, а также отладку .
13 августа 2012 года Google объявила о выпуске плагина Eclipse для разработки Dart. [51]
18 апреля 2015 года Google отказался от редактора Dart Editor в пользу интегрированной среды разработки (IDE) JetBrains . [52] Android Studio , IntelliJ IDEA , PyCharm , PhpStorm и WebStorm поддерживают плагин Dart. [53] Этот плагин поддерживает множество функций, таких как подсветка синтаксиса, завершение кода, анализ, рефакторинг, отладка и многое другое. Другие редакторы включают плагины для Dart [54], включая Sublime Text , [55] Atom , [56] Emacs , [57] Vim [58] и Visual Studio Code . [59]
В 2013 году команда Chromium начала работу над средой разработки на основе приложений Chrome с открытым исходным кодом и многоразовой библиотекой виджетов графического интерфейса под кодовым названием Spark. [60] Позже проект был переименован в Chrome Dev Editor. [61] Построенный на Dart, он содержал Spark, питаемый полимером. [62]
В июне 2015 года Google перенесла проект CDE на GitHub как проект бесплатного программного обеспечения и прекратила активные инвестиции в CDE. [63] Проект Chrome Dev Editor был заархивирован 24 апреля 2021 г. [64]
Чтобы упростить начало использования Dart, команда Dart в начале 2015 года создала DartPad. Этот онлайн-редактор позволяет разработчикам экспериментировать с интерфейсами прикладного программирования (API) Dart и запускать код Dart. Он обеспечивает подсветку синтаксиса, анализ кода, завершение кода, документацию и редактирование HTML и CSS. [65]
Dart DevTools, написанные на Dart [66] , включают инструменты отладки и повышения производительности.
Google представила Flutter для разработки собственных приложений. Flutter, созданный с использованием Dart, C, C++ и Skia, представляет собой многоплатформенную среду пользовательского интерфейса приложений с открытым исходным кодом. До Flutter 2.0 разработчики могли ориентироваться только на Android , iOS и Интернет. Flutter 2.0 выпустил поддержку macOS, Linux и Windows в качестве бета-функции. [67] Выпущен Flutter 2.10 с производственной поддержкой для Windows [68], а Flutter 3 выпущен с производственной поддержкой для всех настольных платформ. [69] Он предоставляет структуру, виджеты и инструменты. Эта платформа дает разработчикам возможность создавать и развертывать мобильные, настольные и веб-приложения. [70] Flutter работает с Firebase [71] и поддерживает расширение платформы с помощью надстроек, называемых пакетами. Их можно найти в репозитории пакетов pub.dev. [72] JetBrains также поддерживает плагин Flutter. [73]
Привет , мир! пример:
void main () { print ( 'Hello, World!' ); }
Простой цикл for : [74]
void main () { for ( var я = 1 ; я <= 10 ; я ++ ) { print ( я ); } }
Функция для вычисления n-го числа Фибоначчи :
void main () { вар я = 20 ; print ( 'фибоначчи ( $ я ) = $ { фибоначчи ( я ) } ' ); } /// Вычисляет n-е число Фибоначчи. int fibonacci ( int n ) { return n < 2 ? n : ( фибоначчи ( n - 1 ) + фибоначчи ( n - 2 )); }
Простой класс:
// Импортируем математическую библиотеку, чтобы получить доступ к функции sqrt. // Импортируется с именем `math`, поэтому для доступа необходимо использовать `math.` в качестве префикса. импортировать «dart:math» как math ; // Создаём класс для Point. класс Точка { // Конечные переменные не могут быть изменены после их присвоения. // Объявляем две переменные экземпляра. окончательное число x , y ; // Конструктор с синтаксическим сахаром для установки переменных экземпляра. // Конструктор имеет два обязательных параметра. Точка ( это . x , это . y ); // Именованный конструктор со списком инициализаторов. Точка . происхождение () : Икс знак равно 0 , у знак равно 0 ; // Метод. num distanceTo ( Другая точка ) { var dx = x - other . Икс ; вар dy = y - другое . й ; вернуть математику . sqrt ( dx * dx + dy * dy ); } // Пример «геттера». // Действует так же, как конечная переменная, но вычисляется при каждом доступе. число получить величину => математика . sqrt ( х * х + у * у ); // Пример перегрузки оператора Pointoperator + ( Pointother ) = > Point ( x + other.x , y + other.y ) ; // Когда вы создаете экземпляр класса, такого как Point в Dart 2+, слово new является // необязательным словом } // Все программы Dart начинаются с main(). void main () { // Создание экземпляров точечных объектов. вар p1 = Точка ( 10 , 10 ); печать ( p1 . величина ); вар p2 = Точка . источник (); вар расстояние = p1 . расстояниеДо ( p2 ); печать ( расстояние ); }
Dart принадлежит языковой семье АЛГОЛ . [75] [ не удалось проверить ] В его состав входят C, Java, C#, JavaScript и другие.
Синтаксис каскада методов был заимствован из Smalltalk. [76] Этот синтаксис обеспечивает ярлык для вызова нескольких методов один за другим для одного и того же объекта.
Миксины Дарта находились под влиянием Strongtalk [77] [ 78 ] и Ruby .
Dart использует изоляты в качестве единицы параллелизма и безопасности при структурировании приложений. [79] Концепция изоляции основана на модели актера, реализованной в Erlang. [80]
В 2004 году Гилад Брача (который был членом команды Dart) и Дэвид Унгар впервые предложили Mirror API для контролируемого и безопасного отражения в бумаге. [81] Эта концепция была впервые реализована в Self .
{{citation}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )