TIE Principles of Programming Languages CEYLON

Samankaltaiset tiedostot
ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

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

Clojure, funktionaalinen Lisp murre

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

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

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

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

15. Ohjelmoinnin tekniikkaa 15.1

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

15. Ohjelmoinnin tekniikkaa 15.1

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Olio-ohjelmointi Javalla

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

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

Groovy. Niko Jäntti Jesper Haapalinna Group 31

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

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

11/20: Konepelti auki

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

Taulukot. Jukka Harju, Jukka Juslin

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

Osoitin ja viittaus C++:ssa

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

Haskell ohjelmointikielen tyyppijärjestelmä

9. Periytyminen Javassa 9.1

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

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

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

Kielioppia: toisin kuin Javassa

Java-kielen perusteet

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Copyright Observis Oy All rights reserved. Observis Oy Ville Kanerva, CTO Heikki Isotalus, COO Datasta tietoa

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

13/20: Kierrätys kannattaa koodaamisessakin

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Harjoitustyö: virtuaalikone

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

812341A Olio-ohjelmointi, I Johdanto

Common Language Runtime

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

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

Java-kielen perusteet

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

7. Oliot ja viitteet 7.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Ohjelmointiharjoituksia Arduino-ympäristössä

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

7. Näytölle tulostaminen 7.1

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Tutoriaaliläsnäoloista

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

1. Olio-ohjelmointi 1.1

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

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

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

Harjoitus 6 (viikko 42)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

1. Omat operaatiot 1.1

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Java kahdessa tunnissa. Jyry Suvilehto

Common Lisp Object System

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Javan perusteita. Janne Käki

Java-kielen perusteet

17. Javan omat luokat 17.1

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

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

811120P Diskreetit rakenteet

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

9. Periytyminen Javassa 9.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Ohjelmointi 1 C#, kevät 2013, 2. tentti

14. Poikkeukset 14.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Loppukurssin järjestelyt C:n edistyneet piirteet

Oliot viestivät metodeja kutsuen

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Ohjelmointi 1 / syksy /20: IDE

12. Monimuotoisuus 12.1

Metodien tekeminen Javalla

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Racket ohjelmointia osa 1. Tiina Partanen Lielahden koulu 2014

4. Lausekielinen ohjelmointi 4.1

Transkriptio:

TIE-20306 Principles of Programming Languages CEYLON

SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita ominaisuuksia... 3 3. YHTEENVETO... 5 4. LÄHTEET... 6

