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

Samankaltaiset tiedostot
TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Groovy. Niko Jäntti Jesper Haapalinna Group 31

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

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

11/20: Konepelti auki

TIE Principles of Programming Languages CEYLON

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

15. Ohjelmoinnin tekniikkaa 15.1

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

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

15. Ohjelmoinnin tekniikkaa 15.1

7/20: Paketti kasassa ensimmäistä kertaa

Apuja ohjelmointiin» Yleisiä virheitä

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

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

Tietueet. Tietueiden määrittely

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

1. Olio-ohjelmointi 1.1

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Java-kielen perusteet

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

Javan perusteita. Janne Käki

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

Ohjelmoinnin perusteet Y Python

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

9. Periytyminen Javassa 9.1

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

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

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

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

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet

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

1 Tavoitteet. 2 Periaatteet ja ominaisuudet. 2.1 Tyyppipäättely

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

13/20: Kierrätys kannattaa koodaamisessakin

Java-kielen perusteet

1. Omat operaatiot 1.1

9. Periytyminen Javassa 9.1

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä Projektiryhmä Keimo

Osoitin ja viittaus C++:ssa

13 Operaattoreiden ylimäärittelyjä

CUDA. Moniydinohjelmointi Mikko Honkonen

12 Mallit (Templates)

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmointi 1 Taulukot ja merkkijonot

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Java-kielen perusteita

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

8. Näppäimistöltä lukeminen 8.1

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointi 1 / syksy /20: IDE

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

Olio-ohjelmointi Javalla

automaattisen tietotyypin tunnistamisen osalta, minkä Smith koki olevan avaintekijä onnistuneen rinnakkaisen ohjelmointikielen toteuttamisessa.

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

815338A Ohjelmointikielten periaatteet

12. Monimuotoisuus 12.1

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tietorakenteet ja algoritmit

7. Oliot ja viitteet 7.1

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

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

Ohjelmoinnin perusteet Y Python

Java kahdessa tunnissa. Jyry Suvilehto

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

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

16. Javan omat luokat 16.1

4. Olio-ohjelmoinista lyhyesti 4.1

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio

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

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

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Rajapinnat ja olioiden välittäminen

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Transkriptio:

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

2 D-OHJELMOINTIKIELI D-kielen historia alkaa vuodesta 1999, kun Walter Bright aloitti uuden ohjelmointikielen kehittämisen. Ensimmäinen versio julkaistiin joulukuussa 2001, joka kehittyi D1-kielen 1.0 versioksi tammikuussa 2007. D-kielen yhteisö oli tyytymätön kielen viralliseen Phobos runtime- ja standarikirjastoon, ja alkoi kehittämään vaihtoehtoista Tango-kirjastoa. Tango ja Phobos eivät olleet yhteensopivia erilaisista runtime-rajapintaratkaisuista johtuen, ja molempien yhtäaikainen kehitys aiheutti ongelmia kielen käyttäjille, joiden piti valita kumpaa kirjastoa käyttää. Kesäkuussa 2007 kielestä julkaistiin versio D2, jonka oli tarkoitus esitellä uusia ja mahdollisesti vanhan kielen kanssa yhteensopimattomia ominaisuuksia. D-kielen version D1 bugeja alettiin korjaamaan, ja samanaikaisesti D2-version kehitys jatkui kasvavaa tahtia. D2- versio erotti standard-kirjaston ajoajasta, joka mahdollisti Phoboksen ja Tangon yhteensopivuusongelmien korjaamisen. D1-version kehitys lakkautettiin joulukuussa 2012 ja versiosta D2 tuli kielen virallinen versio, jota kutsutaan nykyään yksinkertaisesti nimellä D. D on korkean tason ohjelmointikieli, jonka tavoitteena on olla turvallinen, tarjota mahdollisuus kirjoittaa suorituskyvyltään tehokasta koodia, sekä tarjota rajapinta joka antaa käyttäjälle pääsyn lähelle käyttöjärjestelmää ja laitteistoa. Ohjelmointikieli on saanut pääasiassa vaikutteita C++-ohjelmointikielestä, koska yksi tavoitteista oli suunnitella uudelleen C++-kielen ominaisuuksia. Vaikutteita on otettu myös lukuisista muista ohjelmointikielistä, kuten Java, C#, Python, Ruby ja Eiffel. D on moniparadigmainen ohjelmointikieli, joka painottuu etupäässä imperatiiviseen ja olio-ohjelmointiparadigmaan. Imperatiivinen ohjelmointi on peräisin C-perheen kielistä ja kielen syntaksi on lähes identtistä C tai C++kielen kanssa. Esimerkiksi kielen syntaksissa puolipiste ilmaisee lausekkeiden päättymisen, ja funktioiden vaikutusalue määritellään aaltosulkujen avulla. Olio-ohjelmointiominaisuuksien suunnittelussa on otettu vaikutteita Javakielestä. Toisin kuin C++, D ei salli moniperintää, ja käyttää Java-tyylisiä rajapintoja (interface). Rakentajat määritellään this-avainsanan avulla. Periyttäessä kantaluokan rakentajaa kutsutaan super-avainsanan avulla ja sitä voidaan kutsua missä tahansa kohtaa rakentajan koodia. Luokille voidaan määritellä metodeiksi C#-tyylisiä propertyjä @property-avainsanan avulla, jotka toimivat helppokäyttöisinä rajapintoina luokkien attribuutteihin. D-kielessä

