Dart

У Вікіпедії є статті про інші значення цього терміна: DART.
Dart
Парадигма об'єктно-орієнтована
Дата появи 10 жовтня 2011
Творці Ларс Бакd і Kasper Lundd
Розробник Google
Останній реліз 3.0.4 (7 червня 2023; 10 місяців тому (2023-06-07)[1])
Система типізації опціональна
Під впливом від Strongtalkd, Java, JavaScript, Smalltalk, Erlang і C Sharp
Платформа кросплатформова програма
Операційна система кросплатформова програма
Ліцензія Ліцензія BSD
Звичайні розширення файлів .dart
Репозиторій вихідного коду github.com/dart-lang/sdk
Вебсайт dart.dev

Dart — мова програмування, яку розробляє компанія Google, позиціонуючи як мову структурованого програмування для Веб. Розробники вважали, що в довгостроковій перспективі Dart може стати прогресивною заміною JavaScript, котрий потерпає від наявних в даний час проблем з розширюваністю, продуктивністю і підтримкою розробки складних застосунків. Мова має схожий на Java синтаксис, не вимагає явного визначення типів і її можна використовувати для створення серверних та клієнтських застосунків.

У березні 2015 компанія Google представила оновлену стратегію просування Dart[2], у котрій вирішено не прив'язувати Dart до браузеру і відмовитися від ідеї інтеграції віртуальної машини Dart у Chrome. Розробку буде зосереджено на застосуванні Dart як проміжної мови, скомпільованої в JavaScript. Розвиток Dart як окремої мови, альтернативної JavaScript і безпосередньо підтримуваної у браузерах, визнано недоцільним. Замість цього Dart рухатиметься у бік якіснішої інтеграції з JavaScript і генерації оптимального JavaScript-коду. При цьому розробку віртуальної машини Dart VM буде продовжено, але вона позиціонуватиметься в основному для створення серверних і мобільних застосунків.

Влітку 2014 асоціація ECMA International, що займається стандартизацією інформаційних і комунікаційних технологій, затвердила[3] специфікацію ECMA-408 [Архівовано 30 березня 2015 у Wayback Machine.], яка стандартизує синтаксис і семантику мови Dart, а також склад базових бібліотек і супутніх мові технологій, відтоді мова Dart є офіційним стандартом Ecma. 9 Грудня 2015 в Токіо було затверджено 4-е[4] видання [Архівовано 31 липня 2021 у Wayback Machine.]. Надання Dart статусу стандарту Ecma дозволить розширити область використання мови та прискорити забезпечення його підтримки в наявних на ринку браузерах і продуктах. Вибір Ecma International як організації для стандартизації обумовлений тим, що ця асоціація вже розвиває близькі до специфіки Dart стандарти для мов JavaScript, Eiffel і C#. Просуванню Dart як стандарту сприяло надання компанією Google всіх пов'язаних з розробкою патентів у безоплатне використання, що не вимагає оплати відрахувань (royalty free).

Короткий огляд

Мова має схожий на Java синтаксис, не вимагає явного визначення типів і може використовуватися для створення серверних і клієнтських застосунків. Для запуску всередині браузера код мовою Dart може бути перетворений в JavaScript-подання або запущений безпосередньо під управлінням спеціального JavaScript-інтерпретатора Dartboard. Підтримується вбудовування коду мовою Dart в HTML-сторінки, використовуючи MIME тип «application/dart». На стороні сервера застосунок на мові Dart може бути виконаний всередині спеціальної віртуальної машини, яка забезпечує продуктивність виконання близьку до компільованих в машинний код мов. Віртуальну машину Dart планують інтегрувати в майбутні версії браузера Chrome, що дозволить виконувати застосунки мовою Dart без компіляції в JavaScript.

Мова підходить як для розробки одним програмістом невеликих скриптів без жорсткої структури, так і для створення високо масштабованих великих модульних проектів, підтримуваних великим колективом з потребою більш явної типізації для того, щоб уникнути плутанини і помилок. При цьому явне задання типів не обов'язкове, наприклад, можна почати розробку без вказання типів, а надалі при необхідності додати їх (наприклад, спочатку написати «var x», а потім замінити на «num x»). Код Dart завжди виконується тільки в рамках одної потоку, для організації паралельного виконання пропонується використовувати класи з атрибутом isolate. У кожному скрипті використовується власний простір імен, для використання зовнішніх об'єктів, функцій або змінних слід їх явно імпортувати за допомогою конструкції «import». Всі змінні, початково, діють тільки в межах поточного скрипту і не експортуються глобально.