1 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMI- SESTÄ Ceylon on staattisesti tyypitetty ja oliopohjainen ohjelmointikieli jonka ensimmäinen versio julkaistiin vuonna 2013. Ceylon nimenä viittaa Sri Lankan saareen, joka aiemmin tunnettiin nimellä Ceylon. Nimi on epäsuora viittaus Java ohjelmointikieleen, jonka nimi tunnetusti tulee Jaavan saaresta. Ceylonin kehittämisestä vastaa Red Hat ja kielen pääsuunnittelijana on toiminut Gavin King. Kuten nimestäkin siis voi epäillä, muista tunnetuimmista ohjelmointikielistä Ceylon muistuttaa eniten Javaa. Kielet muistuttavat toisiaan niin paljon, että kieliä vertailtaessa onkin yhteneväisten ominaisuuksien luettelemisen sijaan järkevintä keskittyä niiden eroihin. Ceylonin kehittämisen lähtökohtana on ollut kehittää Javan pohjalta uusi kieli joka sisältäisi Javan hyväksi katsotut ominaisuudet, samalla kuitenkin parannellen sen sisältämiä puutteita. Puutteiden korjaamiseksi Ceyloniin on otettu myös vaikutteita muista ohjelmointikielistä. Vaikuttaneita antaneita kieliä ovat esimerkiksi Scala, smalltalk, ja ML. Koska Ceylon perustuu Javaan, se voidaan ajaa Javan Virtual Machinella tai vaihtoehtoisesti myös eri JavaScript virtuaalikoneilla. Tulevaisuudessa Ceyloniin on tulossa kääntäjä myös Dart VM:lle. Ceylon on avointa lähdekoodia ja se on saatavissa Githubista (Ceylon 2016) Pääsuunnittelija Gavin Kingin mukaan Ceylonin kehittämisessä on ollut viisi keskeistä tavoitetta mitä kielellä pyritään saavuttamaan: luettavuus, ennakoitavuus, yhteensopivuus erilaisten työkalujen kanssa, modulaarisuus ja metaohjelmoitavuus. Luettavuudella tarkoitetaan, että kieltä on mahdollisimman helppo lukea ja ymmärtää. Tällä pyritään helpottamaan ihmisten välistä kommunikaatiota ja ryhmätyöskentelyä. Ennakoitavuuden tavoitteena on ohjelman mahdollisimman intuitiivinen käyttäytyminen. Esimerkiksi kääntäjän tulisi antaa virheilmoitukset niin, että ohjelmoija ymmärtäisi heti missä vika todella sijaitsee. Kolmas tavoite eli mahdollisimman hyvä yhteensopivuus erilaisten työkalujen, kuten erilaisten ohjelmointiympäristöjen kanssa, pyritään saavuttamaan karsimalla kielestä ominaisuuksia, jotka voisivat heikentää työkalujen kykyä ymmärtää kieltä. Modulaarisuus on tärkeää ohjelman koon kasvaessa ja siksi se onkin valmiiksi sisäänrakennettuna Ceyloniin. Viides tavoite metaohjelmoitavuus eli ohjelman kyky kirjoittaa koodia. Väärinkäytettynä metaohjelmoinnista saattaa olla enemmän haittaa kuin hyötyä ja siksi kehittäjien tavoitteena onkin käyttää sitä rajoitetusti ja hyvin kurinalaisesti. (King 2012)

2 2. CEYLONIN OMINAISUUKSIA 2.1 Modulaarisuus Yksi Ceylonin pääsuunnitteluperiaatteista on modulaarisuus. Kielen ydinmoduuli Ceylon.language sisältää ohjelman toiminnan kannalta välttämättömät ominaisuudet, kuten tietotyypit. Kaikki muut ominaisuudet, kuten esimerkiksi rinnakkaisuus, tiedostojen käsittely, tietokantayhteydet ja JSON datan parsiminen on toteutettu omina moduuleinaan. Ydinmoduuli toimii sekä Javan että JavaScriptin virtuaalikoneissa, jonka takia se on mahdollisimman pienikokoinen. Lisämoduuleista osa on toteutettu molemmille alustoille ja osa vain toiselle. Esimerkiksi tiedostojärjestelmän käsittely on vain Javalle. Moduuleissa voi olla myös riippuvuuksia Javan tai JavaScriptin kirjastoihin, jolloin ne toimivat vain kyseisellä alustalla. (Ceylon 2016) Moduulit sijaitsevat avoimessa Ceylon Herd repositoriossa. Herd tarjoaa web-käyttöliittymän ja REST API:n sen käyttöä varten. Moduulirepositorio on myös integroitu kieleen siten, että kääntäjä ja IDE hakevat tarvittavat moduulit automaattisesti. Kuka tahansa voi julkaista moduulinsa Herdiin, jolloin se on kaikkien saatavilla. 2.2 Tyypit Ceylon on staattisesti tyypitetty kieli. Se sisältää tyyppien päättelyn (type inference), jolloin muuttujan tyyppiä ei tarvitse kirjoittaa sen määrittelyn yhteydessä. Esimerkiksi jos muuttujan arvoksi alustetaan jonkin kokonaisluku, kääntäjä päättelee muuttujan tyypiksi integer. Tällaiset muuttujat esitellään avainsanalla value. (King 2016) Value number = 1; Flow tyyppiä (flow-sensitive typing) käyttämällä muuttujan tyyppiä voidaan muuttaa funktion sisällä. Kääntäjä osaa päätellä oikean tyypin. void hello(object? name) { if (is String name) { print("hello ``name``"); } else if (exists name) { } print("hello object ``name``");

3 else { } print("hello world"); } Kielen perustietotyypit ovat string, boolean, integer, float ja character. Nämä kaikki on toteutettu olioina. Mielenkiintoisena ominaisuutena Ceylonissa on mahdollista muodostaa uusia tyyppejä käyttäen aiemmin määriteltyjen tyyppien leikkauksia (intersection) tai yhdisteitä (union). Esimerkiksi voidaan määritellä funktio joka tulostaa sille parametrina annetun muuttujan tyypin. void printtype(string Integer Float val) {... } Tätä funktiota voidaan kutsua kaikilla sille määritellyillä tyypeillä. printtype("hello"); printtype(69); printtype(-1.0); Union-tyyppiä käyttämällä on myös mahdollista palauttaa useampia oliota funktion paluuarvona. 2.3 Muita ominaisuuksia Modulaarisuus ja tyypitykseen liittyvät asiat ovat kenties oleellisemmasta päästä Ceylonin ominaisuuksista, tämän lisäksi kielessä on myös muita mielenkiintoisia ominaisuuksia. Ceylon on olio-ohjelmointikieli, jolla on funktionaalisia piirteitä, näitä ovat esimerkiksi muuttumattomat vakiot ja korkean asteen funktiot. Kieli ei kuitenkaan ole puhtaan funktionaalinen ja funktioilla voi olla sivuvaikutuksia. Ceylon ei myöskään tue funktioiden kuormitusta, vaan jokaisella funktiolla täyttyy olla oma nimensä. Funktioiden käytössä Ceylon eroaa merkittävimmin Javasta siinä, että Ceylonissa funktioiden ei tarvitse kuulua mihinkään luokkaan. (Ceylon 2016) Ceylonia voidaan käyttää tällä hetkellä joko Java Virtual Machinen tai erilaisten JavaScript virtuaalikoneiden kautta. Muistinhallin kannalta tämä tarkoittaa sitä, että Ceylon käyttää hyväkseen näiden virtuaalikoneiden muistinhallintaa. Esimerkiksi Java Virtual Machinea käytettäessä tämä tarkoittaa, että JVM huolehtii myös roskienkeruusta. (Ceylon 2016)

