Dart (programski jezik)

S Vikipedije, slobodne enciklopedije
Dart
Logo
Originalni nazivengl. Dart
Izgovara sedart
Modelskriptni, objektno-orijentisani, imperativni
Pojavio se10. oktobar 2011. god.; Greška: Prvi parametar se ne može analizirati kao datum ili vreme. (2011-10-10)[1]
Autor(i)Lars Bak, Kasper Lund
Dizajner(i)Gugl
Aktuelna verzija1,18 / 28. jul 2016.
Operativni sistemisvi značajniji
LicencaBSD
Veb-sajthttp://www.dartlang.org

Dart (engl. Dart) je programski jezik opšte namene koji je originalno razvio Gugl, a kasnije prihvaćen kao standard od strane ECMA(ECMA-480). Koristi se za izradu veb, server aplikacija, aplikacija za mobilni telefon, kao i za Internet Stvari uređaje[2]. Predstavlja softver otvorenog koda pod BSD licencom.

Dart je objektno-orijentisan programski jezik, radi sa klasama koje su hijerarhijski organizovane, baziran na sintaksi jezika C, koji može opciono da se prevede u JavaSkript. Podržava interfejse, Miksine (engl. Mixins), apstraktne klase, reifirane generike (engl. reified generics), i opciono tipiziranje.

Istorija[uredi | uredi izvor]

Dart je prikazan na GOTO konferenciji u Orhusu, u Danskoj, 10-12. oktobra 2011.[3] Projekat su osnovali Lars Bak i Kasper Lund.

Standardizacija

Ekma Internešnl (engl. Ecma International) je formirala tehnički odbor TC52 [4] radi standardizacije programskog jezika Dart, i pošto Dart može da se prevede u JavaSkript standard, radi u praktično svakom modernom pretraživaču. Ekma Internešnl je odobrila prvo izdanje specifikacije jezika Dart u julu 2014. na svom 107. Generalnom sastanku[5], a drugo izdanje u decembru 2014. godine[6].

Upotreba[uredi | uredi izvor]

Postoji četiri glavna načina za izvršavanje Dart koda:

Preveden kao JavaSkript

Da bi se pokrenuo u običnom veb pretraživaču, Dart se oslanja na izvor-u-izvor kompajliranje (engl. source-to-source) u JavaSkript. Prema sajtu projekta, „Dart je dizajniran da bude lak za pisanje razvojnih alata, pogodan savremenom razvoju aplikacija, i sposoban za implementacije visokih performansi”[7]. Kada je pokrenut u veb pretraživaču, Dart kod se prevodi u JavaSkript pomoću dart2js kompajler. Kompajliran kao JavaSkript, Dart kod je kompatibilan sa svim glavnim pretraživačima bez potrebe da pretraživači implementiraju Dart. Kroz optimizaciju prevedenog JavaSkript izlaza, izbegavajući skupe provere i operacije, kod napisan u Dartu može, u nekim slučajevima, raditi brže nego ekvivalentni kod pisan koristeći JavaSkript idiome.

U Dartijum pretraživaču

Dart Softver Development Kit(SDK) se isporučuje sa verzijom Kroumium veb pretraživača, modifikovanim da sadrži Dart virtuelnu mašinu(VM). Ovaj pretraživač može pokrenuti Dart kod direktno bez prevođenja u JavaSkript. Namenjen je kao razvojni alat za aplikacije napisane u tom jeziku, a ne kao veb pretraživač opšte namene[8]. Prvobitno je planirano da se podrška za Dart ugradi direktno u Gugl Kroum, ali je kasnije obustavljeno.[9]

Samostalno

Dart SDK se isporučuje sa samostalnom Dart VM, omogućavajući da se Dart kod pokrene u okruženju interfejsa komandne linije. Kao jezik alati koji su uključeni u Dart SDK su napisani uglavnom u Dartu, samostalni Dart VM je kritični deo SDK. Ovi alati uključuju dart2js kompajler, i paket upravljanja pod nazivom pab. Dart se isporučuje sa kompletnom standardnom bibliotekom koja omogućava korisnicima da pišu potpuno funkcionalne sistemske aplikacije, kao što su prilagođeni veb serveri.[10]

Unapred komajliran

Dart kod može biti AOT-kompajliran (engl. Ahead Of Time, AOT) u mašinski kod. Aplikacije napravljene koristeći "Flutter", SDK aplikacijom za mobilne uređaje izgrađenom na Dartu, postavljene su na prodavnice aplikacija kao AOT-kompajliran Dart kod.

Režim vremena pokretanja[uredi | uredi izvor]

Dart programi rade na jedan od dva načina. U proverenom režimu, koji nije pretpostavnjeni režim i mora biti uključen, tvrđenja dinamičkog tipa su omogućena. Ovi tipovi tvrdnje se mogu uključiti ako ima statičnih tipova u kodu i može uhvatiti neke greške kada se tipovi ne poklapaju. Na primer, ako metod treba da vrati nisku, ali umesto toga vrati ceo broj, tvrđenja dinamičkog tipa će to uhvatiti (engl. Catch) i baciti (engl. Throw) izuzetak. Rad u proverenom režimu se preporučuje za razvoj i testiranje.