Для спрощення розробки мовою Dart поставляється SDK, який включає в себе компілятор dart2js, віртуальну машину Dart VM, пакетний менеджер pub, статичний аналізатор коду dart_analyzer, і набір бібліотек. Для виконання і відлагодження застосунків на мові Dart, без компіляції в JavaScript, поширюється Dartium — складання браузера Chromium з інтегрованою віртуальною машиною Dart VM.

До складу SDK входить Dart Editor — спеціалізоване інтегроване середовище розробки мовою Dart. Dart Editor з одного боку досить легковаговий і не вимогливий до ресурсів, а з іншого підтримує такі елементи сучасних IDE, як рефакторинг, автодоповнення коду, перехід на визначення, контекстні підказки, містить вбудований відлагоджувач і аналізатор коду. Плагіни з підтримкою Dart також підготовлені для IntelliJ IDEA, WebStorm, Eclipse, Emacs і Vim.

Додаткові пакунки з бібліотеками й утилітами поширюються через репозиторій pub, який станом на весну 2015 налічує понад півтори тисячі пакунків, у тому числі фреймворки для розробки вебзастосунків AngularDart і polymer.dart.

Особливості мови

Особливості мови Dart:

  • Звичний і простий для вивчення синтаксис, природний для програмістів на JavaScript, С і Java;
  • Забезпечення швидкого запуску і високої продуктивності для всіх сучасних веббраузерів і різних типів оточень, від портативних пристроїв до потужних серверів;
  • Можливість визначення класів і інтерфейсів, що дозволяють використовувати інкапсуляцію і повторно використовувати існуючі методи і дані;
  • Необов'язкове вказування типів, використовувати чи ні статичні типи вирішує розробник. Вказування типів дозволяє спростити зневадження і виявлення помилок, робить код яснішим і читаним, спрощує його доопрацювання та аналіз сторонніми розробниками.
  • Серед підтримуваних типів: різні види хешів, масивів і списків, черги, числові і рядкові типи, типи для визначення дати і часу, регулярні вирази (RegExp). Можливо створення своїх типів;
  • Для організації паралельного виконання пропонується використовувати класи з атрибутом isolate, код яких виконується повністю в ізольованому просторі в окремій області пам'яті, взаємодіючи з основним процесом через відправку повідомлень;
  • Підтримка використання бібліотек, що спрощують підтримку і зневадження великих вебпроектів. Сторонні реалізації функцій можуть підключатися у вигляді поділюваних бібліотек. Застосунки можна розбити на частини і доручити розробку кожної з частин окремій команді програмістів;
  • Набір готових інструментів для підтримки розробки мовою Dart, включаючи реалізацію засобів динамічної розробки та зневадження з виправленням коду на льоту («edit-and-continue»);
  • Можливість створювати однорідні системи, що охоплюють як клієнтську, так і серверну частину. Використання однієї мови та інструментарію для клієнтських і серверних компонентів спрощує процес кодування і позбавляє від постійної зміни контексту.

Приклади

Hello, world!:

main() {
    print('Hello World!');
}

Функція для розрахунку n-ого числа Фібоначчі:

int fib(int n) {
    return (n <= 1) ? n : (fib(n - 1) + fib(n - 2));
}

main() {
    print('fib(20) = ${fib(20)}');
}

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

// імпортуємо бібліотеку math, щоб мати доступ до функції sqrt
import 'dart:math' as math;

// створюємо клас для точки - Point
class Point {

    // final-змінні не можуть бути змінені після присвоювання значення
    // створюємо дві змінні екземпляра
    final num x, y;

    // конструктор, з синтаксичним цукором для встановлення змінних екземпляра
    Point(this.x, this.y);

    // іменований конструктор зі списком ініціалізації
    Point.origin() : x = 0, y = 0;

    // метод
    num distanceTo(Point other) {
        var dx = x - other.x;
        var dy = y - other.y;
        return math.sqrt(dx * dx + dy * dy);
    }
}

// всі програми Dart стартують з main().
main() {
    // встановлюємо об'єкти Point
    var p1 = new Point(10, 10);
    var p2 = new Point.origin();
    var distance = p1.distanceTo(p2);
    print(distance);
}

Виноски

  1. sdk/CHANGELOG.md at main · dart-lang/sdk. GitHub. Процитовано 26 липня 2023.
  2. Dart for the Entire Web. Архів оригіналу за 28 березня 2015. Процитовано 29 березня 2015.
  3. Ecma approves the 1st edition of the Dart language specification. Архів оригіналу за 24 квітня 2015. Процитовано 10 липня 2014.
  4. 4th edition – Dart Programming Language Specification. Архів оригіналу за 29 грудня 2021. Процитовано 29 грудня 2021.