4 Mielenkiintoisena ominaisuutena ovat myös Ceylonin tarjoamat varsin laajat komentorivityökalut ja ohjelmointiympäristöt. Ceyloniin on mahdollisuus saada Eclipse IDE laajennus Ceylon IDE..

5 3. YHTEENVETO Ceylon on kieli, joka pohjautuu ja muistuttaa suuresti Javaa, pyrkien kuitenkin parantamaan Javan koettuja heikkouksia samalla vahvuudet säilyttäen. Sen samankaltaisuus saattaa kuitenkin olla este suuremman kohdeyleisön löytämisessä ja kysymys onkin ovatko Ceylonin hyvät puolet tarpeeksi merkittäviä parannuksia Javaan suuren yleisön silmissä, jotta ihmiset siirtyisivät Javan käytöstä Ceylonin käyttöön merkittävissä määrin. Tällä hetkellä Ceylon on erittäin nuori ohjelmointikieli eikä sillä ole vielä suurta kehittäjäyhteisöä. Kielellä ei ole toteutettu suuria ohjelmistoprojekteja, eivätkä suuret yritykset ole ottaneet sitä käyttöön. Edes kielen kehittäjä Red Hat ei käytä sitä omissa projekteissaan tuotantokäytössä. (Parleys 2016)

6 4. LÄHTEET Ceylon Documentation (2016). Saatavissa (Viitattu 10.11.2016): https://ceylonlang.org/documentation/1.3/introduction/ King, G. (2016). The Ceylon Language, Saatavissa (Viitattu 10.11.2016): https://ceylon-lang.org/documentation/1.3/spec/html_single/ King, G. (2012) Principles that guide this project, Saatavissa (Viitattu 11.11. 2016) https://ceylon-lang.org/blog/2012/01/10/goals/ Parleys (2016). Ceylon from here to infinity: the big picture and what's coming, Saatavissa (Viitattu 10.11.2016): https://www.youtube.com/watch?v=gen8btbhtnc