Чистота языка программирования

Эта статья или раздел нуждается в переработке.
Пожалуйста, улучшите её в соответствии с правилами написания статей.

Чистота́ (в отношении языка программирования) — отсутствие побочных эффектов и детерминированность. Язык программирования является чистым в том случае, если все функции в программах этого языка являются чистыми.

Программы написанные на чистых языках программирования проще отлаживать, верифицировать, обнаруживать ошибки, которые не удалось обнаружить с помощью тестирования. Программы на чистом языке программирования проще переписывать избегая внесения ошибок. В то же время, сам процесс планирования программы с рассчётом на чистоту сложнее.

Ещё одним важным преимуществом чистых функциональных языков является параллелизм. Раз все функции для вычислений используют только свои параметры, можно организовать вычисление независимых функций в произвольном порядке или параллельно, на результат вычислений это не повлияет. Параллелизм может быть организован не только на уровне компилятора языка, но и на уровне архитектуры технических средств. Существуют экспериментальные компьютеры, основанные на подобных архитектурах, например Lisp-машина.


Ввод/вывод и чистота

Наиболее серьёзной областью применения языков программирования, в которой постоянно присутствуют побочные эффекты в функциях, является ввод/вывод. Можно полагать, что любая операция ввода данных от пользователя является действием с побочным эффектом, т. к. нельзя заранее сказать, что именно введёт пользователь в качестве значений параметров, использующихся в вычислительном процессе. Хотя некоторые исследователи и учёные-теоретики утверждают, что ввод/вывод нельзя рассматривать в качестве примера наличия побочных эффектов, т. к. по сути ввод/вывод --- это изменение окружения программы, но в любом случае ввод/вывод делает использующие его функции недетерминированными.

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

Однако некоторые причины наличия функций с побочными эффектами полностью убрать из функциональных языков программирования нельзя, т. к. в таком случае такие языки были бы слишком узки в применительном отношении. В первую очередь это относится именно к вводу/выводу. сложно представить себе полноценный язык программирования, где нет возможности осуществлять ввод данных от пользователя в интерактивном режиме, а также осуществлять вывод данных для пользователя.

Монады

Для обеспечения возможности использования таких технологий как ввод/вывод без умаления свойства чистоты во многих функциональных языках программирования, в том числе и в языке Haskell, используется специальный механизм, названный «монадой». Монады как бы обёртывают необходимые императивные свойства, не допуская их смешивания с чистым синтаксисом функционального языка. Использование монад позволило реализовать все те узкие места, которые регламентировали наличие побочных эффектов в функциях.

Так, например, для обеспечения ввода/вывода в языке Haskell реализована стандартная монада IO, вне которой невозможно выполнить ни одной операции ввода/вывода. Такими же свойствами обладают и все остальные стандартные монады, реализованные для языка Haskell.


Примеры чистых языков программирования

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home