Funktsionaalsed programmeerimiskeeled: minevik, olevik ja tulevik

Autor: Laura McKinney
Loomise Kuupäev: 4 Aprill 2021
Värskenduse Kuupäev: 1 Juunis 2024
Anonim
Funktsionaalsed programmeerimiskeeled: minevik, olevik ja tulevik - Tehnoloogia
Funktsionaalsed programmeerimiskeeled: minevik, olevik ja tulevik - Tehnoloogia

Sisu


Ära võtma:

Selle eristatava programmeerimiskeelte klassi paremaks mõistmiseks vaatame selle määratlust, omadusi ja ajalugu.

Clojure, Elixir, Elm, F #, Haskell, Idris ja Scala on kõik nimed, mida tõenäoliselt näete õppimist väärt funktsionaalsete programmeerimiskeelte soovituste hulgas. Need on keeled, mida tänapäeval kasutatakse ja mis võib ka järgmistel aastatel olla kasutusel.

Keel, nagu haskell, on kõige pikaealisem, kuid veelgi uuemad, näiteks Clojure, on juurdunud varasemates keeltes, mis jätkavad funktsionaalse programmeerimise (FP) arengu kujundamist. (Lugege otse programmeerimise ekspertidelt: millist funktsionaalset programmeerimiskeelt on kõige parem nüüd õppida?)

Selle eristatava programmeerimiskeelte klassi paremaks mõistmiseks vaatame selle määratlust, omadusi ja ajalugu. (Tutvuge INFOGRAFIKAga: programmeerimiskeelte ajalugu.)


Miks seda nimetatakse funktsionaalseks programmeerimiseks?

FP saab oma nime tarkvaraehituse lähenemisviisist, mis on rajatud puhaste funktsioonide loomisele. Kõigi funktsionaalsete programmeerimiskeelte alus on Lambda Calculus (kirjutatud ka kui λ-calculus). Seda kirjeldatakse kui "maailma väikseimat universaalset programmeerimiskeelt".

Vastavalt sellele põhineb FP matemaatilistel funktsioonidel, mis kasutavad arvutuse tegemiseks tinglikke avaldisi ja rekursiooni. See sisaldab järgmisi omadusi:

  • Selles sisalduvad andmed on muutumatud.
  • See väldib kõrvaltoimeid, mis on mis tahes olekumuutused, mis toimuvad väljaspool nn funktsiooni ja jagatud olekuid.
  • FP programmeerimist on lihtsam hooldada, kuna te ei pea muretsema selle pärast, et midagi etteantud funktsiooni väliselt kogemata muudab.
  • Sellel on soovituslik läbipaistvus.
  • Moodulkujundus võimaldab väikesi mooduleid, mida saab kiiresti kodeerida ja on tõenäolisem, et neid saaks uuesti kasutada, mis aitab kaasa programmi kiiremale arendamisele. Samuti saab mooduleid testida eraldi, mis võib vähendada testimiseks ja silumiseks kuluvat aega.

Juurdunud matemaatilistest funktsioonidest

Kuna funktsionaalse programmeerimise juured on Lambda Calculuses, ulatub selle ajalugu 1930ndateni, kui Alonzo kirik selle tutvustas. Muidugi ei kasutatud seda siis arvutite jaoks.


1960

Alles 1960. aastal, kui ameerika arvuti- ja kognitiivteadlane nimega John McCarthy avaldas sümboolsete väljendite ja nende arvutamise masina poolt rekursiivsed funktsioonid. Sellise funktsiooni uurimise tulemusel lõi McCarthy selle, mida peetakse esimeseks funktsionaalseks programmeerimiskeeleks: LISP.

Selle hea kokkuvõtte võib leida LISPi sündimisest - John McCarthy algdokumendi kokkuvõte. Keelel oli võõrkeeli, sealhulgas Common Lisp, Scheme ja elisp, rääkimata Clojure'ist, mida praegu väga palju kasutatakse.

Ligi kaks aastakümmet hiljem toimus järgmine suurem edasiminek Edinburghi ülikoolis, kus teadlased määratlesid ML (Metalanguage). Teadlased vajasid keelt, mis töötaks nende automaatse teoreemide tõestamise süsteemi (LCF) jaoks. "

ML sobis selle arvega ja nad leidsid ka 1978. aastal, et see võiks olla kasulik üldise programmeerimiskeelena. Versioonide hulka kuuluvad New Jersey Standard ML ja CAML.

