Дефункционализация: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
мНет описания правки |
done |
||
Строка 1:
{{переведённая статья|en|Defunctionalization|версия=882420854}}
'''Дефункционализация''' - в [[язык программирования|программировании]] означает преобразование программы на этапе компиляции заменяющее [[функция высшего порядка|функции высшего порядка]] на вызов одной-единственной функции применения (apply). Эта техника впервые была описана Джоном С. Рейнольдом ({{en|John C. Reynolds}}) в его работе 1972 года, "Определяющие интерпретаторы для языков высшего порядка" ({{en|Definitional Interpreters for Higher-Order Programming Languages}}). Рейнольд отметил, что так как любая конкретная программа содержит конечное количество функциональных абстракций, то любая из этих абстракций может быть заменена уникальным идентификатором. Каждое применение функции в такой программе заменяется вызовом функции apply с идентификатором функции в качестве первого параметра, которая и выполняет связанные с заданным
Одним из затруднений для этой идеи состоит в том, что
Вместо использования единственной функции apply для обработки всех случаев, могут использоваться различные методы [[Анализ_потока_управления|анализа потока управления]] (включая простейшее различение разных видов [[Арность|арности]] (числа аргументов) или [[сигнатура типа|сигнатур типов]]) для разделения apply на несколько специализированных функций. Альтернативно, язык программирования может поддерживать [[указатель на функцию|указатели на функции]], использование которых может быть более эффективным, чем подход с диспетчеризацией.
Помимо использования для компиляции функциональных языков высшего порядка, дефункционализация так же исследовалась как метод механистического преобразования [[интерпретатор]]а в [[абстрактная машина|абстрактную машину]]. Дефункционализация так же связана с техникой представления функций с помощью [[функциональный объект|функциональных объектов]] в [[объектно-ориентированное программирование|объектно-ориентированного программирования]] (как альтернатива использованию замыканий).
== Пример ==
|