Посилання

  • Офіційний сайт
  • Standard ECMA-408: Dart Programming Language Specification [Архівовано 30 березня 2015 у Wayback Machine.]
  • Dart FAQ [Архівовано 22 травня 2013 у Wayback Machine.]
  • Seth Ladd and Jaime Wren. Bullseye: Your first Dart App (PDF). Архів оригіналу (PDF) за 25 квітня 2013.
  • A Walk on the Dart Side: A Quick Tour of Dart [Архівовано 10 листопада 2013 у Wayback Machine.] (November 2011) — Lecture given at Stanford University by Google software engineer Gilad Bracha (video archive, YouTube [Архівовано 20 липня 2013 у Wayback Machine.], transcript [Архівовано 1 грудня 2011 у Wayback Machine.]).
  • Google Dart Language and Tools Announced [Архівовано 19 квітня 2013 у Wayback Machine.]
  • Google's Dart announced [Архівовано 19 червня 2013 у Wayback Machine.]
  • п
  • о
  • р
 
Компанія
Підрозділи
Люди
Нерухомість
Дизайн та
типографія
Події
  • Android
    • Developer Challenge
    • Developer Day
    • Developer Lab
  • Doodle4Google
  • Code-in
  • Code Jam
  • Developer Day
  • Developers Live
  • Doodle4Google
  • I/O
  • Lunar XPRIZE
  • Science Fair
  • Summer of Code
  • Talks at Google
  • YouTube
    • Awards
    • CNN/YouTube presidential debates
    • Comedy Week
    • Live
    • Music Awards
    • Space Lab
    • Symphony Orchestra
Проєкти та
ініціативи
  • A Google A Day
  • ATAP
  • Data Liberation Front
  • Data Transfer Project
  • Digital Unlocked
  • Dragonfly
  • Google for Education
  • Google for Startups
  • Google Get Your Business Online
  • Labs
  • Liquid Galaxy
  • Made with Code
  • Nightingale
  • Privacy Sandbox
  • RechargeIT
  • Shield
  • Starline
  • Sunroof
  • Zero
Критика
  • 2018 walkouts
  • Цензура
  • Критика
  • Dragonfly
  • Litigation
  • Privacy concerns
    • Street View
  • San Francisco tech bus protests
  • Worker organization
 
Розробка
Операційні системи
Бібліотеки / Фреймворки
Платформи
Інструменти
Алгоритми пошуку
  • PageRank
  • Hummingbird
  • Panda
  • Penguin
  • Pigeon
  • RankBrain
Інше
 
Розваги
  • Currents (додаток для новин)
  • Green Throttle Games
  • Owlchemy Labs
  • Oyster
  • PaperofRecord.com
  • Podcasts
  • Quick, Draw!
  • Songza
  • Stadia
    • Ігри
    • Typhoon Studios
  • TV
  • Vevo
  • Відео
  • Радар Санта-Клауса
Play
YouTube
Комунікації
Пошук
Навігація
Бізнес/Фінанси
Організація
Інші
 
Пристрої
Смартфони
Ноутбуки та планшети
Носимі пристрої
  • Віртуальна реальність
  • Fitbit
  • Pixel Buds
  • Pixel Watch
    • 2
  • Project Iris (невипущено)
Інші
 
Див. також
Курсивом позначено припинені продукти, лінії продуктів та/або сервіси · Біржове скорочення: (NASDAQ: GOOG, LSE: GGEA) · Гасло: «Вчиняй правильно» · Сайт: www.google.com
  • п
  • о
  • р
Стандарти ECMA International
Програмні інтерфейси
Файлові системи (стрічки)
Файлові системи (диски)
Графічні
  • U3D
Мови програмування
Інтерфейси радіозв'язку
Інші
  • ECMA-35
Список стандартів ECMA
  • п
  • о
  • р
Низькорівневі
Високорівневі
Загального
призначення
Серверні
Запитів до баз
даних[суперечливо 1]
Розмітки та векторної
графіки[суперечливо 1]
Синхронні[en]
  • Lustre[en]
Символьних та
чисельних обчислень
Квантових обчислень
Логічні
  • Mercury[en]
  • Prolog
Академічні
Езотеричні
  1. а б Немає загальноприйнятого рішення, чи вважати усі ці мови саме мовами програмування