Programavimas

Funkcinės kalbos: kokie jie yra, kur jie eina

Net kai kurie tvirtina, kas tai yra, funkcinis programavimas vis pritraukia kūrėjus. Trys populiariausios funkcinės kalbos - „Clojure“, „F #“ ir „Scala“ - yra tobulinamos.

Funkcinis programavimas yra pagrindinis patrauklumas kai kuriems kūrėjams, sako „Scala“ įkūrėjas Martinas Odersky: „To segmento programuotojams patinka funkcinis programavimas, nes tai daro kodą aiškesnį, geriau struktūrizuotą ir apsaugo nuo daugelio klaidų klasių“. Tačiau kai kurie teigia, kad funkcinis programavimas sukuria mažiau efektyvią programinę įrangą.

Funkcinis programavimas taip pat reikalauja galvoti apie programavimą nauju būdu, sako Davidas Stephensas, „Microsoft“ programos vadovas .Net ir „F #“ atstovas. Abstrakcijos gali būti problema: "Kai jūs padarote kodą abstraktesnį, kai toliau einate nuo manipuliavimo bitais ir aiškiai einate per kilpas, gali prireikti daugiau laiko, kad suprastumėte šias abstrakcijas".

Kas tiksliai yra funkcinė kalba?

Pagrindiniu požiūriu funkcinis programavimas yra skaičiavimo traktuojimas kaip matematinės funkcijos. Be kalbų, kurios nuo pat pradžių mokamos kaip funkcinės, tokie kaip „Java“ ir „C #“ tapo funkcionalesni, pridedant „lambda“ išraiškų palaikymą.

Tačiau tiksliai apibrėžti funkcinį programavimą gali būti sunku. Tinklaraštyje „Clojurefun“ cituojami keli apibrėžimai, kurie, jos manymu, yra neteisingi, įskaitant funkcinio programavimo apibrėžimą kaip funkcinio stiliaus įgalinimą su aukštesnio lygio funkcijomis arba kalbą, palaikančią lambdas. Jis sako, kad teisingas apibrėžimas yra kalba, pabrėžianti funkcijas ir nekintamus duomenis.

Tačiau „Clojure“ tinklaraščio pageidaujamas apibrėžimas nebūtinai yra teisingas, sako kiti. „Autorius pasirenka vieną, kuris, beje, geriausiai tinka„ Clojure “- nenuostabu, kad tai yra„ Clojure “tinklaraštis“, - sako „Scala“ narys Odersky. - Turiu interpretaciją, kuri jam artima, bet ne ta pati.

Funkcija, sako Odersky, yra kodo dalis, susiejanti įvestis su išvestimi ir neturinti jokių kitų padarinių. "Tai matematinis funkcijos apibrėžimas, kurį mes naudojame čia. Kartais šios funkcijos vadinamos" grynomis ", kad būtų galima atskirti jas nuo, tarkime, C funkcijų." Funkcinė kalba orientuota į grynų funkcijų programavimą, todėl tai padaryti lengva ir galinga, sako Odersky, įkūręs „Typesafe“, JVM programų kūrimo platformos „Typesafe“ teikėją.

Funkcinį programavimą galima derinti su kitomis paradigmomis, pažymi jis. "Pavyzdžiui, funkcinis tikrai gerai tinka orientuojantis į objektą." Scala "yra funkcinė kalba ta prasme. Sutinku, kad vien tik turint lambdą kalba netampa funkcionali; ji yra būtina, bet nepakankama."

„Clojure“ kūrėjas Richas Hickey, kuris taip pat yra sistemų kūrėjo „Cognitect“ CTO, sutinka su pagrindiniu „Clojure“ tinklaraščio teiginiu. "Straipsnyje teisingai pažymima, kad funkcinės programavimo funkcijos nėra pirmos klasės ar aukštesnės eilės funkcijos. Funkcinis programavimas yra tai, kad programavimas tampa panašesnis į matematiką", - sako jis. Tai reiškia, kad vis dar išlieka funkcinio programavimo apibrėžimų spektras, sako Hickey.

