Programiranje
Google Dart 2.X
Googleovi alati za razvoj mobilnih aplikacija.
O programskom jeziku Dart na stranicama ovog časopisa već smo pisali prije nešto manje od četiri godine. Budući da se za to vrijeme u pravilu dosta toga dogodi sa svakim programskim jezikom, vrijeme je da se ponovo osvrnemo na novosti koje sa sobom donosi nova generacija jezika s oznakom 2.X. A one su tolike da se čak spominje „ponovno rođenje“ programskog jezika Dart. Slovo „X“ u prethodnoj oznaci pritom označava različite podverzije osnovne 2.0 verzije programskog jezika Dart.
Prvo nekoliko općih podataka o Dartu
U slučaju da do sada uopće niste imali kontakt s Dartom (ili za njega uopće niste čuli), slijedi nekoliko uvodnih informacija. Dart je nastao u koautorstvu dvojice danskih programera, ujedno Googleovih djelatnika. To su Lars Bak i Kasper Lund. Obojica se već godinama bave virtualnim mašinama i programskim jezicima (prije svega JavaScriptom), pa je zato Dart u osnovi nastao kao želja za zamjenom JavaScripta nečim modernijim. Novi jezik predstavljen je prvi put 2011. godine na GOTO konferenciji u Aarhusu i od tada se dosta dobro drži na rang listi popularnosti programskih jezika, kao što to može posvjedočiti prateća slika uz tekst. Trenutnu popularnost jezika uvijek možete provjeriti i sami na izvoru korištenom za pripremu ovog teksta: https://www.tiobe.com/tiobe-index/
S rejtingom od 0,690% u trenutku pisanja ovog teksta, odnosno 22. pozicijom na rang listi popularnosti programskih jezika, Dart je još uvijek daleko od vodećih razvojnih alata kao što su Java, C, C++ ili Python, ali je ipak ispred nekih dobro poznatih imena kao što su Lisp, Fortran, F#, Transact-SQL i slično. Od verzije 2.X očekuje se da dodatno poboljša trenutnu poziciju.
Jedan od glavnih problema s Dartom u njegovoj početnoj implementaciji predstavljao je način izvođenja programskog koda. Program u Dartu trebao se u konačnici izvoditi u pregledniku, a ni jedan standardni preglednik ne zna izvoditi Dart kod!!! Zanimljiv problem, zar ne?
U prethodnoj verziji programskog jezika navedeni se problem rješavao na jedan od sljedeća tri načina:
1. Prevođenjem izvornog Dart koda u standardni JavaScript kod, koji se može izvoditi u svim standardnim preglednicima jer je izvođenje JavaScript koda izravno podržano u preglednicima. Budući da se prilikom prevođenja koriste različiti oblici optimizacije, u određenim slučajevima moguće je da se tako dobiveni JavaScript kod izvodi brže nego da je nastao izravnim pisanjem JavaScript koda (naročito ako ga nije pisao vrhunski programer).
2. Izravnim izvođenjem Dart koda u posebnoj “Dartium” verziji preglednika koji svoje porijeklo vuče od Chromium preglednika (“open-source” blizanca preglednika Google Chrome). Ovo je rješenje zamišljeno prije svega kao privremena alternativa za učenje programskog jezika.
3. Treći način za izvođenje Dart koda je posebna virtualna mašina Dart VM, koja se također isporučuje u okviru Dart SDK sustava. Dart VM predstavlja jedan od najbitnijih dijelova cijelog razvojnog sustava zaduženog za normalan rad ostalih alata, a može se koristiti i za izvođenje programskog koda izravno u komandnoj liniji operativnog sustava.
Verzija 2 – priprema za korištenje…
U verziji 2 u Dart su dodana mnoga poboljšanja i proširenja kako u pogledu samog programskog jezika, tako i u pogledu alata za pisanje te izvođenje programskog koda. Objasnimo prvo kako možete započeti s učenjem programskog jezika i izvođenjem primjera u novoj verziji Darta.
Budući da je korištenje posebne verzije preglednika (ranije spomenuti „Dartium“) zapravo prilično veliko ograničenje za korištenje nekog programskog jezika, za izvođenje web orijentiranih rješenja u verziji 2.X namijenjen je bilo koji standardni preglednik (naravno, s preporukom proizvođača da to bude Chrome), što svakako predstavlja bitno olakšanje. Sve ostale potrebne razvojne alate za pisanje vlastitih programa u Dartu 2.X (u nastavku teksta samo „Dart“, da ne spominjemo stalno oznaku verzije) možete slobodno preuzeti s web adrese: https://www.dartlang.org/tools
Ovisno o tome kakve aplikacije planirate izrađivati u Dartu, možete izabrati jednu od sljedeće tri vrste alata:
1. Izrada mobilnih aplikacija (Flutter + Flutter tools)
2. Izrada web orijentiranih rješenja (Dart SDK + Dart tools for Web)
3. Izrada skripti za izvođenje na serveru (Dart SDK + Tools for server side development)
U nastavku ovog teksta nećemo se baviti točkom 1 jer joj je zbog zanimljivosti i složenosti posvećen poseban tekst. Zato ćemo se u nastavku prije svega pozabaviti preostalim dvjema točkama. U oba slučaja za razvoj DART rješenja prvo morate na svoje računalo (ponovo Windows, Linux ili Mac) instalirati Dart SDK. Nastavak teksta pretpostavlja korištenje Windows okruženja.
U Windows okruženju je Dart SDK moguće instalirati preko standardnog Windows Setup programa, ili korištenjem posebnog paketa Chocolatey namijenjenog automatizaciji instalacije i upravljanja softverom (https://chocolatey.org/). Za sada ćemo izabrati jednostavniji način te jednostavno preuzeti Windows Setup program s web adrese http://www.gekorm.com/dart-windows/ Budući da je ovdje doista riječ o standardnom Windows načinu instalacije, nećemo ga posebno objašnjavati.
Osim samih biblioteka potrebnih za izvođenje Dart koda, najvažniji alati u SDK paketu su:
dart
Samostalni virtualni stroj (Virtual Machine) potreban za izvođenje Dart koda.
dart2js
Program prevoditelj za pretvaranje izvornog koda pisanog u Dartu u JavaScript kod. Ovaj je alat potreban samo u slučaju razvoja web orijentiranih rješenja za završno (optimizirano) prevođenje koda.
dartanalyzer
Alat za statističku analizu Dart koda na razini komandnog retka uz istovremenu pripremu pogrešaka i upozorenja u kodu. Osim što se može koristiti samostalno, također ga upotrebljavaju i drugi alati namijenjeni pisanju programskog koda (npr. Android Studio, Visual Studio Code).
dartdevc
Glavni razvojni prevoditelj programskog koda u novoj verziji Darta. Osim samog prevođenja kao preduvjeta za izvođenje koda u bilo kojem modernom pregledniku, isti se alat koristi za otkrivanje pogrešaka u kodu. Omogućava inkrementalno prevođenje programskog koda, čime je skraćeno ukupno vrijeme prevođenja (samo prvi put se program prevodi u cijelosti), odnosno odaziv razvojnog sustava. Iako je korištenje alata dartdev preporučeno tijekom faze razvoja softvera, prije isporuke gotovog rješenja za završno prevođenje koda preporuča se i dalje koristiti dart2js zbog boljih rezultata u optimizaciji koda.
dartdoc
Koristi se za pripremu HTML dokumentacije za zadani Dart paket. Riječ je o nezavisnom projektu koji se neprekidno nadopunjava usporedno s razvojem Darta.
dartfmt
Dodatni alat za formatiranje početnog Dart koda napisanog od strane programera u oblik koji bi se trebao podudarati s trenutno zadanim odredbama za pisanje Dart koda. Kako to izgleda pokazuje sljedeći primjer izgleda programskog koda prije i nakon formatiranja:
// Dart kod prije formatiranja
if (tag==’style’||tag==’script’&&(type==null||type == TYPE_JS
||type==TYPE_DART)||
tag==’link’&&(rel==’stylesheet’||rel==’import’)) {}
// Dart kod nakon formatiranja
if (tag == ‘style’ ||
tag == ‘script’ &&
(type == null || type == TYPE_JS || type == TYPE_DART) ||
tag == ‘link’ && (rel == ‘stylesheet’ || rel == ‘import’)) {}
pub
Posebni alat za pripremu Dart paketa s dodatnim opisom detalja potrebnih za normalno izvođenje Dart paketa – na primjer, neophodne dodatne biblioteke, resursi i slično.
Za pisanje programskog koda potreban vam je i neki od editora. Iako načelno za to možete koristiti bilo koji od omiljenih alata takve namjene, možete izabrati i neki od alata s ugrađenom izravnom podrškom za Dart. Trenutno su to: Android Studio, Visual Studio Code i IntelliJ IDEA. Prvo od nabrojenih rješenja je posebno pogodno ako u Dartu namjeravate izrađivati i mobilne aplikacije, pa ćemo se njime detaljnije pozabaviti u drugom tekstu.
Ako ste upoznati s korištenjem razvojne okoline Visual Studija zbog prethodnog korištenja drugih programskih jezika, onda ćete se i u pojednostavljenoj Code verziji osjećati kao riba u vodi. Samo je potrebno da nakon instalacije na računalo također preuzmete odgovarajući Dart dodatak, kao što pokazuje prateća slika uz tekst. Kod prvog pokušaja pisanja Dart koda potrebno je napraviti povezivanje Microsoftove razvojne okoline s Dart SDK paketom instaliranim na računalo (treba pronaći podmapu bin iz tog paketa).
Početnicima je na raspolaganju još jedan način za pisanje i izvođenje programskog koda – možda i najbolji. Na web adresi https://dartpad.dartlang.org/ moguće je izravno upisivati i odmah izvoditi Dart kod u omiljenom pregledniku bez potrebe za preuzimanjem ikakvog dodatnog paketa na vlastito računalo. Iako u tom načinu rada programeru nisu na raspolaganju baš sve standardne biblioteke iz Dart SDK paketa, to ne znači da se ne mogu pisati prilično zanimljivi dijelovi koda, kao što to pokazuje jedan od dostupnih primjera SunFlower.
… i novosti u samom programskom jeziku
Sada kada je računalo konačno spremno za pisanje Dart koda, napravimo pregled najvažnijih novosti u samom programskom jeziku u odnosu na prethodnu verziju. Prilikom pripreme nove verzije Darta vodilo se računa o nekoliko bitnih principa:
Sintaksa jezika treba biti što jednostavnija te omogućavati pisanje sažetog koda. U tu je svrhu unaprijed pripremljen čitav niz osnovnih biblioteka i dodatnih paketa za rješavanje problema. Pritom su osnovne biblioteke dostupne za sve načine razvoja (mobilni, web, skripte na serveru), dok se dostupnost dodatnih paketa međusobno razlikuje ovisno o odredišnoj platformi. Popis trenutno dostupnih dodatnih paketa moguće je pronaći na web adresi: https://pub.dartlang.org/
Kao demonstraciju toga što se sve može napraviti pomoću dodatnih paketa za Dart (u ovom konkretnom slučaju to je dodatni paket StageXL), možete otvoriti web adresu http://www.stagexl.org/show/gaf/skeleton/example.html
Mogućnost inkrementalnog prevođenja u ranije spomenutom alatu dartdevc te optimizacija koda u alatu dart2js zadužene su za brže pokretanje vlastitih rješenje tijekom razvoja, ali i optimalno izvođenje isporučenih rješenja.
Izvorni Dart kod se na mobilnim uređajima prevodi u ARM ili x86 strojni kod, što znači da se aplikacije prirodno izvode i na Android i iOS uređajima. U slučaju web orijentiranih aplikacija izvodi se prevođenje u JavaScript kod, pa je njihovo izvođenje moguće u bilo kojem modernom pregledniku. Nije više potrebno koristiti posebnu vrstu preglednika kao prije.
Ako ste do sada koristili C++, C# ili Javu, zbog mnogih sličnosti jezičnih konstrukcija u Dartu (uključujući njegovu objektnu orijentiranost) ne biste trebali imati problema s učenjem novog programskog jezika. Kad smo već spomenuli objektnu orijentiranost, navedimo kako u verziji 2.X više nije potrebno eksplicitno navoditi ključne riječi poput new i const, nego program prevoditelj pretpostavlja njihovo postojanje kada je potrebno.
Dart podržava asinkrono orijentirano programiranje, pa je pogodan i za primjenu najnovijih paradigmi na području razvoja softvera kao što je reactive programming. Promjena u samom jeziku povezana s asinkronim izvođenjem koda odnosi se na način na koji se upravlja izvođenjem funkcije označene kao async. Takva funkcija se i dalje izvodi sinkrono sve do trenutka nailaska na prvu await naredbu, što prije nije bio slučaj.
Na kraju, korištenje Darta je potpuno slobodno i besplatno, pa nema nekih posebnih troškova za pripremu razvojne okoline bez obzira na veličinu tima koji radi na razvoju softvera.
Tijekom korištenja različitih tipova podataka više ne može doći do njihova „prebacivanja“ u neodređeno/nepoznato stanje jer se tijekom izvođenja koda implicitno ne podrazumijevaju konverzije između različitih tipova podataka. U verziji 2.X takva pridruživanja vrijednosti sada izazivaju grešku tijekom izvođenja programa.
Već spomenuta prenosivost osnovnih biblioteka programskog jezika, uz postojanje ogromnog broja dodatnih paketa, kao i ugrađena AngularDart 5 podrška dovode do smanjenja veličine programskog koda uz istovremeno povećanje brzine njegova izvođenja. To posebno ima utjecaja kod razvoja mobilnih aplikacija, o čemu ćemo nešto detaljnije u drugom tekstu.
Popis ostalih promjena u samom programskom jeziku dostupan je na adresi: https://groups.google.com/a/dartlang.org/forum/#!topic/announce/IUWWXwL7QB4
Trenutno jedan od najvećih problema u vezi s Dartom je to što se većina dostupne literature i programskih primjera odnosi na prethodnu generaciju jezika. U tom smislu treba biti vrlo oprezan kod proučavanja i isprobavanja dostupnih primjera kako u verziji 2.X ne biste isprobavali stare primjere te pritom kao rezultat dobili hrpu čudnih pogrešaka.
Učitavam komentare ...