Dart

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

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. 

Посилання[ред. | ред. код]