Чистота (отсутствие побочных эффектов) - Функциональные языки программирования

В императивных языках функция в процессе своего выполнения может читать и модифицировать значения глобальных переменных и осуществлять ввод/вывод. Поэтому, если мы вызовем одну и ту же функцию дважды с одним и тем же аргументом, может случиться так, что мы получим два различных результата. Такая функция называется функцией с побочными эффектами. Описывать функции без побочных эффектов позволяет практически любой язык. Однако некоторые языки поощряют или даже требуют от функции побочных эффектов. Например, во многих объектно-ориентированных языках в функцию передается скрытый параметр (чаще он называется this или self), который функция неявно модифицирует.

В чистом функциональном программировании оператор присваивания отсутствует, объекты нельзя изменять и уничтожать, можно только создавать новые путем декомпозиции и синтеза существующих. О ненужных объектах позаботится встроенный в язык сборщик мусора. Благодаря этому в чистых функциональных языках все функции свободны от побочных эффектов. Однако это не мешает этим языкам имитировать некоторые полезные императивные свойства, такие как исключения и изменяемые массивы. Для этого существуют специальные методы. Каковы же преимущества чистых функциональных языков? Помимо упрощения анализа программ есть еще одно весомое преимущество - параллелизм. Раз все функции для вычислений используют только свои параметры, мы можем вычислять независимые функции в произвольном порядке или, скажем, параллельно, на результат вычислений это не повлияет. Причем параллелизм этот может быть организован не только на уровне компилятора с языка, но и на уровне архитектуры. В нескольких университетах уже разработаны и используются экспериментальные компьютеры, основанные на подобных архитектурах. Далеко не все функциональные языки являются чистыми. В некоторых случаях побочные эффекты намного упрощают программирование. Однако преимущества чистых языков постепенно перевешивают, и наиболее современные функциональные языки являются, как правило, чистыми.

Похожие статьи




Чистота (отсутствие побочных эффектов) - Функциональные языки программирования

Предыдущая | Следующая