C++ vs. Rust : Vertailua muistinhallinnan helppokäyttöisyydestä
Ahvenniemi, Jarkko (2025)
Ahvenniemi, Jarkko
2025
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ä
2025-12-10
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-2025121011440
https://urn.fi/URN:NBN:fi:tuni-2025121011440
Tiivistelmä
Ohjelmointikielen helppokäyttöisyydellä on suora vaikutus ohjelman tuottamisen haastavuuteen, minkä takia se on otettava huomioon kielen valinnassa. Tässä kandidaatintyössä tutkitaan C++- ja Rust-ohjelmointikielten muistinhallinnan helppokäyttöisyyttä, sillä kielille on samanlaisia käyttökohteita ja kielten muistinhallintamallit poikkeavat toisistaan merkittävästi. Työn tavoitteena on selvittää, miten ohjelmointikielen helppokäyttöisyyttä voi mitata, mitä yhtäläisyyksiä ja eroja vertailtujen kielten välillä on ja onko yksi kielistä muistinhallinnaltaan merkittävästi helppokäyttöisempi kuin toinen.
Työ jakaantuu teoria- ja vertailuosioihin. Kirjallisuuskatsauksena toteutetussa teoriaosiossa esitellään ohjelmointikielen helppokäyttöisyyteen vaikuttavia tekijöitä. Lisäksi esitellään vertailtavat ohjelmointikielet ja niiden tärkeimmät erot erityisesti muistinhallinnan näkökulmasta. Vertailuosiossa pohditaan kielten muistinhallinnan helppokäyttöisyyttä esitettyjen helppokäyttöisyystekijöiden mukaisesti.
Ohjelmointikielen helppokäyttöisyyden osa-alueiksi tunnistetaan syntaksin selkeys, kääntäjän tai tulkin ilmoitukset, oppimiskäyrät, ohjelmointikielelle saatavilla oleva dokumentaatio sekä kielen ympärille muodostuneen käyttäjäyhteisön tarjoama apu. Modernin C++:n muistinhallinta perustuu älykkäiden osoittimien hyödyntämiseen ja vakiintuneiden ohjelmointikäytäntöjen noudattamiseen. Rustissa muistiturvallisuus saavutetaan omistuksiin pohjautuvan mallin turvallisuussäännöillä, joiden noudattamista valvotaan käännösaikana.
Vertailussa havaitaan, että C++ sallii enemmän implisiittistä käyttäytymistä, kun taas Rust vaatii selkeyttä eksplisiittisellä syntaksilla. Rustin kääntäjän todetaan antavan tarvittaessa yksityiskohtaisempaa tietoa esiintyneestä virheestä. Molempien kielten oppimiskäyriä pidetään haastavina, mutta eri tavoilla. C++:lla kirjoitettu ohjelma kääntyy helpommin, mutta muistinhallintavirheiden välttäminen on vaikeampaa. Vastaavasti Rustilla on haastavampaa saada ohjelma kääntymään, mutta lopputulos on muistiturvallisempi. Dokumentaatiota ja yhteisön apua todetaan olevan hyvin saatavilla molemmille kielille.
Vertailun tuloksista päätellään, että Rust on helppokäyttöisempi vaihtoehto silloin, kun muistiturvallisuus on ehdoton vaatimus ohjelmalle. Rustin turvallisuussääntöjä rikkova ohjelma ei käänny lainkaan, kun taas C++:ssa ajoaikaiset ongelmat ovat yleisempiä, vaikka ohjelma kääntyisi ongelmitta. C++:aa pidetään kuitenkin helppokäyttöisempänä yksinkertaisempien ohjelmien kirjoittamiseen, sillä ohjelma on helpompi saada kääntymään.
Työ jakaantuu teoria- ja vertailuosioihin. Kirjallisuuskatsauksena toteutetussa teoriaosiossa esitellään ohjelmointikielen helppokäyttöisyyteen vaikuttavia tekijöitä. Lisäksi esitellään vertailtavat ohjelmointikielet ja niiden tärkeimmät erot erityisesti muistinhallinnan näkökulmasta. Vertailuosiossa pohditaan kielten muistinhallinnan helppokäyttöisyyttä esitettyjen helppokäyttöisyystekijöiden mukaisesti.
Ohjelmointikielen helppokäyttöisyyden osa-alueiksi tunnistetaan syntaksin selkeys, kääntäjän tai tulkin ilmoitukset, oppimiskäyrät, ohjelmointikielelle saatavilla oleva dokumentaatio sekä kielen ympärille muodostuneen käyttäjäyhteisön tarjoama apu. Modernin C++:n muistinhallinta perustuu älykkäiden osoittimien hyödyntämiseen ja vakiintuneiden ohjelmointikäytäntöjen noudattamiseen. Rustissa muistiturvallisuus saavutetaan omistuksiin pohjautuvan mallin turvallisuussäännöillä, joiden noudattamista valvotaan käännösaikana.
Vertailussa havaitaan, että C++ sallii enemmän implisiittistä käyttäytymistä, kun taas Rust vaatii selkeyttä eksplisiittisellä syntaksilla. Rustin kääntäjän todetaan antavan tarvittaessa yksityiskohtaisempaa tietoa esiintyneestä virheestä. Molempien kielten oppimiskäyriä pidetään haastavina, mutta eri tavoilla. C++:lla kirjoitettu ohjelma kääntyy helpommin, mutta muistinhallintavirheiden välttäminen on vaikeampaa. Vastaavasti Rustilla on haastavampaa saada ohjelma kääntymään, mutta lopputulos on muistiturvallisempi. Dokumentaatiota ja yhteisön apua todetaan olevan hyvin saatavilla molemmille kielille.
Vertailun tuloksista päätellään, että Rust on helppokäyttöisempi vaihtoehto silloin, kun muistiturvallisuus on ehdoton vaatimus ohjelmalle. Rustin turvallisuussääntöjä rikkova ohjelma ei käänny lainkaan, kun taas C++:ssa ajoaikaiset ongelmat ovat yleisempiä, vaikka ohjelma kääntyisi ongelmitta. C++:aa pidetään kuitenkin helppokäyttöisempänä yksinkertaisempien ohjelmien kirjoittamiseen, sillä ohjelma on helpompi saada kääntymään.
Kokoelmat
- Kandidaatintutkielmat [10646]
