Funkcionalni jezici: što su, kamo idu

Iako neki tvrde što je točno, funkcionalno programiranje privlači programere. I tri najpopularnija funkcionalna jezika - Clojure, F # i Scala - spremna su za poboljšanja.

Funkcionalno programiranje ima glavnu privlačnost za neke programere, kaže osnivač Scale Martin Odersky: "Programeri u tom segmentu vole funkcionalno programiranje jer čini kôd jasnijim, bolje strukturiranim i sprječava mnoge klase pogrešaka." Ali neki tvrde da funkcionalno programiranje dovodi do manje učinkovitog softvera.

Funkcionalno programiranje također zahtijeva razmišljanje o programiranju na novi način, kaže David Stephens, Microsoftov voditelj programa za .Net i glasnogovornik F #. Abstrakcije mogu predstavljati problem: "Kada kod učinite apstraktnijim, kada se udaljavate od manipuliranja bitovima i izričitog prolaska kroz petlje, može potrajati više vremena da biste razumjeli ove apstrakcije."

Što je zapravo funkcionalni jezik?

U najosnovnijim terminima, funkcionalno programiranje odnosi se na računanje kao na matematičke funkcije. Uz jezike koji se od početka naplaćuju kao funkcionalni, Java i C # postali su funkcionalniji dodavanjem podrške za lambda izraze.

No, preciznu definiciju funkcionalnog programiranja teško je utvrditi. Blog Clojurefun navodi nekoliko definicija za koje smatra da su netočne, uključujući definiranje funkcionalnog programiranja kao omogućavanje funkcionalnog stila s funkcijama višeg reda ili jezika koji podržava lambde. Kaže da je točna definicija jezik koji naglašava funkcije i nepromjenjive podatke.

No, preferirana definicija bloga Clojure nije nužno točna, kažu drugi. "Autor odabire jedan koji slučajno najbolje odgovara Clojureu - nije ni čudo, ovo je Clojure blog", kaže Scala's Odersky. "Imam tumačenje koje je blisko njegovom, ali ne i isto."

Funkcija je, kaže Odersky, dio koda koji preslikava ulaze na izlaze i nema drugih učinaka osim toga. "Ovdje se koristi matematička definicija funkcije. Ponekad se te funkcije nazivaju" čistima "kako bi se razlikovale od, recimo, funkcija u C." Funkcionalni jezik usredotočen je na programiranje s čistim funkcijama, što ga čini jednostavnim i moćnim, kaže Odersky, koji je osnovao Typesafe, pružatelja platforme za razvoj aplikacija Typesafe JVM.

Funkcionalno programiranje može se kombinirati s drugim paradigmama, napominje. "Na primjer, funkcionalnost se jako dobro slaže s objektno orijentiranom. Scala je u tom smislu funkcionalni jezik. Slažem se da samo posjedovanje lambda ne čini jezik funkcionalnim; to je neophodno, ali nije dovoljno."

Razvojnik Clojurea Rich Hickey, koji je ujedno i CTO u programeru sustava Cognitect, slaže se s glavnom tvrdnjom bloga Clojure. "Članak ispravno ističe da funkcije prvoga razreda ili višeg reda nisu ono što je funkcionalno programiranje. Funkcionalno programiranje podrazumijeva programiranje više poput matematike", kaže on. To kaže da još uvijek postoji spektar definicija funkcionalnog programiranja, kaže Hickey.

Microsoftov Stephens vidi da se funkcionalne mogućnosti šire i od samih jezika. "Najpopularniji funkcionalni programski jezik na svijetu je Excel", kaže. Jednostavni Excel-ov radni list može sadržavati stupac s hrpom vrijednosti, poput A1 X 2. "To je čista funkcija na A1, a A1 se ne mijenja, pa računate vrijednosti iz tih postojećih podataka."

Microsoftova tehnologija integriranog upita (Linq) također omogućava funkcionalno programiranje, kaže on. "Gotovo svaki programski jezik sada usvaja značajke funkcionalnih jezika."

Stephens navodi nepromjenjive podatke kao ključne za funkcionalno programiranje. Istodobno - programi s više niti koje istovremeno rade na podacima - također imaju koristi od nepromjenjivih podataka, napominje. "[F #] nazivamo funkcionalno-prvim jezikom, jer dolazi iz nasljeđa drugih jezika." Također podržava objektno orijentirano programiranje i radi s C # i Visual Basicom, kaže.

Clojureov Hickey usvajanje funkcionalnih jezika vidi kao odgovor na sve veći pritisak programera koji se moraju nositi s većim problemima u današnje vrijeme. "Da bi to učinili, moraju smanjiti slučajnu složenost svojih programa. Sada je općepoznato da su sveprisutna stanja i nuspojave primarni izvor složenosti i grešaka u programima", kaže Hickey. "Iako je moguće smanjiti količinu stanja u programima napisanim na nefunkcionalnim jezicima, dramatično je lakše i brže to učiniti na jeziku koji funkcionalno programiranje čini idiomatičnim i zadanim."

Što je sljedeće za tri vrhunska funkcionalna jezika

13-godišnja Scala primarni je jezik u znanosti o podacima, kaže osnivač Scale Odersky. Podržava se na JVM, a procjenjuje se da ima 400 000 do 500 000 korisnika. U kratkoročnim planovima traži se njegova optimizacija za Javu 8, u kojoj bi upute bytecode-a iz najnovije standardne nadogradnje Java-a omogućile Scali stvaranje učinkovitijeg koda.

Dugoročno gledano, Scala će dobiti očišćeni sustav, sigurnije makronaredbe i više podrške za platformu, s LLVM kompajlerom na razmatranju. Daljnja poboljšanja planiraju se kako bi se poboljšala upotrebljivost Scala.js-a za kompajliranje Scale u JavaScript.

Devetogodišnji Clojure, također zasnovan na JVM-u, koristio se u financijama, maloprodaji, softveru i zabavi, kaže Hickey. "Primjenjuje se u različitim područjima primjene, poput obrade i analize transakcija, velikih podataka, mrežnih operacija, prediktivne analitike, pretraživanja, sigurnosti i potrošačkih ponuda."

Jedanaestogodišnjeg F # osnovao je Microsoft Research Don Syme, a nadgleda ga F # Foundation. Koristi se u širokom spektru aplikacija i radi na Linuxu, OS X, Androidu, iOS-u, Windowsima i preglednicima. "Ono na čemu sada radimo je da radimo s .Net Core", modularnom inačicom .Net Framework s otvorenim kodom, kaže Stephens. Interpolacija nizova, što olakšava pisanje žica, nalazi se na ploči za crtanje.