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