ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

TIE Principles of Programming Languages CEYLON

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

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

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Clojure, funktionaalinen Lisp murre

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

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

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Ohjelmoinnin peruskurssien laaja oppimäärä

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

11/20: Konepelti auki

Ohjelmoinnin peruskurssien laaja oppimäärä

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

7/20: Paketti kasassa ensimmäistä kertaa

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

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

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

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

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

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

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Haskell ohjelmointikielen tyyppijärjestelmä

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Ohjelmoinnin perusteet Y Python

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

Ohjelmointi 1 / syksy /20: IDE

Lyhyt kertaus osoittimista

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

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

Kielioppia: toisin kuin Javassa

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

1. Omat operaatiot 1.1

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

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

5. HelloWorld-ohjelma 5.1

Osoitin ja viittaus C++:ssa

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Tieto- ja tallennusrakenteet

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

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

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

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

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmistojen mallintaminen, mallintaminen ja UML

Käyttöohje. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

1. Johdanto. 2. Ominaisuudet Tietotyypit ja tyypitys

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kääntäjän virheilmoituksia

Ohjelmoinnin perusteet Y Python

Harjoitus 2 (viikko 45)

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

DXL Library ja DXL-kielen olemus. Pekka Mäkinen SoftQA Oy http/

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Tutoriaaliläsnäoloista

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Ohjelmoinnin peruskurssien laaja oppimäärä

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

Tietueet. Tietueiden määrittely

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Luku 8 Rakennusvaihe. Detailed Design. Programming. Moduulisuunnittelu. Ohjelmointi

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

ITKP102 Ohjelmointi 1 (6 op)

MOLTO-konekäännösprojekti ja Grammatical Framework

15. Ohjelmoinnin tekniikkaa 15.1

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Ohjelmoinnin peruskurssien laaja oppimäärä

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen

Harjoitustyö: virtuaalikone

11.4. Context-free kielet 1 / 17

ITKP102 Ohjelmointi 1 (6 op)

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Java-kielen perusteet

Transkriptio:

ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017

Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................ 3 2.3 Työkaluja............................... 3 3 Muita huomioita 4 i

1 Johdanto Evan Czaplicki kehitti Elm-ohjelmointikielen vuonna 2012 tutkielmaansa varten, jossa hän tutki Elm-kielen käyttöä funktionaalisten käyttöliittymien luomista varten. Sen ensimmäinen versio ei ollut muuta kuin internetistä löydettävä koodieditori, sekä esimerkkejä. Internetissä sijaitseva koodieditori teki siitä helpon kokeilla. Elm on web-ohjelmointiin suunnattu staattisesti tyypitetty puhtaasti funktionaalinen ohjelmointikieli. Elm on ottanut paljon vaikutteita Haskellista, ja se toimii yhteen perustavanlaatuisten web-tekniikoiden kuten HTML ja CSS kanssa. Se on käännettävä ohjelmointikieli, joka kääntyy JavaScriptiksi, ja jota voidaan upottaa suoraan JavaScriptiin. "Hello" ++ " World!" Koodi 1: Hello World! 1

2 Ominaisuuksia Elm tukee modulaarisuutta, mahdollistaen koodin jakamisen useampaan pienempään tiedostoon. Moduulit Elmissä toimivat nimiavaruuksien avulla. Toisesta moduulista käytettävä funktio täten kutsutaan syntaksilla Module.function. Elmiin löytyy kattava määrä julkisia kirjastoja, joita voi ladata Elm-kielen virallisilta kotisivuilta. Elmin koodin arkkitehtuurina toimii Model-Update-View. Tässä mallissa model sisältää ohjelman tilan, update kertoo, miten ohjelman tilaa päivitetään, ja view kuvaa tapaa, jolla ohjleman model esitetään käyttäjälle. Tämä oli hyvin luonnollinen malli Elm-kielelle, jonka sen kehittäjät havaitsivat ilmenevän sillä kirjoitetuissa peleissä lähes aina. 2.1 Muuttujat ja tietorakenteet Kontrastina JavaScriptille Elm on vahvasti ja staattisesti tyypitetty kieli, kuten Haskell, johon se pohjautuu. Kuitenkaan arvojen tyyppejä ei ole pakko esitellä, vaan kääntäjä tunnistaa ne itse, kuten JavaScriptissä, joskaan Elm ei myöskään vaadi mitään vastinetta JavaScriptin var :lle jolla eritellään muuttujat. Elmissä kaikki muuttujat ovat muuttumattomia (immutable), eli niiden arvot eivät koskaan muutu. Tämän johdosta tietorakenteet kuten Dict ja Map on toteutettu pysyvinä tietorakenteina (persistent data structure): kaikki tietorakenteet pitävät sisällään kirjanpidon tietorakenteen vanhoista versioista, eli tietorakenteen sisältöä ei koskaan muuteta, vaan tietorakenteen yhteyteen lisätään päivitetty kopio, joka jakaa vanhan version kanssa muuttumattomat kentät. 2

