Dart (програмски језик)
Дарт () је програмски језик опште намене који је оригинално развио Гугл, а касније прихваћен као стандард од стране ЕЦМА(EЦMA-480). Користи се за израду веб, сервер апликација, апликација за мобилни телефон, као и за Интернет Ствари уређаје. Представља софтвер отвореног кода под BSD лиценцом.

Дарт је објектно-оријентисан програмски језик, ради са класама које су хијерархијски организоване, базиран на синтакси језика C, који може опционо да се преведе у ЈаваСкрипт. Подржава интерфејсе, Миксине (), апстрактне класе, реифиране генерике (), и опционо типизирање.

Историја 

Дарт је приказан на ГОТО конференцији у Орхусу, у Данској, 10-12. октобра 2011.  Пројекат су основали Ларс Бак и Каспер Лунд.
 
Стандардизација

Екма Интернешнл () је формирала технички одбор TC52
 ради стандардизације програмског језика Дарт, и пошто Дарт може да се преведе у ЈаваСкрипт стандард, ради у практично сваком модерном претраживачу. Екма Интернешнл је одобрила прво издање спецификације језика Дарт у јулу 2014. на свом 107. Генералном састанку, а друго издање у децембру 2014. године .

Употреба 

Постоји четири главна начина за извршавање Дарт кода:

Преведен као ЈаваСкрипт

Да би се покренуо у обичном веб претраживачу, Дарт се ослања на извор-у-извор компајлирање () у ЈаваСкрипт. Према сајту пројекта, „Дарт је дизајниран да буде лак за писање развојних алата, погодан савременом развоју апликација, и способан за имплементације високих перформанси”. Када је покренут у веб претраживачу, Дарт код се преводи у ЈаваСкрипт помоћу дарт2јс компајлер. Компајлиран као ЈаваСкрипт, Дарт код је компатибилан са свим главним претраживачима без потребе да претраживачи имплементирају Дарт. Кроз оптимизацију преведеног ЈаваСкрипт излаза, избегавајући скупе провере и операције, код написан у Дарту може, у неким случајевима, радити брже него еквивалентни код писан користећи ЈаваСкрипт идиоме.

У Дартијум претраживачу

Дарт Софтвер Девелопмент Кит(СДК) се испоручује са верзијом Кроумиум веб претраживача, модификованим да садржи Дарт виртуелну машину(ВМ). Овај претраживач може покренути Дарт код директно без превођења у ЈаваСкрипт. Намењен је као развојни алат за апликације написане у том језику, а не као веб претраживач опште намене. Првобитно је планирано да се подршка за Дарт угради директно у Гугл Кроум, али је касније обустављено.

Самостално

Дарт СДК се испоручује са самосталном Дарт ВМ, омогућавајући да се Дарт код покрене у окружењу интерфејса командне линије. Као језик алати који су укључени у Дарт СДК су написани углавном у Дарту, самостални Дарт ВМ је критични део СДК. Ови алати укључују дарт2јс компајлер, и пакет управљања под називом паб. Дарт се испоручује са комплетном стандардном библиотеком која омогућава корисницима да пишу потпуно функционалне системске апликације, као што су прилагођени веб сервери.

Унапред комајлиран

Дарт код може бити АОТ-компајлиран () у машински код. Апликације направљене користећи "Flutter", СДК апликацијом за мобилне уређаје изграђеном на Дарту, постављене су на продавнице апликација као АОТ-компајлиран Дарт код.

Режим времена покретања 

Дарт програми раде на један од два начина. У провереном режиму, који није претпоставњени режим и мора бити укључен, тврђења динамичког типа су омогућена. Ови типови тврдње се могу укључити ако има статичних типова у коду и може ухватити неке грешке када се типови не поклапају. На пример, ако метод треба да врати ниску, али уместо тога врати цео број, тврђења динамичког типа ће то ухватити () и бацити () изузетак. Рад у провереном режиму се препоручује за развој и тестирање.

Дарт програми се покрећу подразумевано у продукцијском режиму, који ради са искљученим тврђењима динамичког типа.  Ово је подразумевани режим јер је то најбржи начин за покретање Дарт програма.

Изолати 

Да би се постигло конкурентно програмирање, Дарт користи изолате, који су независни воркери који не деле меморију, али уместо тога користе прослеђивање порука. Сваки Дарт програм користи најмање један, који је главни изолат. Када се преведе у ЈаваСкрипт, изолати се трансформишу у Веб воркере.

Тренутни снимци (снепшотови) 

Снимци су кључни део Дарт ВМ. Снимци су фајлови који чувају објекте и друге податке покретања.

Скрипт снимци

Дарт програми се могу превести у снепшот датотеке. Ови фајлови садрже цео код и његове зависности, унапред парсиране и спремне да се изврше. Ово омогућава брза покретања.

Цели снимци

Главне библиотеке Дарта могу се превести у снепшот фајл који омогућава брзо учитавање библиотека. Већина стандардних дистрибуција главне Дарт ВМ имају унапред направљене снимке за главне библиотеке које се учитавају у времену покретања.

Снимци објекта

Дарт је веома асинхрони језик. Уз то, он користи изолате за конкурентно програмирање. Будући да су то воркери који прослеђују поруке, потребан је начин да се сериализује порука. Ово се врши помоћу снимка који је генерисан од датог објекта, а онда пребачен у други изолат за десериализацију.

Превођење у ЈаваСкрипт 

Први преводилац за генерисање ЈаваСкрипта од Дарт кода је био дартц, али је избачен из употребе.  Други Дарт-у-ЈаваСкрипт компилатор је био -{Frog}-. Био је написан на Дарту, али никада није имплементирана комплетна семантика језика. Од 2015. године, трећи Дарт-у-ЈаваСкрипт компилатор је дарт2јс од Гугла. Као еволуција ранијих компајлера, написаних је у Дарту и намера је била да се имплементира комплетна спецификација и семантика Дарт језика.