Dart programi se pokreću podrazumevano u produkcijskom režimu, koji radi sa isključenim tvrđenjima dinamičkog tipa.  Ovo je podrazumevani režim jer je to najbrži način za pokretanje Dart programa.

Izolati[uredi | uredi izvor]

Da bi se postiglo konkurentno programiranje, Dart koristi izolate, koji su nezavisni vorkeri koji ne dele memoriju, ali umesto toga koriste prosleđivanje poruka. Svaki Dart program koristi najmanje jedan, koji je glavni izolat. Kada se prevede u JavaSkript, izolati se transformišu u Veb vorkere.

Trenutni snimci (snepšotovi)[uredi | uredi izvor]

Snimci su ključni deo Dart VM. Snimci su fajlovi koji čuvaju objekte i druge podatke pokretanja.

Skript snimci

Dart programi se mogu prevesti u snepšot datoteke. Ovi fajlovi sadrže ceo kod i njegove zavisnosti, unapred parsirane i spremne da se izvrše. Ovo omogućava brza pokretanja.

Celi snimci

Glavne biblioteke Darta mogu se prevesti u snepšot fajl koji omogućava brzo učitavanje biblioteka. Većina standardnih distribucija glavne Dart VM imaju unapred napravljene snimke za glavne biblioteke koje se učitavaju u vremenu pokretanja.

Snimci objekta

Dart je veoma asinhroni jezik. Uz to, on koristi izolate za konkurentno programiranje. Budući da su to vorkeri koji prosleđuju poruke, potreban je način da se serializuje poruka. Ovo se vrši pomoću snimka koji je generisan od datog objekta, a onda prebačen u drugi izolat za deserializaciju.

Prevođenje u JavaSkript[uredi | uredi izvor]

Prvi prevodilac za generisanje JavaSkripta od Dart koda je bio dartc, ali je izbačen iz upotrebe.  Drugi Dart-u-JavaSkript kompilator je bio Frog. Bio je napisan na Dartu, ali nikada nije implementirana kompletna semantika jezika. Od 2015. godine, treći Dart-u-JavaSkript kompilator je dart2js od Gugla. Kao evolucija ranijih kompajlera, napisanih je u Dartu i namera je bila da se implementira kompletna specifikacija i semantika Dart jezika.

Dana 28. marta 2013. godine, tim iza Darta postavio je informaciju na svom blogu u vezi Dart koda prevedenog na JavaSkript dart2js kompajlerom[11], navodeći da sada radi brže nego ručno pisan JavaSkript kod na Kroum-V8 JavaSkript mašini za DeltaBlu tester[12].

Editori[uredi | uredi izvor]

Dana 18. novembra 2011. Gugl je objavio Dart Editor, program otvorenog koda zasnovan na Eklips komponentama, za Mek OS X, Windows i Linuks operativne sisteme. Editor podržava isticanje sintakse, kompletnost koda, JavaSkript kompilaciju, pokrenute veb i server Dart aplikacije, kao i debagovanje.

Dana 13. avgusta 2012, Gugl je najavio izlazak Eklipse dodatka za razvoj Darta.[13]

Dana 18. aprila 2015. godine, Gugl je najavio da će Dart editor biti povučen u korist JetBrains integrisanog razvojnog okruženja(IRO)[14], koje je sada preporučeno IRO za jezik. Dart dodatak[15] je dostupan za IntelliJ IDEA, PyCharm, PhpStorm i VebStorm. Ovaj dodatak podržava mnoga svojstva kao što su isticanje sintakse, kompletiranje koda, analiza, debagovanje itd. Ostali dodaci su dostupni za editore kao što su Sublime Tekst, Atom, Emaks, Vim i Vizual Studio Kod.[16]

Kroum Dev Editor[uredi | uredi izvor]

Poznato je od novembra 2013.[17] da Kroumium tim radi na razvojnom okruženju otvorenog koda, zasnovanom na Kroumu sa višekratno upotrebljivom bibliotekom GUI dodataka, pod kodnim imenom Spark, kasnije preimenovana u Kroum Dev Editor[18]. Izgrađen je u Dartu, i sadrži Spark koji se napaja preko Polimera[19]. Pregled programerske verzije je dostupan u Kroum veb prodavnici[mrtva veza].

DartPad[uredi | uredi izvor]

Dart tim je stvorio DartPad na početku 2015. godine, kako bi obezbedili lakši način za početak korišćenja Darta. To je potpuno onlajn editor iz kojih korisnici mogu da eksperimentišu sa Dart aplikacionim programskim interfejsom(API), i pokrenuti Dart kod. Omogućava sintaksno obeležavanje, kompletiranje koda, analizu koda, čitanje dokumentacije kao i HTML i CSS uređivanje.[20]

