Funkcinių programavimo kalbų lyginamoji analizė
Ištrauka
Programavimo raidos pradžioje idėjos buvo paprastos, programos buvo struktūrizuojamos kaip išreikštinė veiksmų seka. Programavimo paskirtis - valdyti skaičiavimo mašinas ir jų elgseną. Todėl nenuostabu, kad pirmosios programavimo kalbos labai gerai atspindėjo pačių skaičiavimo mašinų veikimą ir fizinę realizaciją. Tai iš esmės buvo kalbos, kurios mažai skyrėsi nuo paties mašininio kodo.
Toks kodas nėra lengvai suprantamas žmogui, juo yra sudėtinga naudotis ir didžioji dalis mašininio kodo diktuojamų apribojimų yra prasmingi tik pačiai skaičiavimo mašinai, algoritmo apibūdinimui jie niekaip nepadeda. Taigi atsirado poreikis kurti abstrakcijas, kurios priartintų programavimo kalbas prie natūralaus žmogaus mąstymo lygmens. Atsirado grupavimas į pro-cedūras, buvo išgrynintos valdymo struktūros (sąlygos sakiniai, ciklai, rekursija) ir sukurtos nuo mašininio lygmens abstrahuotos programavimo kalbos, tokios kaip C, Pascal.[Hud89]
Programavimo kalbų raida pradėjo šakotis skirtingomis kryptimis, atsirado įvairios progra-mavimo paradigmos. Programavimo paradigma tai programavimo stilius[Flo79]. Pačios populia-riausios paradigmos dabar yra imperatyvinė, struktūrinė[Seb96] ir objektinė [Wag90] [sof11].
Praktiniai poreikiai daro didelę įtaką programavimo įrankiams, todėl dauguma programa-vimo kalbų neapsiriboja vienu stiliumi ir dažniausiai pateikia galimybes taikyti kelis stilius vienu metu. Tai taip vadinamos daugiaparadigmės (multiparadigm) programavimo kalbos. Tokios kal-bos pavyzdys yra C++. Tai imperatyvinė, objektinė ir šabloninė programavimo kalba. [Cop98]
Imperatyvumo idėja yra paprasta, programa tai įsakymų, kurie vykdomi tvarkingai iš eilės, skaičiavimo mašinai seka. Dabar yra sudėtinga įvardyti populiarias programavimo kalbas, kuriose nėra šitos savybės.
Struktūriškumo idėja yra grupuoti perpanaudojamus algoritmus į paprogrames arba proce-dūras. [Seb96]
Objektinis programavimas modeliuoja programą, kaip sąveiką tarp objektų, kurie enkapsu-liuoja savo būseną ir turi savo elgseną[Boo97].
Viena paradigma, kuri iki šiol nebuvo itin populiari, dabar pamažu braunasi į populiariųjų gretas. Tai funkcinio programavimo paradigma.[sof11]
Funkcinės programavimo paradigmos esmė yra kuo labiau priartinti programavimą prie ma-tematinio lygybių ir santykių apibrėžimo lygmens. Daug dėmesio yra skiriama funkcijoms, kaip svarbiausioms esybėms tokioje programavimo kalboje. Taip pat remiamasi lambda skaičiavimu ir formaliomis tipų sistemomis, tokiomis kaip Hindlio-Milnerio tipų sistema.[Hud89]
Atliekant šį darbą, daugiausiai buvo remtasi Paul Hudak straipsniu „Conception, Evolution, and Application of Functional Programming Languages“, kuriame yra išdėstoma visa funkcinio programavimo istorija iki Haskell standarto kūrimo pradžios apie 1989 metus. Haskell dabar yra funkcinio programavimo kalbos etalonas, todėl šiame darbe nemažas dėmesys bus skirtas jai.
Šio darbo tikslas yra atlikti funkcinių programavimo kalbų lyginamąją analizę.
4
Šiam tikslui pasiekti yra keliamos tokios užduotys:
- Nustatyti kriterijus, pagal kuriuos būtų galima lyginti funkcines programavimo kalbas
- Pasirinkti tinkamiausias palyginimui programavimo kalbas
- Atlikti palyginamąją parinktųjų programavimo kalbų analizę remiantis identifikuotais kri-terijais
Turinys
- Įvadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
- 1 Apžvalga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
- 1.1 Funkcinis programavimas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
- 1.2 Funkcinio programavimo savybės . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
- 1.2.1 Aukštesnės eilės funkcijos ir pirmos klasės esybės . . . . . . . . . . . . . . . . . . . . . . . . . . .7
- 1.2.2 Atidėtas vykdymas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
- 1.2.3 Švarumas ir funkcijos be šalutinių efektų . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
- 1.2.4 Šablonų atitaikymas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
- 1.2.5 Duomenų abstrakcijos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
- 1.2.6 Tipų sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
- 1.3 Funkcinės programavimo kalbos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
- 1.3.1 Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
- 1.3.2 OCaml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
- 1.3.3 Erlang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
- 1.3.4 Scheme, Clojure ir kiti LISP dialektai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
- 1.3.5 Kitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
- 2 Lyginamoji analizė . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
- 2.1 Metodika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
- 2.2 Aukštos eilės funkcijos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
- 2.3 Skaidrumas kvietimui ir funkcijos be šalutinių efektų . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
- 2.4 Vykdymo strategija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
- 2.5 Šablonų atitaikymas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
- 2.6 Tipų sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
- 2.7 Duomenų abstrakcijos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
- Rezultatai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
- Išvados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
- Literatūros sąrašas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
- Sąvokų apibrėžimai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Reziumė
- Autorius
- tomasv
- Tipas
- Diplominis darbas
- Dalykas
- Informatika
- Kaina
- €10.95
- Lygis
- Universitetas
- Įkeltas
- Lap 28, 2015
- Publikuotas
- 2012 m.
- Apimtis
- 34 psl.
Ne tai, ko ieškai?
Išbandyk mūsų paiešką tarp daugiau nei 16600 rašto darbų