Esoteeriset ohjelmointikielet ja reaalilukutuki
Järvinen, Niko (2021)
Järvinen, Niko
2021
Tietojenkäsittelytieteiden kandidaattiohjelma - Bachelor's Programme in Computer Sciences
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2021-02-09
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202101311810
https://urn.fi/URN:NBN:fi:tuni-202101311810
Tiivistelmä
Esoteeriset kielet ovat jo pitkään tarjonneet moninaisia haasteita ohjelmoijien ratkaistavaksi. Perinteisistä ohjelmointikielistä poiketen, monet esoteeriset kielet pyrkivät olemaan haastavia tai jopa mahdottomia käyttää toimivien ohjelmien toteuttamiseen. Tämän takia kielistä on usein jätetty pois Turingin koneen tavoin lähes kaikki tarpeeton, kuten tuki reaaliluvuille ja monimutkaisille aritmeettisille operaatioille. Esoteeriset kielet ovat kasvattaneet suosiotaan erityisesti koodigolfaajien joukossa, jonka vuoksi tarve entistä monimutkaisemmille yleiskäyttöisille algoritmeille on kasvanut. Tällaisia algoritmeja ovat muun muassa tässä tutkielmassa käsiteltävät reaalilukujen aritmeettiset operaatiot.
Tutkielman tavoitteena on teorian ja käytännönläheisten toteutusten avulla selvittää, mikä on intuitiivisuuden kannalta paras lähestymistapa reaalilukujen aritmeettisten operaatioiden toteuttamiselle tutkielmassa esitellyillä esoteerisilla kielillä. Tämän lisäksi työ pyrkii luomaan käsityksen siitä, millaiset kielten ominaisuudet parantavat tai huonontavat erinäisten lähestymistapojen intuitiivisuutta ja miten kielten asettamia rajoituksia voi helpottaa.
Tutkielmassa perehdytään kahteen yleisesti käytössä olevaan reaalilukuesitykseen; kiinteän pisteen numeroihin ja IEEE 754 -standardin mukaisiin perustarkkuuden liukulukuihin. Tutkielmassa pohditaan eri reaalilukuesitysten aritmeettisten operaatioiden toteutusten käytännöllisyyttä erityisesti toteutuksen muistinhallinnan, intuitiivisuuden ja helppouden näkökulmista. Eri reaalilukuesityksistä kiinteän pisteen numerot osoitetaan liukulukuja intuitiivisemmiksi Brainfuckissa ja Befunge-93:ssa, toisin kuin Jellyssä, jossa on sisäänrakennettu tuki liukuluvuille ja niiden aritmeettisille operaatioille.
Tutkielmaa varten Brainfuckilla toteutettiin kiinteän pisteen numeroiden yhteen- ja kertolaskualgoritmi, jotka osoittavat ehdotetun konseptin toimivuuden. Tämän lisäksi operaatioista haastavampi, kertolasku, toteutettiin Befunge-93:lla kiinteän pisteen numeroille osoittamaan kielten erilaiset tarpeet ongelmanratkaisussa käytetyille lähestymistavoille.
Tutkielman tavoitteena on teorian ja käytännönläheisten toteutusten avulla selvittää, mikä on intuitiivisuuden kannalta paras lähestymistapa reaalilukujen aritmeettisten operaatioiden toteuttamiselle tutkielmassa esitellyillä esoteerisilla kielillä. Tämän lisäksi työ pyrkii luomaan käsityksen siitä, millaiset kielten ominaisuudet parantavat tai huonontavat erinäisten lähestymistapojen intuitiivisuutta ja miten kielten asettamia rajoituksia voi helpottaa.
Tutkielmassa perehdytään kahteen yleisesti käytössä olevaan reaalilukuesitykseen; kiinteän pisteen numeroihin ja IEEE 754 -standardin mukaisiin perustarkkuuden liukulukuihin. Tutkielmassa pohditaan eri reaalilukuesitysten aritmeettisten operaatioiden toteutusten käytännöllisyyttä erityisesti toteutuksen muistinhallinnan, intuitiivisuuden ja helppouden näkökulmista. Eri reaalilukuesityksistä kiinteän pisteen numerot osoitetaan liukulukuja intuitiivisemmiksi Brainfuckissa ja Befunge-93:ssa, toisin kuin Jellyssä, jossa on sisäänrakennettu tuki liukuluvuille ja niiden aritmeettisille operaatioille.
Tutkielmaa varten Brainfuckilla toteutettiin kiinteän pisteen numeroiden yhteen- ja kertolaskualgoritmi, jotka osoittavat ehdotetun konseptin toimivuuden. Tämän lisäksi operaatioista haastavampi, kertolasku, toteutettiin Befunge-93:lla kiinteän pisteen numeroille osoittamaan kielten erilaiset tarpeet ongelmanratkaisussa käytetyille lähestymistavoille.
Kokoelmat
- Kandidaatintutkielmat [8430]