Ajonaikaisesti käännetty ohjelmointikieli
Hyvönen, Saku (2021)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2021061516063
https://urn.fi/URN:NBN:fi:amk-2021061516063
Tiivistelmä
Tämä opinnäytetyö on tehty aikaisemmin aloitetusta henkilökohtaisesta projektista, jossa tarkoituksena on luoda ajonaikaisesti käännetty ohjelmointikieli. Tämä ohjelmointikieli päätettiin luoda johtuen syvemmästä mielenkiinnosta ohjelmointikieliä, ja kääntäjiä kohtaan. Tämä projekti koettiin melko tärkeäksi niin, että lopputuloksesta yritettiin saada tasokas. Ohjelmointikielen nopeutta pidettiin erityisen suurena osana laatua. Ohjelmointikielien kääntämisellä prosessorille on tunnettu tehokkuusetu, joten kielestä päätettiin luoda käännetty. Tämä projekti oli liian suuri opinnäytetyöksi, joten kaikkia projektin osa-alueaita on yksinkertaistettu huomattavasti. Päätavoitteeksi asetettiin toimiva kokonaisuus, jossa mahdollisimman yksinkertainen ohjelmointikieli käännetään prosessorille.
Projektin hyvin aikaisessa vaiheessa kielelle oli päätettävä tarkka toteutustapa. Ohjelmointikielen toteutustapoja aloitetiin tutkimaan. Tutkimuksessa havaittiin useita etuja sille, että kieli käännettäisiin ensin virtuaalikoneelle, ennen prosessorille kääntämistä. Virtuaalikone voidaan suunnitella alustastaan riippumattomaksi alustaksi. Tämä tarkoittaa sitä, että virtuaalikoneen ohjelmana toteutetut kielet tukevat kaikkia alustoja, joilla virtuaalikoneen ohjelmien suoritus on tuettu. Virtuaalikoneella on paljon suurempikin etu, virtuaalikone voidaan myös suunnitella kieliriippumattomaksi niin, että sille voidaan kääntää useita erilaisia ohjelmointikieliä. Tässä projektissa tämä sallii paljon vapaamman kielien prototyyppien rakentamisen niin, että vain pieneen, kieltä lähellä oleviin osiin kääntäjässä pitää tehdä muutoksia. Näistä suurista eduista johtuen projektissa koettiin hyvin tärkeäksi kääntää kieli ensin virtuaalikoneen ohjelmaksi, joka taas sitten käännetään eteenpäin prosessorille. Tämä asetettiin tavoitteeksi.
Opinnäytetyön tuloksena syntyi tavoitteena oleva kokonaisuus, jossa omatekoinen ohjelmointikieli käännetään ensin virtuaalikoneen ohjelmaksi, ja tämän virtuaalikoneen ohjelma sitten käännetään eteenpäin x86-prosessorille Linux-ympäristössä. Tämän toimivan kokonaisuuden aikaansaaminen oli ominaisuuksia ja hienosäätöä korkeampi prioriteetti. Ominaisuuksien puutos näkyy selvästi ohjelmointikielessä. Ohjelmointikieli ei tue muuta, kuin laskutoimituksia, päätöksentekoa (if-lause), silmukoita (while-silmukka), ja konsolille tulostusta. Virtuaalikone ja kääntäjä juuri ja juuri tukevat tarvittavia ominaisuuksia tämän kielen kääntämiseen. Kääntäjä ei myöskään suorita mitään optimointeja. Tämän lisäksi toteutuksessa on jouduttu tekemään monia yksinkertaistuksia. Tässä dokumentissa on esitetty lukuisia parannusehdotuksia nykyiseen kokonaisuuteen. Kokonaisuudessa on paljon rajoitteita ja puutteita, mutta tämän rajatun opinnäytetyön tavoite ei ollutkaan luoda täydellistä ohjelmointikieltä tai kääntäjää, joten tavoitteet on saavutettu.
Tällä projektilla on käytännössä loputtomat laajennus- ja jatkokehitysmahdollisuudet. Alkuperäisenä ideana oli tehdä hyvä ja käytännöllinen kieli. Tätä projektia aiotaan jatkaa opinnäytetyön jälkeen. Ohjelmointikielen ja kääntäjän suunnittelu ovat kummatkin hyvin aikaavieviä prosesseja. Itse kielen ja tehokkaan kääntäjän lisäksi kielelle voidaan rakentaa kattava joukko kirjastoja. Ohjelmointikielelle voidaan myös rakentaa työkalut, kuten esimerkiksi kehitysympäristö.
Projektin hyvin aikaisessa vaiheessa kielelle oli päätettävä tarkka toteutustapa. Ohjelmointikielen toteutustapoja aloitetiin tutkimaan. Tutkimuksessa havaittiin useita etuja sille, että kieli käännettäisiin ensin virtuaalikoneelle, ennen prosessorille kääntämistä. Virtuaalikone voidaan suunnitella alustastaan riippumattomaksi alustaksi. Tämä tarkoittaa sitä, että virtuaalikoneen ohjelmana toteutetut kielet tukevat kaikkia alustoja, joilla virtuaalikoneen ohjelmien suoritus on tuettu. Virtuaalikoneella on paljon suurempikin etu, virtuaalikone voidaan myös suunnitella kieliriippumattomaksi niin, että sille voidaan kääntää useita erilaisia ohjelmointikieliä. Tässä projektissa tämä sallii paljon vapaamman kielien prototyyppien rakentamisen niin, että vain pieneen, kieltä lähellä oleviin osiin kääntäjässä pitää tehdä muutoksia. Näistä suurista eduista johtuen projektissa koettiin hyvin tärkeäksi kääntää kieli ensin virtuaalikoneen ohjelmaksi, joka taas sitten käännetään eteenpäin prosessorille. Tämä asetettiin tavoitteeksi.
Opinnäytetyön tuloksena syntyi tavoitteena oleva kokonaisuus, jossa omatekoinen ohjelmointikieli käännetään ensin virtuaalikoneen ohjelmaksi, ja tämän virtuaalikoneen ohjelma sitten käännetään eteenpäin x86-prosessorille Linux-ympäristössä. Tämän toimivan kokonaisuuden aikaansaaminen oli ominaisuuksia ja hienosäätöä korkeampi prioriteetti. Ominaisuuksien puutos näkyy selvästi ohjelmointikielessä. Ohjelmointikieli ei tue muuta, kuin laskutoimituksia, päätöksentekoa (if-lause), silmukoita (while-silmukka), ja konsolille tulostusta. Virtuaalikone ja kääntäjä juuri ja juuri tukevat tarvittavia ominaisuuksia tämän kielen kääntämiseen. Kääntäjä ei myöskään suorita mitään optimointeja. Tämän lisäksi toteutuksessa on jouduttu tekemään monia yksinkertaistuksia. Tässä dokumentissa on esitetty lukuisia parannusehdotuksia nykyiseen kokonaisuuteen. Kokonaisuudessa on paljon rajoitteita ja puutteita, mutta tämän rajatun opinnäytetyön tavoite ei ollutkaan luoda täydellistä ohjelmointikieltä tai kääntäjää, joten tavoitteet on saavutettu.
Tällä projektilla on käytännössä loputtomat laajennus- ja jatkokehitysmahdollisuudet. Alkuperäisenä ideana oli tehdä hyvä ja käytännöllinen kieli. Tätä projektia aiotaan jatkaa opinnäytetyön jälkeen. Ohjelmointikielen ja kääntäjän suunnittelu ovat kummatkin hyvin aikaavieviä prosesseja. Itse kielen ja tehokkaan kääntäjän lisäksi kielelle voidaan rakentaa kattava joukko kirjastoja. Ohjelmointikielelle voidaan myös rakentaa työkalut, kuten esimerkiksi kehitysympäristö.