„Microsoft“ Stephensas mano, kad funkcinės galimybės apima ne tik kalbas. „Populiariausia funkcinė programavimo kalba pasaulyje yra„ Excel “, - sako jis. Paprastame „Excel“ darbalapyje gali būti stulpelis su daugybe vertybių, pavyzdžiui, A1 X 2. „Tai gryna A1 funkcija, o A1 nesikeičia, todėl skaičiuojate vertes iš esamų duomenų“.

Pasak jo, „Microsoft“ kalba integruota užklausa („Linq“) taip pat numato funkcinį programavimą. "Dabar beveik kiekviena programavimo kalba perima funkcinių kalbų ypatybes."

Stephensas nekintamus duomenis nurodo kaip kritinius funkciniam programavimui. Kartu - programoms, turinčioms kelias gijas, vienu metu veikiančias duomenims, taip pat naudingi nekintami duomenys, pažymi jis. "Mes vadiname [F #] funkcine-pirmąja kalba, nes ji kilusi iš kitų kalbų paveldo." Jis taip pat palaiko objektinį programavimą ir veikia su C # ir „Visual Basic“, sako jis.

Clojure'o Hickey vertina funkcinių kalbų priėmimą kaip atsaką į didėjantį spaudimą, kurį patiria kūrėjai, kuriems šiomis dienomis tenka imtis didesnių problemų. "Norėdami tai padaryti, jie turi sumažinti atsitiktinį savo programų sudėtingumą. Dabar plačiai pripažįstama, kad plintanti būsena ir šalutinis poveikis yra pagrindinis programų sudėtingumo ir klaidų šaltinis", - sako Hickey. "Nors įmanoma sumažinti būsenos kiekį nefunkcinėmis kalbomis parašytose programose, tai padaryti yra žymiai lengviau ir greičiau kalbomis, kurios funkcinį programavimą paverčia idiomatiniu ir numatytuoju."

Toliau bus trys geriausios funkcinės kalbos

13 metų „Scala“ yra pagrindinė duomenų mokslo kalba, sako „Scala“ įkūrėjas Odersky. Apskaičiuota, kad JVM palaiko 400–500 000 vartotojų. Trumpalaikiuose planuose reikalaujama, kad jis būtų optimizuotas „Java 8“, kuriame paskutinio standartinio „Java“ atnaujinimo baitų kodavimo instrukcijos „Scala“ leistų sukurti efektyvesnį kodą.

Ilgainiui „Scala“ gaus išvalyto tipo sistemą, saugesnes makrokomandas ir daugiau platformos palaikymo, su svarstomu LLVM kompiliatoriaus galu. Numatomi tolesni patobulinimai, siekiant pagerinti „Scala.js“ pritaikymą „Scala“ kompiliavimui „JavaScript“.

Devynerių metų Clojure, taip pat paremtas JVM, buvo naudojamas finansų, mažmeninės prekybos, programinės įrangos ir pramogų srityse, sako Hickey. "Tai buvo taikoma įvairiose taikymo srityse, tokiose kaip operacijų apdorojimas ir analizė, didieji duomenys, tinklo operacijos, nuspėjamoji analizė, paieška, saugumas ir vartotojų pasiūlymai."

11 metų F # įkūrė „Microsoft Research“ autorius Donas Syme'as, o jį prižiūri „F # Foundation“. Jis naudojamas įvairiose programose ir veikia „Linux“, „OS X“, „Android“, „iOS“, „Windows“ ir naršyklėse. „Tai, prie ko dabar dirbame, yra tai, kad jis veiktų su .Net Core“, - atviro kodo modulinė „NetNet Framework“ modulinė versija, sako Stephensas. Styginių interpoliacija, palengvinanti stygų rašymą, yra ant piešimo lentos.