Teine nimi, mis on seotud 1978. aasta ja Edinburghiga, on Lootus. Nime allikas on Hope Park Square, kus asus Edinburghi arvutiteaduse osakond (aga ka kõrgema järgu parameetrite ja 'igaveste vedrude' jaoks jne). ”Lootust eristatakse esimese keelena, kus rakendatakse kõnede järgi mustrit.

1990 kuni tänapäevani ja hiljem: Haskell

Loogik Haskell B. Curry järgi nimetatud Haskell oli selle komisjoni toode, mis asus 1987. aastal töötama keele sõnastamise nimel ja väljastas selle esimese versiooni 1990. Viimane standard on Haskell 2010 ja teine ​​versioon on koostatud aastaks 2020 .

Haskellist on saanud tänapäevaste funktsionaalsete keelte paradigma, mida eristavad „omadused nagu kõrgema järgu funktsioonid, tüübi järeldus, laisk hinnang ja kasutaja määratletud andmetüübid”.

Kõrgema järgu funktsioonid võtavad muid funktsioone argumentidena või tagastavad need tulemustena. Need võimaldavad rakendusi, mida võiks nimetada ka curryinguks. Sellega rakendatakse funktsiooni oma argumentidele individuaalselt ja kuna iga rakendus tagastab uue funktsiooni, aktsepteerib see järgmist argumenti.

Kuigi laiskust peetakse üldiselt halvaks asjaks, teenib see programmeerimisel siiski eesmärki. Nagu on selgitatud jaotises Mis on laisk hindamine? Vastupidiselt “rangele hindamisele” on laiskade hindamise lähenemisviis hinnang ainult vajalikule.

Praegused populaarsemad programmeerimiskeeled

Haskell on selle kategooria kõige domineerivam nimi, tõenäoliselt oma laiendatud ajaloo tõttu teiste raamprogrammide suhtes. See avaldas ka suurt mõju nende arengule. Microsofti teadur ja Haskelli peamine kaastöötaja Simon Peyton Jones rääkis Haskelli püsivast mõjust nii omaette kui ka teiste keelte kujundamisel.

"Sellised asjad nagu Linq, keele integreeritud päringufailid C #-s, on pärit otse Haskellist. F # töövood on võetud otse sellest monaadilisest I / O-loost."

Clojure

Clojure on Rich Hickey loodud uus Lispi murre. Clojure eristab teistest LISP-i murretest selle poolest, et see töötab Java platvormil ja on kompileeritud JVM-i baidikoodiks. Eeliseks on selle integreerimine Javaga, isegi need, mida Clojure ei kirjutanud.

Nagu Hickey Clojure.org-is selgitab, pakub Clojure hõlpsat juurdepääsu Java-raamistikele koos valikuliste vihjete ja tüübi-järeldustega, et tagada Java-kõnedele peegelduste vältimine.

Samuti öeldakse, et "Lispi lähenemine koodiandmetele ja selle makrosüsteem eristab seda endiselt" teistest Lispi murretest ning lisab, et selle kaardid, komplektid ja vektorid on Clojure'is sama klassi kui esimesed klassid, kuna loendid on Lispis. . ”

Hickey jagas ka oma põhjendust Clojure'i loomiseks, et kasutada ära kõiki Lispi eeliseid ilma selle puudusteta. Pärast erinevate täppide jaotamist erinevate päiste alla võtab Hickey selle kokku järgmiselt: „Lühidalt, ma arvan, et Clojure on JVM-i jaoks ainulaadne nišš funktsionaalse lisina, millel on tugev samaaegne tugi. “

Elm

Elm on puhtalt funktsionaalse keele nimi, mille kavandas esmakordselt Evan Czaplicki 2012. aastal. See on populaarne veebiarendajate seas, kellele see meeldib kasutajaliideste loomiseks. Elmi kompilaator sihib HTML-i, CSS-i ja JavaScripti. See töötab JavaScripti teekidega enam-vähem samal viisil kui Clojure töötab Java teekidega.

Erinevalt Elmist on see, et ta kasutab staatilist tüübi kontrollimist, mis aitab kõrvaldada käitusaja erandid, kuna vead püütaks kompileerimise ajal. Kuna Elmi sait kiitleb, “vahetas NoRedInk umbes kaks aastat tagasi Elmi ja 250 k + liini hiljem, ei ole nad ikka veel pidanud rüselust tegema, et tootmises segadust tekitav tööaja erand teha.”

Nähtavate vigade puudumine kasutajapoolses otsas on keele jaoks ilmne eelis. Võib-olla on seetõttu ka õigustatud kirjeldada: “Meeldiv keel” enda jaoks.