Дана 28. марта 2013. године, тим иза Дарта поставио је информацију на свом блогу у вези Дарт кода преведеног на ЈаваСкрипт дарт2јс компајлером, наводећи да сада ради брже него ручно писан ЈаваСкрипт код на Кроум-V8 ЈаваСкрипт машини за ДелтаБлу тестер.

Едитори 

Дана 18. новембра 2011. Гугл је објавио Дарт Едитор, програм отвореног кода заснован на Еклипс компонентама, за Мек OS X, Windows и Линукс оперативне системе. Едитор подржава истицање синтаксе, комплетност кода, ЈаваСкрипт компилацију, покренуте веб и сервер Дарт апликације, као и дебаговање.

Дана 13. августа 2012, Гугл је најавио излазак Еклипсе додатка за развој Дарта.

Дана 18. априла 2015. године, Гугл је најавио да ће Дарт едитор бити повучен у корист ЈетБраинс интегрисаног развојног окружења(ИРО), које је сада препоручено ИРО за језик. Дарт додатак је доступан за ИнтеллиЈ ИДЕА, PyCharm, ПхпСторм и ВебСторм. Овај додатак подржава многа својства као што су истицање синтаксе, комплетирање кода, анализа, дебаговање итд. Остали додаци су доступни за едиторе као што су Сублиме Текст, Атом, Емакс, Вим и Визуал Студио Код.

Кроум Дев Едитор 
Познато је од новембра 2013. да Кроумиум тим ради на развојном окружењу отвореног кода, заснованом на Кроуму са вишекратно употребљивом библиотеком ГУИ додатака, под кодним именом Спарк, касније преименована у Кроум Дев Едитор. Изграђен је у Дарту, и садржи Спарк који се напаја преко Полимера. Преглед програмерске верзије је доступан у Кроум веб продавници.

ДартПад 
Дарт тим је створио ДартПад на почетку 2015. године, како би обезбедили лакши начин за почетак коришћења Дарта. То је потпуно онлајн едитор из којих корисници могу да експериментишу са Дарт апликационим програмским интерфејсом(АПИ), и покренути Дарт код. Омогућава синтаксно обележавање, комплетирање кода, анализу кода, читање документације као и HTML и CSS уређивање.

СМИД на вебу 

У 2013. Џон МакКучан саопштио је да је створио перформативни интерфејс ка „једнострука инструкција, вишеструки подаци”( СИМД) сету инструкција за Дарт, чиме су предности СИМД-а по први пут коришћене за веб програме - за кориснике који користе Гуглов експериментални Дартиум претраживач.. Интерфејс се састоји од два типа:
 Флоат32×4, 4 × запис у покретном зарезу једнозначне вредности
 Уинт32×4, 4 × 32-битне неозначене интиџер вредности

Инстанце ових типова су непроменљиве и код оптимизованог кода су мапиране директно на СИМД регистре. Тестирања на множењу 4×4 матрица, трансформацијама 3Д тачака и визуализација Манделбротовог скупа показују убрзање од скоро 400% у поређењу са скаларним кодом написаним у Дарту.

Примери 

Пример 'Hello World' програма:

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

Функција за рачунање н-тог броја Фибоначијевог низа:

int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;

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

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

// Импортујемо "math" библиотеку ради приступа "sqrt" функцији.
import 'dart:math' as math;

// Правимо класу за Тачку.
class Tacka {

    // "final" променљиве не могу бити промењене након доделе.
    // Правимо две инстанцне променљиве.
    final num x, y;

    // Конструктор за постављање инстанцних променљивих.
    Tacka(this.x, this.y);

    // Именовани конструктор са листом за иницијализацију.
    Tacka.koordinate()
        : x = 0,
          y = 0;

    // Метод.
    num udaljenostDo(Tacka druga) {
        var dx = x - druga.x;
        var dy = y - druga.y;
        return math.sqrt(dx * dx + dy * dy);
    }

    // Пример преоптерећивања оператора.
    Tacka operator +(Tacka druga) => new Tacka(x + druga.x, y + druga.y);
}

// Сви Дарт програми почињу са "main()" функцијом.
void main() {
    // инстанцирање тачка објеката.
    var p1 = new Tacka(10, 10);
    var p2 = new Tacka.koordinate();
    var udaljenost = p1.udaljenostDo(p2);
    print(udaljenost);
}

Утицаји других језика 

Дарт је као и Јава, C, ЈаваСкрипт, C# и други језици потомак АЛГОЛ породице језика.

Синтакса каскаде метода, која пружа синтаксну пречицу за позивање неколико метода једног за другим на исти објекат, усвојена је од стране Smalltalk-a.

Дарт користи изолате као власничке и заштитне јединице при структурисању апликација. Концепт Изолата надограђује се на модел Актора, који је најпознатији у језику Ерланг.

Коришћење Mirror АПИ-ја за контролисану и сигурну рефлексију је први пут предложен у раду Жилада Браха (члан Дарт тима) и Дејвида Унгара, и оригинално имплементиран у Селфу

Критике 

Дарт је у почетку имао помешане утиске и иницијатива Дарта је критикована због фрагментације веба, услед првобитних планова за укључивање Дарт ВМ у Кроум. Ти планови одбачени у корист фокусирања компилације Дарта у ЈаваСкрипт.

Референце

Спољашње везе 
 

Објектно-оријентисани програмски језици
Динамички типизирани програмски језици
Веб програмирање
Софтвер 2011.
Скриптни језици
Пројекти слободног софтвера
Софтвер са BSD лиценцом