Функційне програмування: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Addbot (обговорення | внесок)
м Вилучення 37 інтервікі, відтепер доступних на Вікіданих: d:q193076
Рядок 124:
Недоліки функціонального програмування випливають з тих же самих його особливостей. Відсутність присвоювання і заміна їх на породження нових даних призводять до необхідності постійного виділення та автоматичного звільнення пам'яті, тому в системі виконання функціональної програми обов'язковим компонентом стає високоефективний [[збирач сміття]]. Нестрога модель обчислень призводить до непередбачуваного порядку виклику функцій, що створює проблеми при введенні-виведенні, де порядок виконання операцій є важливим. Крім того, очевидно, функції введення в своєму природному вигляді (наприклад, getchar із стандартної бібліотеки мови [[C (мова програмування) | C]]) не є чистими, оскільки здатні повертати різні значення для одних і тих же аргументів, і для усунення цього потрібні певні хитрощі.
 
Для подолання недоліків функціональних програм вже перші мови функціонального програмування включали не тільки чисто функціональні засоби, але і механізми імперативного програмування (присвоєння, цикл, «неявний PROGN» були вже в LISP'і). Використання таких засобів дозволяє вирішити деякі практичні проблеми, але означає відхід від ідей (і переваг) функціонального програмування і написання імперативних програм на функціональних мовами. У чистих функціональних мовах ці проблеми вирішуються іншими засобами, наприклад, в мові [[Haskell]] ввід-вивід реалізований за допомогою [[Монада_Монади (програмування) | монаду]] — нетривіальної концепції, запозиченої з теорії категорій.
 
== Замітки ==