2.2 Funktiot Elmin funktiot ovat, kuten puhtaalle funktionaaliselle kielelle on ominaista, tilattomia. Funktioita ei ole pakko esitellä, joskin dokumentaatio suosittelee sitä selkeyden vuoksi. Mitään mekaanista tarvetta sille ei kuitenkaan ole, joskin esitellylle funktiolle on määritetty etukäteen tyypit. Myös anonyymit funktiot ovat sallittuja. Funktiot ovat syntaktisesti erikoisia ihmisille, jotka ovat tottuneet esimerkiksi C++, Java, JS, Python funktioihin foo(a,b), sillä ne käyttävät sulkujen ja pilkkujen sijasta välilyöntejä funktioiden kutsussa. Koodissa 2 esitetään yksinkertainen funktio, joka ottaa kaksi tyypin Int parametria ja palauttaa yhden Int:n. Koodi 2: Funktio foo ja anonyymi funktio -- Funktion foo esittely ja toteutus foo Int -> Int -> Int foo a b = a+b -- Anonyymi funktio joka toteuttaa jakolaskun \c -> c / 2 2.3 Työkaluja Käännettäessä Elm käy läpi kaikki mahdolliset polut, mitä ohjelmakoodi voi suorittaa ajon aikana. Samalla, kun polkuja käydään läpi, kääntäjä tarkistaa koodin kaikki tyypitykset, tarkistaen, että yhdessäkään tapauksessa tyypityksien kanssa ei tule epäsopivuuksia. Tämän takia Elmillä kirjoitettu koodi ei koskaan tuota virheitä ajon aikaisesti. Elmin kääntäjä myös pystyy tulkitsemaan väärin kirjoitettuja muuttujien nimiä, analysoiden koodia ja päätellen sen mukaan, mitä muuttujan nimeä kyseisessä kohdassa saatetaan tarkoittaa. Käännöksen yhteydessä se myös ilmoittaa tästä ohjelmoijalle, jotta virhe voidaan korjata. 3

Elmin debuggeri hyödyntää Elmin puhdasta funktionaalisuutta sekä muuttumattomia muuttujia. Se tallentaa ohjelmoijan syötteet aikajanalle, jota ohjelmoija voi sen jälkeen kulkea eteen- ja taaksepäin. Kun ohjelmoija sen jälkeen muuttaa koodin arvoja, hän voi nähdä niiden vaikutukset lopputuloksessa suoraan debuggerissa ilman, että hänen tarvitsee testata ohjelmaa manuaalisesti itse. 3 Muita huomioita Elm ei tarjoa ohjelmoijalle työkaluja muistinhallintaan. Kyseessä on varsin korkean tason kieli, joka kääntyy toiseksi korkean tason kieleksi, joten tämä ei yllätä. Elm kuitenkin pyrkii tehokkuuteen, joten voidaan mahdollisesti luottaa kääntäjän toteuttajien luovan mahdollisimman tehokkaita käännöksiä. Toinen mainittava huomio lienee Elmin record -tietorakenne, joka on hieman kuin JavaScriptin olio (verrattavissa monen muunkin kielen olioihin), mutta sen kentät eivät voi olla tyhjiä, siltä ei voi kysyä kenttiä joita siinä ei ole, eikä se tunne viittauksia itseensä (muiden kielien self, this). 4