TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

Samankaltaiset tiedostot
TIEA341 Funktio-ohjelmointi 1, kevät 2008

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

1. Olio-ohjelmointi 1.1

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

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

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

11/20: Konepelti auki

7/20: Paketti kasassa ensimmäistä kertaa

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Tietojenkäsittelyteorian alkeet, osa 2

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

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Haskell ohjelmointikielen tyyppijärjestelmä

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Common Lisp Object System

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Edward Sapir ja Benjamin Whorf esittivät viime vuosisadan alkupuolella kielitieteellisen

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

815338A Ohjelmointikielten periaatteet

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Rekursiiviset tyypit

DFA:n käyttäytyminen ja säännölliset kielet

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Rajoittamattomat kieliopit (Unrestricted Grammars)

Ydin-Haskell Tiivismoniste

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Groovy. Niko Jäntti Jesper Haapalinna Group 31

T Ohjelmistotekniikan seminaari

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

Täydentäviä muistiinpanoja laskennan rajoista

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

4. Lausekielinen ohjelmointi 4.1

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

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

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

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

Clojure, funktionaalinen Lisp murre

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

TIE Principles of Programming Languages CEYLON

812341A Olio-ohjelmointi, I Johdanto

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 20. lokakuuta 2016

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

815338A Ohjelmointikielten periaatteet

Jakso 4 Aliohjelmien toteutus

Johdatus ohjelmointiin

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

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

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.

Ohjelmointikielten periaatteiden taustaa

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

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

TIES542 kevät 2009 Rekursiiviset tyypit

Ohjelmoinnin peruskurssien laaja oppimäärä

Luku 5. Monadit. 5.1 Siirrännän ongelma

Tämän vuoksi kannattaa ottaa käytännöksi aina kirjoittaa uuden funktion tyyppi näkyviin, ennen kuin alkaa sen määritemää kirjoittamaan.

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 6. maaliskuuta 2012 TIETOTEKNIIKAN LAITOS.

Pinoautomaatit. Pois kontekstittomuudesta

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

Ohjelmointikielten periaatteet. Antti-Juhani Kaijanaho

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Ohjelmointi 1 / syksy /20: IDE

Maarit Harsu. O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet

Funktionaalinen ohjelmointi

Attribuuttikieliopit

Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 14. maaliskuuta 2011 TIETOTEKNIIKAN LAITOS. Aloitus.

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Jakso 4 Aliohjelmien toteutus

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Koodi. Antti-Juhani Kaijanaho. 11. marraskuuta Sisältö

Ohjelmointikielen määritteleminen (tai edes tyhjentävä luonnehtiminen) on todella vaikeaa. Voisi yrittää vaikka näin:

Tietorakenteet ja algoritmit - syksy

Transkriptio:

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011

Sisällys

Sisällys

Ohjelmointikieli? programming language n. a system of precisely defined symbols and rules devised for writing computer programs Programming, n., in the Oxford English Dictionary. Third edition, October 2009; online version November 2010. http://www.oed.com:80/entry/152232; accessed 15 February 2011. An entry for this word was first included in A Supplement to the OED III, 1982.

Aspekteja syntaksi (kielioppi) ohjelmointikieli formaalina kielenä tunnistetaan kieleen kuuluvat ohjelmat ks. TIEA241 Automaatit ja kieliopit semantiikka (merkitysoppi) kieleen kuuluvien ohjelmien käyttäytyminen yleensä toteutuksesta riippumaton (abstrakti?) ks. TIES542 Ohjelmointikielten periaatteet pragmatiikka (käytäntö) miten kieltä käytännössä käytetään ks. kielikohtaiset oppikirjat ja kurssit

Sisällys

Ohjelmointikielten sukupolvet Kyseenalainen mutta usein käytetty jaottelu! I konekielet II symboliset konekielet (assembly) III yleiskäyttöiset (tavanomaiset) ohjelmointikielet IV tietylle sovellusalueelle räätälöidyt ohjelmointikielet (domain-specific languages, DSL) V ongelman kuvaukseen (ei sen ratkaisuun) keskittyvät kielet

Paradigmat paradigm, n. 1. A pattern or model, an exemplar; (also) a typical instance of something, an example. 2.... 3.... 4. A conceptual or methodological model underlying the theories and practices of a science or discipline at a particular time; (hence) a generally accepted world view. The Oxford English Dictionary. Third edition, October 2009; online version November 2010. http://www.oed.com:80/entry/137329; accessed 15 February 2011. An entry for this word was first included in New English Dictionary, 1904.

Ohjelmointiparadigma Ohjelmointiparadigma on nimetty kokoelma ohjelmointikäytänteitä, joiden taustalla on enemmän tai vähemmän yhtenäinen näkemys siitä, mitä ohjelmoinnin ja ohjelien tulisi olla. Ohjelmointiparadigmat ovat yleensä toisensa poissulkevia (vaikkakin niissä voi olla yhteisiä piirteitä).

Ohjelmointiparadigmoja olio-ohjelmointi (object-oriented programming) Ohjelma on olioiden keskustelukerho. funktio-ohjelmointi (functional programming) Ohjelma on matemaattinen kuvaus syötteeltä tulosteelle. logiikkaohjelmolinti (logic programming) Ohjelma on looginen pähkinä, jonka tietokone ratkaisee. käskyohjelmointi (imperative programming) Ohjelma on käskyjono. toiminto-ohjelmointi (procedural programming) Ohjelma koostuu toiminnoista (procedures), jotka voivat koostua muista toiminnoista.

Funktio-ohjelmointi hello(_) = "Hello, World!" sum1([]) = 0 sum1(x : r) = x + sum1(r) add(a, b) = a + b sum2([]) = 0 sum2(x : r) = add(x, sum1(r)) foldr(f, z, []) = z foldr(f, z, (x : r)) = f (x, foldr(f, z, r)) sum3(l) = foldr(add, 0, l)

