Rinnakkaisuus ohjelmointikielissä : Rust ja Go
Koski, Topi (2023)
Koski, Topi
2023
Tieto- ja sähkötekniikan kandidaattiohjelma - Bachelor's Programme in Computing and Electrical Engineering
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ä
2023-12-15
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-2023121310812
https://urn.fi/URN:NBN:fi:tuni-2023121310812
Tiivistelmä
Rinnakkaisuus on ollut osana ohjelmointia jo pitkään ja sen merkitys ohjelmistoissa on kasvanut moniydinprosessorien yleistyessä. Ohjelmoijan kannalta rinnakkaisuus tarjoaa mahdollisuuden tehostaa ohjelman suoritusta jakamalla ohjelma erillisiin osiin, jotka voidaan suorittaa yhtäaikaisesti. Tämä tuo kuitenkin vastaan ongelmia, joiden ratkaiseminen on pitkälti ohjelmoijan vastuulla.
Lähes kaikki nykypäivän ohjelmointikielet tarjoavat keinoja ohjelmoijalle rinnakkaisuuden toteuttamiseen. Tässä työssä käsiteltävät kielet Rust ja Go ovat kummatkin käännettäviä avoimen lähdekoodin ohjelmointikieliä. Molempien ensimmäinen versio on julkaistu 2010-luvulla, ja ne ovat saaneet suosioita sekä yksittäisten ohjelmoijien että suurten ohjelmistoyritysten keskuudessa. Rustin tavoitteena on olla turvallinen ja nopea järjestelmäohjelmointiin tarkoitettu kieli. Go on taas tarkoitettu suurempiin projekteihin, joihin tarvitaan skaalautuva ja yksinkertainen ohjelmointikieli.
Tässä työssä tutkitaan, miten Rust- ja Go-ohjelmointikielissä on toteutettu rinnakkaisuus standardikirjastossa, miten nämä toteutukset eroavat toisistaan, sekä mitä yhtäläisyyksiä niissä on. Näiden lisäksi käydään myös läpi kielten pääasialliset käyttötarkoitukset, sillä ne vaikuttavat siihen, mitä kielet painottavat toteutuksissaan. Vertailu tapahtui tutkimalla kielten dokumentaatioita, niihin liittyviä tutkimuksia ja muuta kirjallisuutta. Tarkoituksena on saada yleiskuva kielten rinnakkaisuudesta.
Kummatkin ohjelmointikielet antavat ohjelmoijalle mahdollisuuden toteuttaa rinnakkaisuutta perinteisten synkronointimekanismien ja kanavien avulla. Go kuitenkin painottaa enemmän kanavien käyttöä rinnakkaisuudessa, kun taas Rust tarjoaa standardikirjastossa vain tiettyjä ominaisuuksia ja kannustaa ohjelmoijaa käyttämään omia tai ulkoisia kirjastoja. Suurin ero kielten välillä on säikeiden toteutuksissa. Rustissa luotavat säikeet ovat käyttöjärjestelmän säikeitä vastaavia, mikä tukee laitteistonläheistä ohjelmointia. Go:ssa luotavat gorutiinit ovat taas kevyitä säikeitä, joiden luomisen yleiskustannukset ovat paljon pienemmät, kuin käyttöjärjestelmäsäikeiden luonti. Tämä tukee Go:n tarkoitusta olla yksinkertainen kieli.
Lähes kaikki nykypäivän ohjelmointikielet tarjoavat keinoja ohjelmoijalle rinnakkaisuuden toteuttamiseen. Tässä työssä käsiteltävät kielet Rust ja Go ovat kummatkin käännettäviä avoimen lähdekoodin ohjelmointikieliä. Molempien ensimmäinen versio on julkaistu 2010-luvulla, ja ne ovat saaneet suosioita sekä yksittäisten ohjelmoijien että suurten ohjelmistoyritysten keskuudessa. Rustin tavoitteena on olla turvallinen ja nopea järjestelmäohjelmointiin tarkoitettu kieli. Go on taas tarkoitettu suurempiin projekteihin, joihin tarvitaan skaalautuva ja yksinkertainen ohjelmointikieli.
Tässä työssä tutkitaan, miten Rust- ja Go-ohjelmointikielissä on toteutettu rinnakkaisuus standardikirjastossa, miten nämä toteutukset eroavat toisistaan, sekä mitä yhtäläisyyksiä niissä on. Näiden lisäksi käydään myös läpi kielten pääasialliset käyttötarkoitukset, sillä ne vaikuttavat siihen, mitä kielet painottavat toteutuksissaan. Vertailu tapahtui tutkimalla kielten dokumentaatioita, niihin liittyviä tutkimuksia ja muuta kirjallisuutta. Tarkoituksena on saada yleiskuva kielten rinnakkaisuudesta.
Kummatkin ohjelmointikielet antavat ohjelmoijalle mahdollisuuden toteuttaa rinnakkaisuutta perinteisten synkronointimekanismien ja kanavien avulla. Go kuitenkin painottaa enemmän kanavien käyttöä rinnakkaisuudessa, kun taas Rust tarjoaa standardikirjastossa vain tiettyjä ominaisuuksia ja kannustaa ohjelmoijaa käyttämään omia tai ulkoisia kirjastoja. Suurin ero kielten välillä on säikeiden toteutuksissa. Rustissa luotavat säikeet ovat käyttöjärjestelmän säikeitä vastaavia, mikä tukee laitteistonläheistä ohjelmointia. Go:ssa luotavat gorutiinit ovat taas kevyitä säikeitä, joiden luomisen yleiskustannukset ovat paljon pienemmät, kuin käyttöjärjestelmäsäikeiden luonti. Tämä tukee Go:n tarkoitusta olla yksinkertainen kieli.
Kokoelmat
- Kandidaatintutkielmat [8683]