Funktionaalinen ohjelmointi: matemaattinen tausta, erikoisominaisuudet ja niiden käyttö yleisemmissä kielissä
Jokela, Niko (2024-04-19)
Funktionaalinen ohjelmointi: matemaattinen tausta, erikoisominaisuudet ja niiden käyttö yleisemmissä kielissä
Jokela, Niko
(19.04.2024)
Julkaisu on tekijänoikeussäännösten alainen. Teosta voi lukea ja tulostaa henkilökohtaista käyttöä varten. Käyttö kaupallisiin tarkoituksiin on kielletty.
avoin
Julkaisun pysyvä osoite on:
https://urn.fi/URN:NBN:fi-fe2024052033342
https://urn.fi/URN:NBN:fi-fe2024052033342
Tiivistelmä
Funktionaalinen ohjelmointi on erilainen, ja vähemmän suosittu ohjelmoinnin ajattelutapa vallitsevaan imperatiiviseen olio-ohjelmointiin verrattuna. Funktionaalisia ohjelmointitapoja on viime vuosina kuitenkin alettu käyttämään yleisimmissä ohjelmointikielissä. Tässä työssä tarkastellaan ristiriitaa sen suhteen, miksi puhtaat funktionaaliset kielet eivät ole yleisessä suosiossa, mutta joitain niiden ominaisuuksia käytetään muissa kielissä laajalti. Asiaa lähestytään tutustumalla funktionaaliseen ohjelmointiin, ja vastataan kolmeen tutkimuskysymykseen: mikä on funktionaalisen ohjelmoinnin matemaattinen tausta? Mitä erikoisominaisuuksia sillä, ja erityisesti käytetyimmällä kielellä Haskellilla, on? Miten kyseisiä ominaisuuksia käytetään yleisimmissä ohjelmointikielissä Pythonissa ja JavaScriptissä?
Tutkimus on tehty kirjallisuuskatsauksen tavoin. Tärkeimmät lähteet ovat Bartosz Milewskin ”Category theory for programmers”-kirja, ja Haskellia käsittelevät kirjat “Haskell Programming from first principles” ja “Practical Haskell, A Real World Guide to Programming”. Yleisempiä ohjelmointikieliä Pythonia ja JavaScriptiä käsittelevässä luvussa ja aiheessa on käytetty apuna niiden (puoli)virallista dokumentaatiota.
Funktionaalisen ohjelmoinnin matemaattinen tausta perustuu lambdakalkyyliin ja kategoriateoriaan. Sen erikoisominaisuuksia ovat mm. korkea abstraktiotaso, puhtaat funktiot, laiska suoritustapa, lambdakalkyylista kumpuavat ohjelmointitavat, sekä sivuvaikutusten hallinta kategoriateoriasta tutuilla monadeilla. Yleisemmissä kielissä käytetään erityisesti funktionaalisesta ohjelmoinnista tuttuja, deklaratiivisia iterointimenetelmiä, sekä anonyymejä funktioita. Ideaa monadeista on sovellettu asynkronisten funktiokutsujen käsittelyyn. Tutkielman lopussa mietitään, voisiko funktionaalinen ohjelmointitapa tulla tulevaisuudessa yleisemmäksi. Functional programming is a different, and unpopular, programming paradigm compared to the prevalent imperative object-oriented programming. In recent years, functional programming style has found use in the more common programming languages. This thesis aims to find out, why pure functional programming languages are not in common use, but some of their features have found broad use in other languages. In order to solve this question, we familiarize ourselves with functional programming, and answer to three questions: what is the mathematical background of functional programming? What special features it, and the most used pure functional language Haskell in particular, has? How are these features used in the most common programming languages Python and JavaScript?
This thesis is a literature review. Most important literature sources were "Category theory for programmers" book by Bartosz Milewski, and Haskell tutorial books “Haskell Programming from first principles” and “Practical Haskell, A Real World Guide to Programming”. In the chapters regarding Python and JavaScript, their (un)official documentation was referenced.
The mathematical background of functional programming is based on lambda calculus and category theory. It's special features are e.g. high level of abstraction, pure functions, lazy evaluation, programming styles originating from lambda calculus and managing side-effects with monads, which are a structure special to category theory. Functional programming styles which are used in more common languages are e.g. declarative iteration methods and anonymous functions. The idea of a monad is applied in the handling of asynchronous function calls. Thesis ends with a speculation, whether functional programming style could become more common in the future.
Tutkimus on tehty kirjallisuuskatsauksen tavoin. Tärkeimmät lähteet ovat Bartosz Milewskin ”Category theory for programmers”-kirja, ja Haskellia käsittelevät kirjat “Haskell Programming from first principles” ja “Practical Haskell, A Real World Guide to Programming”. Yleisempiä ohjelmointikieliä Pythonia ja JavaScriptiä käsittelevässä luvussa ja aiheessa on käytetty apuna niiden (puoli)virallista dokumentaatiota.
Funktionaalisen ohjelmoinnin matemaattinen tausta perustuu lambdakalkyyliin ja kategoriateoriaan. Sen erikoisominaisuuksia ovat mm. korkea abstraktiotaso, puhtaat funktiot, laiska suoritustapa, lambdakalkyylista kumpuavat ohjelmointitavat, sekä sivuvaikutusten hallinta kategoriateoriasta tutuilla monadeilla. Yleisemmissä kielissä käytetään erityisesti funktionaalisesta ohjelmoinnista tuttuja, deklaratiivisia iterointimenetelmiä, sekä anonyymejä funktioita. Ideaa monadeista on sovellettu asynkronisten funktiokutsujen käsittelyyn. Tutkielman lopussa mietitään, voisiko funktionaalinen ohjelmointitapa tulla tulevaisuudessa yleisemmäksi.
This thesis is a literature review. Most important literature sources were "Category theory for programmers" book by Bartosz Milewski, and Haskell tutorial books “Haskell Programming from first principles” and “Practical Haskell, A Real World Guide to Programming”. In the chapters regarding Python and JavaScript, their (un)official documentation was referenced.
The mathematical background of functional programming is based on lambda calculus and category theory. It's special features are e.g. high level of abstraction, pure functions, lazy evaluation, programming styles originating from lambda calculus and managing side-effects with monads, which are a structure special to category theory. Functional programming styles which are used in more common languages are e.g. declarative iteration methods and anonymous functions. The idea of a monad is applied in the handling of asynchronous function calls. Thesis ends with a speculation, whether functional programming style could become more common in the future.