Eliksiir

Nagu Elixiri sait kirjeldab: “Elixir on dünaamiline ja funktsionaalne keel, mis on loodud skaleeritavate ja hooldatavate rakenduste loomiseks.” Elixir on suunatud kõrge käideldavuse ja madala latentsusajaga süsteemide loomisele. See töötab Erlangi VM-is, ökosüsteemis, mida kasutavad Heroku, WhatsApp, Klarna ja teised “hajutatud, tõrketaluvusega rakenduste jaoks”.

Elixiri programmeerijate eeliseks on see, et nad saavad Erlangi funktsiooni käivitada ilma käituskulusid kandmata.

F #

F # on avatud lähtekoodiga, platvormideülene, funktsionaalselt esimene programmeerimiskeel. F # tarkvara sihtasutusega saab liituda igaüks. Sihtasutuse sait võtab keele kokku järgmiselt:

F # töötab Linuxis, Mac OS X, Androidis, iOS, Windows, GPU ja brauserites. Seda saab tasuta kasutada ja see on avatud lähtekoodiga OSI kinnitatud litsentsi alusel.

F # kasutatakse paljudes rakendusvaldkondades ja seda toetavad nii aktiivne avatud kogukond kui ka professionaalseid tööriistu pakkuvad tööstusharu juhtivad ettevõtted.

Idris

Idris on üldotstarbeline puhas funktsionaalne programmeerimiskeel, milles on Haskelli ja ML-i mõjutatud objekte.

Nagu siin selgitatud, iseloomustavad seda sõltuvad tüübid, mis võimaldab "tüüpe ennustada väärtustele, mis tähendab, et programmi käitumise mõningaid aspekte saab täpselt määratleda tüübis." Seda eristab ka kompileerimine koos innuka hindamisega.

JavaScript

Ehkki JavaScript pole rangelt funktsionaalne programmeerimiskeel, kuna see võimaldab ka objektorienteeritud lähenemist, on sellel siiski funktsionaalsest programmeerimisest tulenevad komponendid. See hõlmab kõrgema järgu funktsioone. Ka ECMAScripti standardi uuemad versioonid pakuvad parandatavust parandatavuse probleemile.

Kotlin

Uusimate keelte seas (ilmus alles 2016. aasta veebruaris) oli Kotlini tegemisel ja testimisel viis aastat. Ettevõtted nagu Amex, NBC Digital, Expedia ja Gradle kasutavad seda. See pole puhas funktsionaalne keel.

Nagu JavaScript, on Kotlin võimeline nii objektorienteeritud kui ka funktsionaalseteks konstruktsioonideks. Lisaks on see Java programmeerimiskeeltega täielikult koostalitlusvõimeline.

Pakutavate eeliste hulgas on see, et see on sisutihedam kui Java programmeerimine. Mõne arvates on võimalik koodiridadest välja lõigata üle kolmandiku. Samuti pakub see kõiki funktsionaalsete programmeerimiskeeltega seotud eeliseid, sealhulgas kõrgema järgu funktsioone, laiendusfunktsioone ja lambdasid.

Selle mitmekülgsus muudab selle sobivaks mis tahes arendamiseks, olgu see serveripoolne, kliendipoolne veeb ja Android) ning töötab edasi Apple iOS-iga ühilduvuse nimel.

Scala

Scala on veel üks hübriid, kuna see pakub nii objektorienteeritud kui ka funktsionaalset programmeerimist.

"Scala staatilised tüübid aitavad vältida vigu keerukates rakendustes ning selle JVM ja JavaScripti käitamisajad võimaldavad teil ehitada kõrgjõudlusega süsteeme, millel on hõlbus juurdepääs raamatukogude tohututele ökosüsteemidele," nagu see oma saidil selgitab.

Mida me oleme õppinud

Telstra Big Data Analytics GM Mark Moloney võtab kokku, miks on nüüd aeg omaks võtta funktsionaalsed keeled ja miks peaksid programmeerijad kaaluma nende õppimist:

Üks müüt on see, et funktsionaalne programmeerimine on raske või liiga akadeemiline. See on lihtsalt veel üks oskus õppida. Valdamine võtab aega ja harjutamist - see ei erine teekonnast, mille arendajad 80-ndate lõpus / 90-ndate alguses objektorienteeritud programmeerimise õppimiseks läbisid. Tehnoloogia areneb edasi. See on üks põhjusi, miks ma tarkvara armastan. Õppimise õppimine on sama oluline kui see, mida teate.