Programiranje

Funkcionalni jeziki: kaj so, kam gredo

Čeprav nekateri trdijo, kaj točno je, funkcionalno programiranje še naprej privlači razvijalce. Trije najbolj priljubljeni funkcionalni jeziki - Clojure, F # in Scala - so na voljo za izboljšave.

Funkcionalno programiranje je za nekatere razvijalce bistveno privlačno, pravi ustanovitelj Scale Martin Odersky: "Programerji v tem segmentu imajo radi funkcionalno programiranje, ker naredi kodo bolj jasno, bolje strukturirano in preprečuje številne razrede napak." Toda nekateri trdijo, da funkcionalno programiranje vodi do manj učinkovite programske opreme.

Funkcionalno programiranje zahteva tudi razmišljanje o programiranju na nov način, pravi David Stephens, Microsoftov programski vodja za .Net in predstavnik F #. Abstrakcije so lahko težava: "Ko naredite kodo bolj abstraktno, ko se oddaljujete od manipulacije bitov in izrecno prehajate skozi zanke, lahko traja več časa, da jih razumete."

Kaj je pravzaprav funkcionalen jezik?

Funkcionalno programiranje v svojih najosnovnejših pogledih obravnava računanje kot matematične funkcije. Poleg jezikov, ki že od samega začetka obratujejo kot funkcionalni, sta podobna Java in C # postala bolj funkcionalna z dodajanjem podpore za lambda izraze.

Toda natančne definicije funkcionalnega programiranja je težko določiti. Blog Clojurefun navaja več definicij, za katere meni, da so nepravilne, vključno z opredelitvijo funkcionalnega programiranja kot omogočanja funkcionalnega sloga s funkcijami višjega reda ali jezika, ki podpira lambde. Pravi, da je pravilna definicija jezik, ki poudarja funkcije in nespremenljive podatke.

Toda drugi menijo, da prednostna opredelitev bloga Clojure ni nujno pravilna. "Avtor izbere enega, ki po naključju najbolj ustreza Clojureju - nič čudnega, to je Clojurejev blog," pravi Scala's Odersky. "Imam interpretacijo, ki je blizu njegovi, vendar ne enaki."

Funkcija, pravi Odersky, je del kode, ki preslika vhode v izhode in nima drugih učinkov razen tega. "Tu uporabljamo matematično definicijo funkcije. Včasih te funkcije imenujemo" čiste ", da jih ločimo od recimo funkcij v C." Funkcionalni jezik se osredotoča na programiranje s čistimi funkcijami, zaradi česar je to enostavno in zmogljivo, pravi Odersky, ki je ustanovil Typesafe, ponudnika platforme za razvoj aplikacij Typesafe JVM.

Funkcionalno programiranje je mogoče kombinirati z drugimi paradigmami, ugotavlja. "Funkcionalnost se na primer zelo dobro ujema z objektno naravnano. Scala je v tem smislu funkcionalen jezik. Strinjam se, da samo lambda ne pomeni, da je jezik funkcionalen; je nujen, a ne dovolj."

Razvijalec Clojurea Rich Hickey, ki je tudi tehnični direktor pri razvijalcu sistemov Cognitect, se strinja z glavno trditvijo bloga Clojure. "Članek pravilno poudarja, da funkcije prvega razreda ali višjega reda niso tisto, kar je funkcionalno programiranje. Funkcionalno programiranje pomeni, da je programiranje bolj podobno matematiki," pravi. To pomeni, da še vedno obstaja spekter definicij funkcionalnega programiranja, pravi Hickey.

Microsoftov Stephens vidi funkcionalne zmogljivosti, ki presegajo samo jezike. "Najbolj priljubljen programski jezik na svetu je Excel," pravi. Preprost Excelov delovni list ima lahko stolpec z veliko vrednostmi, na primer A1 X 2. "To je čista funkcija na A1, A1 pa se ne spremeni, zato izračunate vrednosti iz teh obstoječih podatkov."

Microsoftova tehnologija z jezikovno integrirano poizvedbo (Linq) omogoča tudi funkcionalno programiranje, pravi. "Skoraj vsak programski jezik zdaj sprejema funkcije iz funkcionalnih jezikov."

Stephens navaja nespremenljive podatke kot ključne za funkcionalno programiranje. Sočasnost - programi z več nitmi, ki hkrati delujejo na podatkih - imajo tudi koristi od nespremenljivih podatkov, ugotavlja. "[F #] imenujemo funkcijsko prvi jezik, ker izhaja iz dediščine drugih jezikov." Podpira tudi objektno usmerjeno programiranje in deluje s C # in Visual Basic, pravi.

Clojurejev Hickey sprejetje funkcionalnih jezikov vidi kot odgovor na naraščajoč pritisk razvijalcev, ki se morajo danes spoprijeti z večjimi težavami. "Za to morajo zmanjšati naključno zapletenost svojih programov. Zdaj je splošno znano, da so vsesplošno stanje in neželeni učinki glavni vir zapletenosti in napak v programih," pravi Hickey. "Čeprav je mogoče zmanjšati količino stanja v programih, napisanih v nefunkcionalnih jezikih, je to bistveno lažje in hitreje v jeziku, ki naredi funkcionalno programiranje idiomatično in privzeto."

Kaj je naslednje za tri najboljše funkcionalne jezike

13-letna Scala je primarni jezik v znanosti o podatkih, pravi ustanovitelj Scale Odersky. Podprto na JVM, ima približno 400.000 do 500.000 uporabnikov. Kratkoročni načrti zahtevajo njegovo optimizacijo za Javo 8, v kateri bi navodila bajt kod iz najnovejše standardne nadgradnje Jave Scali omogočila ustvarjanje učinkovitejše kode.

Dolgoročno bo Scala dobila očiščeni sistem, varnejše makre in več podpore za platformo, pri čemer bo obravnavan zadnji del prevajalnika LLVM. Načrtovane so nadaljnje izboljšave za izboljšanje uporabnosti Scala.js za sestavljanje Scale v JavaScript.

Devetletni Clojure, ki temelji tudi na JVM, je bil uporabljen v financah, maloprodaji, programski opremi in zabavi, pravi Hickey. "Uporabljali so ga na različnih področjih uporabe, kot so obdelava in analiza transakcij, veliki podatki, mrežne operacije, napovedna analitika, iskanje, varnost in potrošniška ponudba."

Enajstletnega F # je ustanovil Microsoft Research Don Syme, nadzira pa ga F Foundation. Uporablja se v številnih aplikacijah in deluje v sistemih Linux, OS X, Android, iOS, Windows in brskalnikih. "Zdaj delamo na tem, da deluje z .Net Core," pravi Stephensova odprtokodna modularna različica .Net Framework z več platformami. Interpolacija nizov, ki olajša pisanje nizov, je na risalni plošči.