Lambdafunktioiden kehittyminen C++:ssa
Saura, Vili (2018)
Saura, Vili
2018
Tietotekniikka
Tieto- ja sähkötekniikan tiedekunta - Faculty of Computing and Electrical Engineering
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ä
2018-06-06
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tty-201805221700
https://urn.fi/URN:NBN:fi:tty-201805221700
Tiivistelmä
Työn tarkoituksena on esitellä lambdafunktioiden kehittymistä C++:ssa. Kehittyminen funktionaalisista kirjastoista lambdafunktioiksi on tarkoittanut sekä syntaksin, toteutuksen että motivaation kehittymistä. Esittelemällä ja vertailemalla eri kirjastoja ja toteutuksia saadaan käsitys lambdafunktioiden kehittymisen aikajanasta.
Lambdafunktioiden käytöllä on suuri vaikutus ohjelmointiin ja ohjelmistokehitykseen. Ne ovat myöskin hyvä esimerkki ohjelmointikielten välisestä ominaisuuksien leviämisestä. Lambdafunktioiden kaltaisten ominaisuuksien lisääminen kieleen on pitkä prosessi, jonka aikana motivaatio ja käyttötarkoitus voi muuttua. Ominaisuuden lisääminen ei myöskään tarkoita, että kyseinen ominaisuus olisi valmis. Uudet ominaisuudet luovat tarpeen uudelle toiminnallisuudelle, ja aikaisemmin toimineet ratkaisut voivat sisältää odottamattomia ongelmia jotka voivat rajoittaa ominaisuuden käyttöä.
Työ jakaantuu kolmeen osaan. Ensimmäinen osa käsittelee tiedonhankintaprosessia ja materiaalin valintaa ja sisältä myös lyhyen esittelyn lambdafunktioista, niiden toiminnasta ja käytöstä. Toisessa osassa esitellään C++11 edeltäviä kirjastoja, jotka toimivat lambdafunktioiden esiasteina. Alun perin kirjastot oli tarkoitettu funktionaalista ohjelmointia varten ja ne kehittivät functoidit, joita on mahdollista käyttää funktioiden argumentteina. Myöhemmin tuli tarve saman toiminnan omaaville, mutta nimettömille funktioille. Functoideista kehittyikin tätä tarvetta vastaavat lambdafunktiot. Functoidien implementointi on myös vaihdellut vuosien varrella envelope/letter mallista periytymiseen ja expression templateihin. Kolmannessa osassa lambdafunktiot lisätään osaksi C++ kieltä ja tulevien standardien mukana lambdafunktioiden ominaisuuksia laajennetaan ja hiotaan.
Työ näyttää, että suhteellisen pienelle yleisölle tarkoitetusta ominaisuudesta voi kehittyä tärkeä osa ohjelmointikieltä ja sen kehitystä. Läuferin kehys ja FC++ oli tarkoitettu henkilöille, jotka haluavat ohjelmoida funktionaalisen paradigman mukaisesti C++:lla, kun taas LL ja C++11 lambdafunktiot on tarkoitettu kaikille C++ ohjelmoijille.
Lambdafunktioiden käytöllä on suuri vaikutus ohjelmointiin ja ohjelmistokehitykseen. Ne ovat myöskin hyvä esimerkki ohjelmointikielten välisestä ominaisuuksien leviämisestä. Lambdafunktioiden kaltaisten ominaisuuksien lisääminen kieleen on pitkä prosessi, jonka aikana motivaatio ja käyttötarkoitus voi muuttua. Ominaisuuden lisääminen ei myöskään tarkoita, että kyseinen ominaisuus olisi valmis. Uudet ominaisuudet luovat tarpeen uudelle toiminnallisuudelle, ja aikaisemmin toimineet ratkaisut voivat sisältää odottamattomia ongelmia jotka voivat rajoittaa ominaisuuden käyttöä.
Työ jakaantuu kolmeen osaan. Ensimmäinen osa käsittelee tiedonhankintaprosessia ja materiaalin valintaa ja sisältä myös lyhyen esittelyn lambdafunktioista, niiden toiminnasta ja käytöstä. Toisessa osassa esitellään C++11 edeltäviä kirjastoja, jotka toimivat lambdafunktioiden esiasteina. Alun perin kirjastot oli tarkoitettu funktionaalista ohjelmointia varten ja ne kehittivät functoidit, joita on mahdollista käyttää funktioiden argumentteina. Myöhemmin tuli tarve saman toiminnan omaaville, mutta nimettömille funktioille. Functoideista kehittyikin tätä tarvetta vastaavat lambdafunktiot. Functoidien implementointi on myös vaihdellut vuosien varrella envelope/letter mallista periytymiseen ja expression templateihin. Kolmannessa osassa lambdafunktiot lisätään osaksi C++ kieltä ja tulevien standardien mukana lambdafunktioiden ominaisuuksia laajennetaan ja hiotaan.
Työ näyttää, että suhteellisen pienelle yleisölle tarkoitetusta ominaisuudesta voi kehittyä tärkeä osa ohjelmointikieltä ja sen kehitystä. Läuferin kehys ja FC++ oli tarkoitettu henkilöille, jotka haluavat ohjelmoida funktionaalisen paradigman mukaisesti C++:lla, kun taas LL ja C++11 lambdafunktiot on tarkoitettu kaikille C++ ohjelmoijille.
Kokoelmat
- Kandidaatintutkielmat [8324]