Анализ строгости - Strictness analysis

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

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

Подходы к анализу строгости

Прямая абстрактная интерпретация

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

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

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

Прогнозный анализ строгости

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

В 1980-е годы было проведено большое количество исследований по анализу строгости.

Рекомендации

  1. ^ Майкрофт, Алан (1980). «Теория и практика преобразования вызова по потребности в вызов по значению». Конспект лекций по информатике: Учеб. 4-й международный Symp. по программированию, Vol. 83. Springer-Verlag.
  2. ^ "Комментарий GHC: анализатор спроса в GHC". Получено 2014-02-12.
  3. ^ Wadler, P .; Р.Дж.М. Хьюз (1987). «Прогнозы для анализа строгости». Функциональное программирование и компьютерная архитектура; LNCS 274. Springer-Verlag.