Dart
Dart — мова програмування, яку розробляє компанія Google, позиціонуючи як мову структурованого програмування для Веб. Розробники вважали, що в довгостроковій перспективі Dart може стати прогресивною заміною JavaScript, котрий потерпає від наявних в даний час проблем з розширюваністю, продуктивністю і підтримкою розробки складних застосунків. Мова має схожий на Java синтаксис, не вимагає явного визначення типів і її можна використовувати для створення серверних та клієнтських застосунків.
Dart | |
---|---|
Парадигма | об'єктно-орієнтована |
Дата появи | 10 жовтня 2011 |
Творці | Lars Bakd і Google |
Розробник | |
Останній реліз | 1.19 (8 травня 2019[1]) |
Система типізації | опціональна |
Під впливом від | JavaScript, Java, Smalltalk, Erlang, Strongtalk, C#[2] |
Платформа | крос-платформова програма |
Ліцензія | BSD License |
Звичайні розширення файлів |
.dart |
Репозиторій вихідного коду | github.com/dart-lang/sdk |
Вебсайт | dart.dev |
Dart у Вікісховищі |
У березні 2015 компанія Google представила оновлену стратегію просування Dart[3], у котрій вирішено не прив'язувати Dart до браузеру і відмовитися від ідеї інтеграції віртуальної машини Dart у Chrome. Розробку буде зосереджено на застосуванні Dart як проміжної мови, скомпільованої в JavaScript. Розвиток Dart як окремої мови, альтернативної JavaScript і безпосередньо підтримуваної у браузерах, визнано недоцільним. Замість цього Dart рухатиметься у бік якіснішої інтеграції з JavaScript і генерації оптимального JavaScript-коду. При цьому розробку віртуальної машини Dart VM буде продовжено, але вона позиціонуватиметься в основному для створення серверних і мобільних застосунків.
Влітку 2014 асоціація ECMA International, що займається стандартизацією інформаційних і комунікаційних технологій, затвердила[4] специфікацію ECMA-408, яка стандартизує синтаксис і семантику мови Dart, а також склад базових бібліотек і супутніх мові технологій, відтоді мова Dart є офіційним стандартом Ecma. 9 Грудня 2015 в Токіо було затверджено 4-е[5] видання. Надання 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");
- Можливість створювати однорідні системи, що охоплюють як клієнтську, так і серверну частину. Використання однієї мови та інструментарію для клієнтських і серверних компонентів спрощує процес кодування і позбавляє від постійної зміни контексту.
Приклади
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);
}
Виноски
Посилання
- Офіційний сайт
- Standard ECMA-408: Dart Programming Language Specification
- Dart FAQ
- Bullseye:Your first Dart App by Seth Ladd and Jaime Wren
- A Walk on the Dart Side: A Quick Tour of Dart (November 2011) — Lecture given at Stanford University by Google software engineer Gilad Bracha (video archive, YouTube, transcript).
- Google Dart Language and Tools Announced
- Google's Dart announced