Введение

В информатике, анализ строгости относится к любому алгоритму, используемому для доказательства того, что функция в не строгом функциональном языке программирования строга в одном или нескольких своих аргументах. Эта информация полезна для компиляторов, потому что строгие функции могут быть скомпилированы более эффективно. Таким образом, если функция доказана строгой (с помощью анализа строгости) во время компиляции, ее можно компилировать, чтобы использовать более эффективную конвенцию вызова без изменения значения окружающей программы. Обратите внимание, что функция f расходится, если она возвращает : оперативно, это означает, что f либо вызывает ненормальное завершение закрывающей программы (например, сбой с сообщением об ошибке), либо она бесконечно циркулирует. Понятие "дивергенции" имеет значение, потому что строгая функция - это та, которая всегда расходится, когда дается аргумент, который расходится, тогда как ленивая (или не строгая) функция - это та, которая может или не может расходиться, когда дается такой аргумент. Анализ строгости пытается определить "свойства дивергенции" функций, что позволяет определить некоторые строгие функции.

Передача абстрактного толкования

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

Анализ спроса

Компилятор Glasgow Haskell (GHC) использует обратную абстрактную интерпретацию, известную как анализ спроса, для выполнения анализа строгости, а также других программных анализов. В анализе спроса каждая функция моделируется функцией от стоимостных требований к результату до стоимостных требований к аргументам. Функция строга в аргументе, если требование ее результата приводит к требованию этого аргумента.

Анализ строгости на основе проекции

Анализ строгости на основе проекции, введенный Филиппом Уодлером и Р. Дж. М. Хьюзом, использует проекции строгости для моделирования более тонких форм строгости, таких как строгость головы в аргументе списка. (Напротив, анализ спроса GHC может моделировать строгость только в пределах типов продукта, т.е. типов данных, которые имеют только один конструктор.) Функция считается строгой для головы, если , где проекция, что голова оценивает свой аргумент списка. В 1980-х годах был проведен большой объем исследований по анализу строгости.