3 voidaan myös vertailla suoraan Struct-tietorakenteiden yhtäsuuruutta ilman, että täytyy erikseen määritellä vertailuoperaattori. D-ohjelmointikielessä on sisäänrakennettu sopimussuunnittelun tukeminen ja poikkeukset. Tämä on tehty yhdenmukaisemmaksi, yksinkertaisemmaksi ja helpommin hallittavaksi kuin C++-kielessä. Kääntäjät voivat tehdä tehokkaampaa koodia sopimuksista saadun informaation perusteella. D- kielessä Assert määrittää lausekkeen, jonka pitää olla tosi, muussa tapauksessa heitetään poikkeus AssertError. Funktioissa sopimusten ehdot määritellään in, out, ja body-avainsanojen avulla. In-lohkossa määritellään asserteilla esiehdot. Out-lohko ottaa parametrikseen funktion paluuarvon ja tarkastaa assertin avulla jälkiehdon. Funktion normaali toiminnallisuus sijoitetaan body-lohkon sisälle. Avainsanaa invariant käytetään tarkistamaan Assertin avulla luokan tila rakentajan suorittamisen jälkeen. Kielessä on myös tuki sopimussuunnittelun periytymiselle. Metaohjelmointi toteutetaan templaateilla, joiden käyttö D-kielessä on yritetty tehdä helpommaksi kuin C++-kielessä yksinkertaistamalla syntaksia. Jos mahdollista, funktiot suoritetaan käännösaikana optimointisyistä. Funktionaalisen ohjelmoinnin ominaisuuksia D-kielessä ovat muun muassa sulkeumat ja lambda-lauseet. Lisäksi D tukee rinnakkaista ohjelmointia. D on staattisesti tyypitetty kieli samoin kuin C ja C++, eli muuttujan tyyppi tarvii tietää jo käännösaikana. Template-metaohjelmoinnilla voidaan mallintaa dynaamista tyypitystä. Muistinhallinta tapahtuu roskienkeruun avulla. D mahdollistaa kattavan roskienkeruun hallinnan. Ohjelmoija voi tarvittaessa ottaa roskienkeruun pois päältä tai muokata tarkkailtua muistialuetta. Kieli sisältää myös C-kielen mallocja free-funktiot. D sisältää kaikki C++ vastaavat primitiivityypit. Avainsana unsigned on hylätty ja positiiviset tyypit merkitään lyhyemmin u-etuliitteellä, kuten esimerkiksi uint. Liukulukujen laskentatarkkuutta on parannettu tukemalla real-tyyppiä, joka on prosessorituesta riippuen joko double tai laajennettu 80-bittinen esitys. Kieleen on sisällytetty eritysarvot, - ja NaN (Not-a-Number), jotka auttavat virheiden tunnistamisessa liukulukuja käsiteltäessä. Jokaiselle primitiivityypille on määritelty oletusalustaja (.init), joka varmistaa, että muuttujalle on aina asetettu arvo vaikka sitä ei alustettaisi koodissa. Tämä poistaa määrittelemättömäksi jääneistä muuttujista johtuvat virheet. D-kielen säiliöitä ovat array, binaryheap, dlist, rbtree ja slist. Array pelkällä []- merkinnällä on C++-kielen vector- ja deque-säiliöitä vastaava dynaaminen tietorakenne. Asettamalla hakasulkujen sisälle kokonaisluku saadaan C-kielen

