Katsaus C++20 Ranges-kirjastoon
Raitanen, Kalle-Henrik (2022)
Raitanen, Kalle-Henrik
2022
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. Only for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2022-06-15
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202206105616
https://urn.fi/URN:NBN:fi:tuni-202206105616
Tiivistelmä
Ranges-kirjasto on C++20 standardikirjastoon tehty lisäys, jonka avulla pyritään helpottamaan välien (range) kanssa työskentelyä. Kirjasto on vajavainen versio Nieblerin kirjoittamasta Ranges-V3:sta, ja siitä puuttuu useita ominaisuuksia. Kirjasto sisältää rajoitetut algoritmit (constrained algorithms), laiskasti evaluoitavia (lazy evaluation) näkymiä (views) sekä helpommin sommiteltavia, näkymien luomiseen tarkoitettuja väliadaptereita (range adaptors). Tämän tutkimuksen tarkoituksena on selvittää, mitä etuja Ranges-kirjastolla on, sekä kannattaako siirtyä käyttämään sitä.
Tämä työ on toteutettu kirjallisuus katsauksena. Tieteellisiä tutkimuksia ja kirjastoon kriittisesti suhtautuvia lähteitä on hyvin vähän, ja tärkeimmät lähteet ovat pääsääntöisesti C++ aiheisia kirjoja. Suurin osa lähteistä nosti näkymien laiskan evaluoinnin edut esille, sekä mahdollisuuden ketjuttaa näkymiä siten, ettei välituloksia tarvitse tallentaa. Erityisesti väliadaptereiden liukuhihnoittamista (pipeline) pidettään merkittävänä parannuksena algoritmien sommitteluun. Näkymiä ja väliadaptereita käyttämällä voidaan saavuttaa parempaa koodia, mutta niiden käyttäminen vaatii uuden opettelemista. On tärkeää ymmärtää, kuinka ne toimivat, sillä virheellisellä näkymien käyttämisellä saadaan tehotonta tai jopa käyttökelvotonta koodia aikaiseksi. Väliadaptereiden liukuhihnoittamisen syntaksi voi aluksi näyttää erikoiselta. Tällä hetkellä Ranges-kirjastosta selkeästi puuttuu näkymiä ja väliadaptereita, sekä innokkaasti evaluoitavat (eager evaluation) toiminnot.
Rajoitetut algoritmit puolestaan on helppo ottaa käyttöön, ja niillä olisi suotavaa korvata algoritmikirjaston algoritmien käyttö. Ranges-kirjaston rajoitetuilla algoritmeilla on selkeämmät virheilmoitukset, selkeyttävät syntaksia mahdollisuudella antaa algoritmille argumentiksi väli iteraatttoriparin sijasta, sekä niillä on käytännöllinen projektio-kuormitus.
Tämä työ on toteutettu kirjallisuus katsauksena. Tieteellisiä tutkimuksia ja kirjastoon kriittisesti suhtautuvia lähteitä on hyvin vähän, ja tärkeimmät lähteet ovat pääsääntöisesti C++ aiheisia kirjoja. Suurin osa lähteistä nosti näkymien laiskan evaluoinnin edut esille, sekä mahdollisuuden ketjuttaa näkymiä siten, ettei välituloksia tarvitse tallentaa. Erityisesti väliadaptereiden liukuhihnoittamista (pipeline) pidettään merkittävänä parannuksena algoritmien sommitteluun. Näkymiä ja väliadaptereita käyttämällä voidaan saavuttaa parempaa koodia, mutta niiden käyttäminen vaatii uuden opettelemista. On tärkeää ymmärtää, kuinka ne toimivat, sillä virheellisellä näkymien käyttämisellä saadaan tehotonta tai jopa käyttökelvotonta koodia aikaiseksi. Väliadaptereiden liukuhihnoittamisen syntaksi voi aluksi näyttää erikoiselta. Tällä hetkellä Ranges-kirjastosta selkeästi puuttuu näkymiä ja väliadaptereita, sekä innokkaasti evaluoitavat (eager evaluation) toiminnot.
Rajoitetut algoritmit puolestaan on helppo ottaa käyttöön, ja niillä olisi suotavaa korvata algoritmikirjaston algoritmien käyttö. Ranges-kirjaston rajoitetuilla algoritmeilla on selkeämmät virheilmoitukset, selkeyttävät syntaksia mahdollisuudella antaa algoritmille argumentiksi väli iteraatttoriparin sijasta, sekä niillä on käytännöllinen projektio-kuormitus.