Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Samankaltaiset tiedostot
ELM GROUP 04. Teemu Laakso Henrik Talarmo

TIE Principles of Programming Languages CEYLON

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Groovy. Niko Jäntti Jesper Haapalinna Group 31

15. Ohjelmoinnin tekniikkaa 15.1

.NET ajoympäristö. Juha Järvensivu 2007

Osoitin ja viittaus C++:ssa

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

15. Ohjelmoinnin tekniikkaa 15.1

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

Tutoriaaliläsnäoloista

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Kääntäjän virheilmoituksia

Järjestelmäarkkitehtuuri (TK081702)

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

14. Poikkeukset 14.1

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14.1 Rekursio tyypitetyssä lambda-kielessä

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Javan perusteita. Janne Käki

5/20: Algoritmirakenteita III

5. HelloWorld-ohjelma 5.1

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Ohjelmoinnin peruskurssien laaja oppimäärä

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Taulukot. Jukka Harju, Jukka Juslin

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Dynaaminen kääntäminen ja Java HotSpot

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Haskell ohjelmointikielen tyyppijärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

TIES542 kevät 2009 Rekursiiviset tyypit

MITÄ JAVASCRIPT ON?...3

4. Lausekielinen ohjelmointi 4.1

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

815338A Ohjelmointikielten periaatteet

12. Monimuotoisuus 12.1

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

7/20: Paketti kasassa ensimmäistä kertaa

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

1. Omat operaatiot 1.1

Ohjelmoinnin perusteet Y Python

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

Harjoitustyö: virtuaalikone

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Olio-ohjelmointi Virhetilanteiden käsittely

Common Lisp Object System

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

Tekninen suunnitelma - StatbeatMOBILE

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

Java-kielen perusteet

Tikon Web-sovellukset

Sisällys. 16. Lohkot. Lohkot. Lohkot

CUDA. Moniydinohjelmointi Mikko Honkonen

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

11/20: Konepelti auki

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Poikkeustenkäsittely

Clojure, funktionaalinen Lisp murre

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

4. Luokan testaus ja käyttö olion kautta 4.1

Apuja ohjelmointiin» Yleisiä virheitä

Olio-ohjelmointi Javalla

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

5. HelloWorld-ohjelma 5.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

4. Lausekielinen ohjelmointi 4.1

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Tietokannat II -kurssin harjoitustyö

C++11 lambdat: [](){} Matti Rintala

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

12. Monimuotoisuus 12.1

Ohjelmoinnin peruskurssien laaja oppimäärä

1. Olio-ohjelmointi 1.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Transkriptio:

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/