4 arrayta vastaava staattinen tietorakenne. Assosiatiivinen array voidaan tehdä asettamalla hakasulkujen sisälle tyyppi, joka toimii indeksinä, kuten esimerkiksi string[string] hello. Tämän jälkeen voidaan taulukkoon tallentamisen yhteydessä asettaa tunniste hakasulkujen sisälle, joka toimii indeksinä alkiolle. D-kielen string on toteutettuna array tietorakenteen erikoistuksena, joten char-tyyppistä taulukkoa voidaan vertailla string-tietotyyppiin. D nopeuttaa käännösprosessia käyttämällä kirjastojen symbolista sisällyttämistä. C ja C++ käyttävät esiprosessorin include-mekanismia, joka lisää sisällytettävän tiedoston sisällön suoraan tekstinä käännettävään tiedostoon. Suurissa projekteissa tämä voi hidastaa käännösaikaa huomattavasti, ja vaatii makrojen käyttöä useiden lisäysten estämiseksi. D:ssä sisällytettävät tiedostot käännetään etukäteen. Myös useita muita C- esikääntäjän makroja on muutettu D:ssä kielen sisäänrakennetuiksi ominaisuuksiksi. Nimiavaruudet on D:ssä toteutettu module-mekanismilla. Jokainen moduuli on omassa tiedostossaan, ja rajoittaa nimiavaruuden tiedoston sisältöön. C++:n using-esittely on korvattu alias-avainsanalla, jota voi käyttää myös muiden käsitteiden kuten tyyppien tai funktioiden uudelleennimeämiseen. Toisin kuin C++:n typedef, alias ei luo uutta tyyppiä. Moduulejen lisäysjärjestys ei vaikuta ohjelman semantiikkaan. Moduuleista voi kasata packageiksi kutsuttuja hierarkioita. Kielelle on tarjolla useita kääntäjätoteutuksia. DMD on Walter Brightin virallinen D kääntäjä, ja GDC ja LDC ovat avoimen lähdekoodin vaihtoehtoja. D:tä tukevia integroituja kehitysympäristöjä ovat mm. Eclipse, Microsoft Visual Studio, Emacs ja MonoDevelop. Vaikka joissain tapauksissa D saattaa olla nopeampi, C++-kääntäjät näyttäisivät kuitenkin tuottavan yleisesti nopeampaa koodia. D:n muistinhallinta vaikuttaisi olevan suoritusta eniten hidastava tekijä. D-ohjelmointikieltä käytetään korvaamaan C++-kieltä järjestelmissä, joissa vaaditaan suorituskyvyltään tehokasta koodia ja korkeamman tason ohjelmointikielen ominaisuuksia lisäämään tuottavuutta. Mainittavia asioita ovat esimerkiksi yksinkertaisempi syntaksi templateille ja funktionaaliselle ohjelmoinnille, sekä roskienkeruu. Esimerkiksi Facebook on alkanut käyttämään D-kieltä tuotannossa ja suomalainen peliteollisuus Remedy on myös kiinnostunut siitä.

5 Lähteet: http://dlang.org/ https://en.wikipedia.org/wiki/d_(programming_language) http://forum.dlang.org/post/sxbssnhflvzklpyfvtlp@forum.dlang.org http://www.drdobbs.com/mobile/facebook-adopts-d-language/240162694