Funktio-ohjelmoinnin piirteitä ohjelma rakentuu yhdistelemällä funktioita isommiksi funktioiksi funktiot voivat ottaa parametrikseen ja palauttaa funktioita tällaiset funktiot ovat funktionaaleja (engl. higher-order functions, HOFs) silmukatkin ilmaistaan rekursiona tai funktionaaleina (esim. foldr puutietorakenteet funktioiden määrittely paloittain yhtälöillä

Logiikkaohjelmointi lapsi(vapputuomioja, erkkituomioja). lapsi(hellawuolijoki, vapputuomioja). lapsi(taunopalo, eskosalminen). lapsi(eskosalminen, kristosalminen). lapsi(eskosalminen, kreetasalminen). lapsi(rafaelpaasio, perttipaasio). lapsi(perttipaasio, helipaasio). lapsenlapsi(x, Y) lapsi(x, Z), lapsi(z, Y). Kiitokset muutamalle Facebook-tuttavalleni esimerkki-ihmisten ehdottamisesta.

lapsenlapsi(taunopalo, X) = X = kristosalminen; X = kreetasalminen. lapsenlapsi(x, helipaasio) = X = rafaelpaasio. lapsenlapsi(x, Y) = X = hellawuolijoki, Y = erkkituomioja; X = taunopalo, Y = kristosalminen; X = taunopalo, Y = kreetasalminen; X = rafaelpaasio, Y = helipaasio.

Logiikkaohjelmoinnin piirteitä ohjelma rakentuu faktatietokannasta ja joukosta päättelysääntöjä päättelysäännöillä määritellään aliohjelmia ohjelma on väite, ja sen suoritus on yritys todistaa se oikeaksi aliohjelmassa syöte- ja tulostiedot riippuvat käyttötavasta, ei (yleensä) määritelmästä puutitetorakenteet

Kieliparadigma Kieliparadigma on joukko, jonka alkioita yhdistää jonkin merkityksellinen samankaltaisuus. Kieliparadigmassa on yleensä paradigmaattinen kieli, jota pidetään kyseisen paradigman esimerkillisenä edustajana. Usein (mutta ei aina) paradigman paradigmaattinen kieli on ollut muiden paradigmaan kuuluvien kielten esikuva. Kieliparadigmaan liittyy usein jokin ohjelmointiparadigma. Jos paradigmaattinen kieli on muiden paradigman kielten esikuva, puhutaan tavallisesti kieliperheestä tai -suvusta.

Kieliparadigmoja Algol, Pascal, C,... C, C++, Java, C#,... Simula, Smalltalk, Objective-C, C++, Java, C#, Delphi,... Lisp, Scheme, Clojure,... ML, SML, O Caml, Haskell, Miranda, Clean,... Lazy ML, Miranda, Clean, Haskell,... Prolog, Mercury,...

Sisällys

Syntaksi semantiikka syntaksi eli kielioppi määrittelee, mitkä merkkijonot ovat kielen ohjelmia (dynaaminen) semantiikka kertoo, mitä kielen ohjelmat tekevät välissä on ns. staattinen semantiikka eli rajoitteet (constraints) Pitääkö muuttujat esitellä ennen käyttöä? Pitääkö ohjelma todistaa tyyppiviheettömäksi ennen suoritusta?

Staattinen dynaaminen Ohjelman ominaisuus on staattinen (eli käännösaikainen), jos se on selvitettävissä ennen suorituksen alkua. ohjelmatekstin koko muuttujan nimi Ohjelman ominaisuus on dynaaminen (eli suoritusaikainen), jos se riippuu ohjelman suorituskerrasta ja sen etenemisestä ohjelman suorituksen kesto muuttujan arvo (yleensä)

Arvo olio arvo on muuttumaton, ajaton, identiteetitön, reagoimaton oliolla on tila, joka voi muuttua identiteetti, joka erottaa sen muista olioista muutoksista huolimatta käyttäytyminen, sillä se reagoi sille tuleviin ärsykkeisiin

Tyyppi, tyyppivirhe olion tyyppi kertoo, mihin ärsykkeisiin se osaa reagoida arvon tyyppi kertoo, mitä arvolle voi tehdä niiden olioiden ja arvojen joukkoa, joilla on yhteinen tyyppi, sanotaan tuon tyypin ekstensioksi tyyppivirhe on ohjelman suorituksen aikana esiintyvä tilanne, jossa oliolle annetaan sellainen ärsyke, johon se ei osaa reagoida, tai jossa arvolle tehdään jotain sellaista, jota sille ei voi tehdä tyyppivirhe aiheuttaa ohjelman sekoamisen

Tyypitys Kieli on vahvasti tyypitetty, jos se estää kaikki tyyppivirheet heikosti tyypitetty, jos se estää vain osan tyyppivirheistä tyypitön jos se ei estä mitään tyyppivirhettä Usein myös vertaillaan kahden heikosti tyypitetyn kielen vahvuutta. Vahva tai heikko tyypitys voi olla staattinen, jos se estää kaikki tyyppivirheet ennen suorituksen alkua dynaaminen, jos se estää tyyppivirheen silloin kun se tulee suorituksen aikana käsille Kieli voi olla yhtä aikaa staattisesti ja dynaamisesti tyypitetty.

Poikkeavia näkemyksiä Jotkut tarkoittavat vahvalla tyypityksellä staattista tyypitystä. Jotkut tarkoittavat tyypittömyydellä dynaamista tyypitystä. Jotkut tarkoittavat staattisella tyypityksellä, että muuttujan tyyppi on staattinen ominaisuus.