SMID na vebu[uredi | uredi izvor]

U 2013. Džon MakKučan saopštio je da je stvorio performativni interfejs ka „jednostruka instrukcija, višestruki podaci”( SIMD) setu instrukcija za Dart, čime su prednosti SIMD-a po prvi put korišćene za veb programe - za korisnike koji koriste Guglov eksperimentalni Dartium pretraživač.[21]. Interfejs se sastoji od dva tipa:

  • Float32×4, 4 × zapis u pokretnom zarezu jednoznačne vrednosti
  • Uint32×4, 4 × 32-bitne neoznačene intidžer vrednosti

Instance ovih tipova su nepromenljive i kod optimizovanog koda su mapirane direktno na SIMD registre. Testiranja na množenju 4×4 matrica, transformacijama 3D tačaka i vizualizacija Mandelbrotovog skupa pokazuju ubrzanje od skoro 400% u poređenju sa skalarnim kodom napisanim u Dartu.

Primeri[uredi | uredi izvor]

Primer 'Hello World' programa:

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

Funkcija za računanje n-tog broja Fibonačijevog niza:

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

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

Prosta klasa:

// Импортујемо "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);
}

Uticaji drugih jezika[uredi | uredi izvor]

Dart je kao i Java, C, JavaSkript, C# i drugi jezici potomak ALGOL porodice jezika.

Sintaksa kaskade metoda, koja pruža sintaksnu prečicu za pozivanje nekoliko metoda jednog za drugim na isti objekat, usvojena je od strane Smalltalk-a.

Dart koristi izolate kao vlasničke i zaštitne jedinice pri strukturisanju aplikacija[22]. Koncept Izolata nadograđuje se na model Aktora, koji je najpoznatiji u jeziku Erlang.

Korišćenje Mirror API-ja za kontrolisanu i sigurnu refleksiju je prvi put predložen u radu Žilada Braha[23] (član Dart tima) i Dejvida Ungara, i originalno implementiran u Selfu

Kritike[uredi | uredi izvor]

Dart je u početku imao pomešane utiske i inicijativa Darta je kritikovana zbog fragmentacije veba, usled prvobitnih planova za uključivanje Dart VM u Kroum. Ti planovi odbačeni u korist fokusiranja kompilacije Darta u JavaSkript.[9]

Reference[uredi | uredi izvor]

  1. ^ Bak, Lars. „Dart: a language for structured web programming”. Google Code Blog. Google. Pristupljeno 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, Arhivirano iz originala 21. 12. 2012. g., Pristupljeno 4. 12. 2016 
  4. ^ „TC52 - Dart”. Arhivirano iz originala 2. 8. 2016. g. Pristupljeno 4. 12. 2016. 
  5. ^ Anders Thorhauge Sandholm. „Dart News & Updates”. dartlang.org. Pristupljeno 4. 12. 2016. 
  6. ^ Anders Thorhauge Sandholm. „Dart News & Updates”. dartlang.org. Pristupljeno 4. 12. 2016. 
  7. ^ „Why?”, Dart lang (FAQ), Pristupljeno 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. Pristupljeno 4. 12. 2016. 
  9. ^ a b Seth Ladd. „Dart News & Updates”. dartlang.org. 
  10. ^ „An Introduction to the dart:io Library”. Dartlang.org. Pristupljeno 4. 12. 2016. 
  11. ^ Ladd, Seth (28. 3. 2013). „Dart News & Updates: Why dart2js produces faster JavaScript code from Dart”. News.dartlang.org. Pristupljeno 4. 12. 2016. 
  12. ^ „Dart Performance”. Dartlang.org. Arhivirano iz originala 03. 01. 2017. g. Pristupljeno 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. Pristupljeno 4. 12. 2016. 
  15. ^ „JetBrains Plugin Repository : Dart”. Plugins.intellij.net. Pristupljeno 4. 12. 2016. 
  16. ^ „Dart Tools”. www.dartlang.org. Pristupljeno 4. 12. 2106.  Proverite vrednost paramet(a)ra za datum: |access-date= (pomoć)
  17. ^ Beaufort, François. „The chromium team is currently actively working”. 
  18. ^ – A Chrome app based development environment „GitHub: Spark” Proverite vrednost parametra |url= (pomoć). 
  19. ^ „Chrome Story: Spark, A Chrome App from Google is an IDE for Your Chromebook”. Arhivirano iz originala 26. 03. 2016. g. Pristupljeno 01. 12. 2016. 
  20. ^ Ladd, Seth (6. 5. 2015). „Announcing DartPad: A friction-free way to explore Dart code”. Dart News & Updates. Google. Pristupljeno 4. 12. 2016. 
  21. ^ „Bringing SIMD to the web via Dart” (PDF). Arhivirano iz originala (PDF) 09. 03. 2016. g. Pristupljeno 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. Pristupljeno 4. 12. 2016. 

Spoljašnje veze[uredi | uredi izvor]