Dart Ryhmä 38 Ville Tahvanainen Juha Häkli
1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi kirjastoiksi. 2.TAUSTOJA Dart(Projekti tunnettiin nimellä Dash) on Googlen kehittämä, Lars Bakin ja Kasper Lundin suunnittelema avoimen koodin ohjelmointikieli, jonka avulla on tarkoitus luoda internet-, serveri- ja mobiilisovelluksia. Dartin syntaksi pohjautuu C-kieleen, ja sen perimmäinen ideologia on tarjota vaihtoehto JavaScriptille. JavaScriptiä ei alunperin rakennettu netissä toimivia sovelluksia varten, vaan dokumenttioliomallin käsittelyyn. Google on luonut useita selaimissa suoritettavia sovelluksia, jotka ovat skaalaltaan reilusti keskivertoa suurempia, kuten Google Maps ja Google Docs. Näissä sovelluksissa Google koki JavaScriptin käyttämisen pakollisena pahana. JavaScripti ei vain soveltunut laajempiin sovelluksiin. Tätä korjaamaan Google alkoi kehittämään Dart:ia, jonka oli tarkoitus lopulta korvata JavaScript netin lingua francana. Tämä on muokannut Dartin ulkomuotoa erityisen paljon. Dart on suunniteltu olemaan mahdollisimman tuttu useimmille ohjelmoijille, jotta siirtyminen siihen olisi mahdollisimman vaivatonta. Dart ei kuitenkaan ottanut lähellekään niin paljoa tuulta siipiensä alle, kuin optimistisesti ajateltiin. Googlen Chrome selaimeen suunniteltiin tukea Dart virtuaalikoneelle, mutta aikeista luovuttiin 25.3.2015. Tällä hetkellä mistään laajasti käytetystä selaimesta ei löydy natiivia Dart-tukea. 3.KIELI 3.1 KAKSI SUORITUSTAPAA Kun Dart-sovelluksia suoritetaan voidaan käyttää kahta erillaista moodia: checked ja production. Checked-moodissa suoritetaan tyyppitarkastuksia, joilla estetään asettamasta vääränlaisia arvoja vääränlaisiin muuttujiin. Production-moodissa ei suoriteta tyyppitarkastuksia, joten kaikkia muuttujia käsitellään dynaamisina, tämä lisää sovelluksen suorituskykyä, kun turhia tarkastuksia ei tarvitse tehdä. 3.2 SYNTAKSI Syntaksiltaan Dart muistuttaa ulkoisesti erittäin paljon C-kieltä: näkyvyysaluita merkitään hakasuluilla, komennot päättyvät puolipisteisiin, funktioita kutsutaan funktion nimellä. Nimen perässä on sulut, joiden sisällä on mahdolliset funktion argumentit. 3.3 MUUTTUJAT Kaikki Dartin tietotyypit perivät luokasta nimeltä Object. Object luokassa on tallennettuna erikseen tietotyypin tyyppi, jonka avulla käyttäjä voi luoda omia tietotyyppejään. Dart on siis täten puhdas olio-ohjelmointikieli, sillä se sisältää vain olioita ja luokkia. Käyttäjän tietotyyppien ja Dartissa valmiina olevien tietotyyppien välillä ei ole minkäänlaista eroa, vaan niitä voidaan käyttää identtisesti.
Muuttujat, jotka kaikki perivät object-luokasta, sisältävät aina aluksi arvon null, jos niitä ei ole alustettu. Näin säästytään muuttujien alustamattomuudesta johtuvista virheistä. Dartin muuttujat ovat vakiona dynaamisia. Muuttujat voi kuitenkin eksplisiittisesti asettaa tietyksi tyypiksi, jolloin tyypin käyttäminen väärin antaa virheilmoituksen checked-moodissa. Muutujan voi myös asettaa tietyksi arvoksi lopullisesti final-käskyllä, jolloin käskyn antamisen jälkeen muuttujan arvoa ei saa muuttaa. 3.4 FUNKTIOT Funktiot muistuttavat ulkoisesti erittäin paljon C:n funktiota, mutta Dartissa on lisättynä muutamia helpottavia ominaisuuksia. Funktion palautusarvon tai argumenttien tyyppejä ei ole pakko määritellä, mutta niin voi halutessaan kuitenkin tehdä. Funktiolle annettavat argumentit voi asettaa valinnaisiksi lisäämällä funktion määrityksessä argumentin ympärille hakasulkeet. Jos argumenttia ei anneta funktiota käytettäessä, saa se arvokseen null. Dart-funktion argumenteille voi myös antaa valinnaisen nimen hakasulkeilla: funktio(string sikalannimi, {int possujenmaara}); jolloin funktiota kutsuttaisiin näin: funktio('kyljyskarsina', possujenmaara: 200); Tällä tavalla funktion argumentit selkeytyvät tutkittaessa koodia ulkoisesti. Myös funktiot ovat Dartissa olioita, joten niitä voi asettaa muuttujiin ja antaa toisille funktioille argumentteina. 3.5 NÄKYVYYS Näkyvyysaluiden hallintaan Dart tarjoaa nimiavaruuksia, jotka toimivat vastaavasti kuin C-kielessä: Samoja nimiä voidaan käyttää ohjelman eri osissa, kunhan ne eivät kuulu samaan näkyvyysalueeseen, tai jos nimet on piilotettu eri nimiavaruuksien taakse. Dartissa erillisiä ohjelman osia kutsutaan kirjastoiksi, jotka toimivat modulaarisina osina ohjelmalle. Niitä voi yhdistellä toisiinsa vaivatta, kun niiden toimintoja tarvitaan. 3.6 MONIAJO Dart suorittaa vakiona kaiken yhdellä ytimellä. Jos käyttäjä haluaa hyödyntää moniajoa, täytyy hänen käyttää Isolate nimistä entiteettiä, jolla on oma muistinsa ja ytimensä hallittavanaan. Tämän vuoksi Dart sovellukset eivät voi jakaa muistia eri ytimien kesken. Luokissaan Dart erottaa julkiset ja yksityiset osat alaviivalla( _ ): data on julkinen osa luokkaa, johon pääse käsiksi suoraan. _data taas on yksityinen, eikä siihen voi koskea käyttämättä luokan omia menetelmiä, lukuunottamatta luokan sisäistä käyttöä.
3.7 VIRHEIDENHALLINTA Virheenhallinnassa Dart voi antaa virheitä kääntämisen aikana, koska Dart suoritetaan usein virtuaalikoneen kautta, terminoi tämä virhe suorituksen. Toinen varotoimi on staattiset varoitukset, joilla ei ole vaikutusta ohjelman suoritukseen. Näitä varotoimia käytetään vain checked-moodissa, eivätkä virtuaalikoneiden kääntäjät anna näitä varoituksia. Lisäksi on vielä ajonaikaiset virheet, joiden kanssa voidaan käyttää C++-sta tuttuja throw ja catch -metodeja. 3.8 KÄÄNTÄMINEN JA SUORITTAMINEN Dart-sovelluksia ajetaan virtuaalikoneen kautta, pääosin kahdella eri tavalla. Dart voidaan kääntää etukäteen dart2js kääntäjällä JavaScriptiksi, jonka jälkeen sovellus suorittetaan JavaScriptin virtuaalikoneella. Tämä takaa sen, että Darttia voidaan käyttää yleisimmissä selaimissa ilman ongelmia. Dartille on myös oma virtuaalikoneensa 'Dart Virtual Machine'. mutta tälle virtuaalikoneelle ei ole laajaa tukea. Google on luonut Chromium-selaimesta version Dartium johon on asennettu Dart SDK, jolla sovellusten suoritus onnistuu ilman kääntämistä JavaScriptiksi. Tämä selain on kuitenkin yleisesti tarkoitettu vain Dart sovellusten testaamiseen. 4.YHTEENVETO Dart ei ole saanut koottua itselleen laajaa kannattajajoukkoa, ja vaikuttaa siltä että se ei pysty korvaamaan JavaScriptiä haluamallaan tavalla. Koska Dart voidaan kääntää JavaScriptiksi sen laajaan käyttöön ei kuitenkaan löydy esteitä, joten ohjelmoijat jotka sitä haluavat käyttää voivat niin tehdä. Google kuitenkin loi Dartin myös erityisesti omaan käyttöönsä, eli Dartin kehitys tulee varmasti jatkumaan vielä useita vuosia.
LÄHTEET: "Future of Javascript" doc from our internal "JavaScript Summit" https://gist.github.com/paulmillr/1208618 Google Dart: a missile aimed at the heart of Javascript - but will it fly true? http://www.theguardian.com/technology/blog/2011/oct/11/google-dart-programmingprospects Dart Programming Language Specification, 3rd Edition http://www.ecma-international.org/publications/files/ecma-st/ecma-408.pdf Dart Website https://www.dartlang.org/