Дарт (програмски језик)

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу
Дарт
Dart logo wordmark.png
Лого
Оригинални називенгл. Dart
Изговара седарт
Моделскриптни, објектно-оријентисани, императивни
Појавио се10. октобар 2011. год.; Грешка: Први параметар се не може анализирати као датум или време. (2011-10-10)[1]
Аутор(и)Ларс Бак, Каспер Лунд
Дизајнер(и)Гугл
Актуелна верзија1,18 / 28. јул 2016.
Оперативни системисви значајнији
ЛиценцаBSD
Веб-сајтhttp://www.dartlang.org

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

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

Историја[уреди]

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

Стандардизација

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

Употреба[уреди]

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

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

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

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

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

Самостално

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

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

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

Режим времена покретања[уреди]

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

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

Изолати[уреди]

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

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

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

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

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

Цели снимци

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

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

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

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

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

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

Едитори[уреди]

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

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

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

Кроум Дев Едитор[уреди]

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

ДартПад[уреди]

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

СМИД на вебу[уреди]

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

  • Флоат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.

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

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

Критике[уреди]

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

Референце[уреди]

  1. ^ Bak, Lars. „Dart: a language for structured web programming”. Google Code Blog. Google. Приступљено 4. 12. 2016. 
  2. ^ GOTO 2015 • Internet of Programmable Things • Kasper Lund - YouTube
  3. ^ „Dart, a new programming language for structured web programming”, GOTO conference (presentation) (opening keynote), Århus conference, 10. 10. 2011, Приступљено 4. 12. 2016 
  4. ^ „TC52 - Dart”. Архивирано из оригинала на датум 2. 8. 2016. Приступљено 4. 12. 2016. 
  5. ^ Anders Thorhauge Sandholm. „Dart News & Updates”. dartlang.org. Приступљено 4. 12. 2016. 
  6. ^ Anders Thorhauge Sandholm. „Dart News & Updates”. dartlang.org. Приступљено 4. 12. 2016. 
  7. ^ „Why?”, Dart lang (FAQ), Приступљено 4. 12. 2016, »We designed Dart to be easy to write development tools for, well-suited to modern app development, and capable of high-performance implementations.« 
  8. ^ „Dartium”. Dartlang.org. Приступљено 4. 12. 2016. 
  9. 9,0 9,1 Seth Ladd. „Dart News & Updates”. dartlang.org. 
  10. ^ „An Introduction to the dart:io Library”. Dartlang.org. Приступљено 4. 12. 2016. 
  11. ^ Ladd, Seth (28. 3. 2013). „Dart News & Updates: Why dart2js produces faster JavaScript code from Dart”. News.dartlang.org. Приступљено 4. 12. 2016. 
  12. ^ „Dart Performance”. Dartlang.org. Архивирано из оригинала на датум 03. 01. 2017. Приступљено 04. 12. 2016. 
  13. ^ „Google Release Dart Eclipse Plugin”. 
  14. ^ Ladd, Seth (30. 4. 2015). „The present and future of editors and IDEs for Dart”. Dart News & Updates. Google. Приступљено 4. 12. 2016. 
  15. ^ „JetBrains Plugin Repository : Dart”. Plugins.intellij.net. Приступљено 4. 12. 2016. 
  16. ^ „Dart Tools”. www.dartlang.org. Приступљено 4. 12. 2106.  Проверите вредност парамет(а)ра за датум: |access-date= (помоћ)
  17. ^ Beaufort, François. „The chromium team is currently actively working”. 
  18. ^ – A Chrome app based development environment „GitHub: Spark” Проверите вредност параметра |url= (помоћ). 
  19. ^ „Chrome Story: Spark, A Chrome App from Google is an IDE for Your Chromebook”. 
  20. ^ Ladd, Seth (6. 5. 2015). „Announcing DartPad: A friction-free way to explore Dart code”. Dart News & Updates. Google. Приступљено 4. 12. 2016. 
  21. ^ „Bringing SIMD to the web via Dart” (PDF). Архивирано из оригинала (PDF) на датум 09. 03. 2016. Приступљено 01. 12. 2016. 
  22. ^ „The Essence of Google Dart: Building Applications, Snapshots, Isolates”. InfoQ. 
  23. ^ Bracha, Gilad; Ungar, David (2004). „Mirrors: design principles for meta-level facilities of object-oriented programming languages” (PDF). ACM SIGPLAN Notices. ACM. 39 (10): 331—344. doi:10.1145/1035292.1029004. Приступљено 4. 12. 2016. 

Спољашње везе[уреди]