Функционални езици: Какви са те, къде отиват

Въпреки че някои твърдят какво точно е, функционалното програмиране продължава да привлича разработчици. И три от най-популярните функционални езици - Clojure, F # и Scala - са готови за подобрения.

Функционалното програмиране има основна привлекателност за някои разработчици, казва основателят на Scala Мартин Одерски: "Програмистите в този сегмент харесват функционалното програмиране, защото прави кода по-ясен, по-добре структуриран и предотвратява много класове грешки." Но някои твърдят, че функционалното програмиране води до по-малко ефективен софтуер.

Функционалното програмиране също изисква да се мисли за програмиране по нов начин, казва Дейвид Стивънс, програмен мениджър на Microsoft за .Net и говорител на F #. Абстракциите могат да бъдат проблем: „Когато правите кода по-абстрактен, когато се отдалечавате от манипулиране на битове и изрично преминаване през цикли, може да отнеме повече време, за да разберете тези абстракции.“

Какво точно е функционален език?

В най-основните си термини функционалното програмиране е свързано с третирането на изчисленията като математически функции. В допълнение към езиците, които от самото начало се таксуват като функционални, подобни на Java и C # стават по-функционални, като добавят поддръжка за ламбда изрази.

Но точното определение на функционалното програмиране може да бъде трудно да се определи. Блогът Clojurefun цитира няколко дефиниции, които смята за неверни, включително дефинирането на функционално програмиране като активиране на функционален стил с функции от по-висок ред или език, поддържащ ламбди. В него се казва, че правилната дефиниция е език, подчертаващ функциите и неизменните данни.

Но предпочитаната дефиниция на блога Clojure не е непременно вярна, казват други. „Авторът избира такъв, който случайно най-добре пасва на Clojure - нищо чудно, това е блог на Clojure“, казва Odersky на Scala. "Имам тълкуване, което е близко до неговото, но не е същото."

Функцията, казва Одерски, е код, който преобразува входовете в изходите и няма други ефекти извън това. "Тук използваме математическото определение на функцията. Понякога тези функции се наричат„ чисти ", за да ги различаваме от, да речем, функциите в C." Функционалният език се фокусира върху програмирането с чисти функции, което го прави лесно и мощно, казва Одерски, който основава Typesafe, доставчик на платформата за разработка на приложения Typesafe JVM.

Функционалното програмиране може да се комбинира с други парадигми, отбелязва той. "Например функционалността върви много добре с обектно-ориентираната. Scala е функционален език в този смисъл. Съгласен съм, че самото наличие на ламбда не прави езика функционален; необходимо е, но не е достатъчно."

Разработчикът на Clojure Рич Хики, който също е главен технически директор в разработчика на системи Cognitect, се съгласява с основното твърдение на блога Clojure. "Статията правилно посочва, че първокласните или по-високите функции не са това, което е функционалното програмиране. Функционалното програмиране е свързано с превръщането на програмирането в по-скоро математика", казва той. Това казва, че все още остава спектър от дефиниции за функционално програмиране, казва Хики.

Microsoft Stephens вижда функционални възможности, които се простират извън езиците. „Най-популярният език за функционално програмиране в света е Excel“, казва той. Един прост работен лист на Excel може да има колона с куп стойности в нея, като A1 X 2. "Това е чиста функция на A1 и A1 не се променя, така че изчислявате стойности от тези съществуващи данни."

Технологията на Microsoft за интегрирани езикови заявки (Linq) също осигурява функционално програмиране, казва той. „Почти всеки език за програмиране сега приема функции от функционални езици.“

Стивънс цитира неизменни данни като критични за функционалното програмиране. Паралелността - програми с множество нишки, работещи едновременно с данни - също се възползват от неизменяеми данни, отбелязва той. „Ние наричаме [F #] функционален първи език, защото идва от наследството на други езици.“ Той също така поддържа обектно-ориентирано програмиране и работи с C # и Visual Basic, казва той.

Hickey на Clojure възприема приемането на функционални езици като отговор на нарастващия натиск, пред който са изправени разработчиците, които в наши дни трябва да поемат по-големи проблеми. "За да направят това, те трябва да намалят случайната сложност на своите програми. Сега е широко признато, че широко разпространеното състояние и страничните ефекти са основен източник на сложност и грешки в програмите", казва Хики. „Въпреки че е възможно да се намали количеството на състоянието в програми, написани на нефункционални езици, е значително по-лесно и по-бързо да се направи това на език, който прави функционалното програмиране идиоматично и по подразбиране.“

Какво следва за трите най-функционални езика

13-годишната Scala е основен език в науката за данни, казва основателят на Scala Odersky. Поддържа се на JVM, има около 400 000 до 500 000 потребители. Плановете в краткосрочен план изискват тя да бъде оптимизирана за Java 8, при която инструкциите за байт кодове от най-новото стандартно надстройване на Java биха позволили на Scala да генерира по-ефективен код.

В по-дългосрочен план Scala ще получи почистена система от тип, по-безопасни макроси и по-голяма поддръжка на платформа, с разглеждан заден край на LLVM компилатор. Предвиждат се допълнителни подобрения, за да се подобри използваемостта на Scala.js за компилиране на Scala в JavaScript.

Деветгодишният Clojure, базиран също на JVM, се използва във финансите, търговията на дребно, софтуера и развлеченията, казва Хики. „Прилага се в различни области на приложение, като обработка и анализ на транзакции, големи данни, мрежови операции, прогнозен анализ, търсене, сигурност и потребителски предложения.“

11-годишният F # е основан от Microsoft Research от Don Syme и е под надзора на F # Foundation. Използва се в широк спектър от приложения и работи на Linux, OS X, Android, iOS, Windows и браузъри. „Това, върху което работим сега, е да го накараме да работи с .Net Core“, модулна версия на .Net Framework с отворен код, казва Стивънс. Интерполацията на низове, улесняваща писането на низове, е на чертожната дъска.