Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Декларативное программирование часто рассматривает программы как теории формальной логики и вычисления в качестве вычетов в этом логическом пространстве. Декларативное программирование может значительно упростить написание параллельных программ . [4]

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

Определение [ править ]

Декларативное программирование часто определяется как любой стиль программирования, который не является обязательным . Ряд других общих определений пытается дать ему определение, просто противопоставляя его императивному программированию. Например:

  • Программа высокого уровня, описывающая, какие вычисления должны выполняться.
  • Любой язык программирования, в котором отсутствуют побочные эффекты (или, более конкретно, он прозрачен по ссылкам )
  • Язык с четким соответствием математической логике . [5]

Эти определения существенно пересекаются.

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

В чисто функциональном языке , таком как Haskell , все функции не имеют побочных эффектов , а изменения состояния представлены только как функции, которые преобразуют состояние, которое явно представлено в программе как объект первого класса . Хотя чистые функциональные языки не являются императивными, они часто предоставляют возможность описать действие функции в виде серии шагов. Другие функциональные языки, такие как Lisp , OCaml и Erlang , поддерживают сочетание процедурного и функционального программирования.

Некоторые языки логического программирования, такие как Prolog , и языки запросов к базам данных, такие как SQL, хотя и декларативны в принципе, также поддерживают процедурный стиль программирования.

Подпарадигмы [ править ]

Декларативное программирование - это общий термин , включающий ряд наиболее известных парадигм программирования .

Программирование с ограничениями [ править ]

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

Доменные языки [ править ]

Хорошо известные примеры декларативных предметно-ориентированных языков (DSL) включают язык ввода генератора синтаксического анализатора yacc , QML , язык спецификации сборки Make, язык управления конфигурацией Puppet , регулярные выражения и подмножество SQL (запросы SELECT, например ). Преимущество DSL в том, что они полезны, но при этом не обязательно должны быть полными по Тьюрингу , что упрощает использование чисто декларативного языка.

Многие языки разметки, такие как HTML , MXML , XAML , XSLT или другие языки разметки пользовательского интерфейса , часто являются декларативными. HTML, например, описывает только то, что должно отображаться на веб-странице - он не определяет ни поток управления для визуализации страницы, ни возможные взаимодействия страницы с пользователем.

По состоянию на 2013 год некоторые программные системы [ какие? ] объединяют традиционные языки разметки пользовательского интерфейса (такие как HTML) с декларативной разметкой, которая определяет, что (но не как) системы внутреннего сервера должны делать для поддержки объявленного интерфейса. Такие системы, обычно использующие доменное пространство имен XML , могут включать абстракции синтаксиса базы данных SQL или параметризованные вызовы веб-служб с использованием передачи репрезентативного состояния (REST) ​​и SOAP . [ необходима цитата ]

Функциональное программирование [ править ]

Языки функционального программирования, такие как Haskell , Scheme и ML, оценивают выражения через приложение-функцию. В отличие от родственной, но более императивной парадигмы процедурного программирования , функциональное программирование уделяет мало внимания явному упорядочиванию (например, в Scheme порядок оценки многих видов подвыражений не определен или неявен [6] ). Вместо этого вычисления характеризуются различными типами рекурсивного приложения и композиции функций высшего порядка с явными ссылками на ввод-вывод и данные, которые используются экономно , а мутации состояния избегаются илипо возможности инкапсулированы .

Гибридные языки [ править ]

Make-файлы, например, декларативно определяют зависимости [7], но также включают обязательный список действий, которые необходимо предпринять. Точно так же yacc декларативно определяет контекстно-свободную грамматику, но включает фрагменты кода с основного языка, что обычно является обязательным (например, C ).

Логическое программирование [ править ]

Языки логического программирования, такие как состояние Prolog и отношения запросов. Специфика как эти запросы отвечают до реализации и ее доказательство теорем, но , как правило , принимает форму своего рода объединения . Как и функциональное программирование, многие языки логического программирования допускают побочные эффекты и, как следствие, не являются строго декларативными.

Моделирование [ править ]

Модели или математические представления физических систем могут быть реализованы в компьютерном коде, который является декларативным. Код содержит ряд уравнений, а не императивных присваиваний, которые описывают («объявляют») поведенческие отношения. Когда модель выражается в этом формализме, компьютер может выполнять алгебраические манипуляции, чтобы наилучшим образом сформулировать алгоритм решения. Математическая причинность обычно накладывается на границы физической системы, в то время как описание поведения самой системы является декларативным или акаузальным. Языки и среды декларативного моделирования включают Analytica , Modelica и Simile . [8]

См. Также [ править ]

  • Сравнение парадигм программирования
  • Индуктивное программирование
  • Список декларативных языков программирования

Ссылки [ править ]

  1. ^ Ллойд, Дж. У., Практические преимущества декларативного программирования
  2. ^ "декларативный язык" . FOLDOC . 17 мая 2004 . Проверено 26 января 2020 года .
  3. ^ Себеста, Роберт (2016). Понятия языков программирования . Бостон: Пирсон. ISBN 978-0-13-394302-3. OCLC  896687896 .
  4. ^ "DAMP 2009: Семинар по декларативным аспектам многоядерного программирования" . Cse.unsw.edu.au. 20 января 2009 . Проверено 15 августа 2013 года .
  5. Chakravarty, Manuel MT (14 февраля 1997 г.). О массовом параллельном выполнении декларативных программ (докторская диссертация). Технический университет Берлина . Проверено 26 февраля 2015 года . В этом контексте критерием для объявления языка программирования является наличие четкого, математически установленного соответствия между языком и математической логикой, так что декларативная семантика языка может быть основана на модели или теории доказательства (или на обоих) логики.
  6. ^ "Пересмотренный отчет 7 по алгоритмической языковой схеме" (PDF) . Схема рабочей группы 1 . Проверено 5 декабря 2020 .
  7. ^ [1] Архивировано 23 октября 2007 г., в Wayback Machine.
  8. ^ «Декларативное моделирование» . Симулистика . Проверено 15 августа 2013 года .

Внешние ссылки [ править ]

  • Франс Коенен. Характеристики декларативных языков программирования . 1999 г.
  • Роберт Харпер .
    • Что такое декларативный язык? . 2013.
    • Существует такая вещь, как декларативный язык, и это лучший в мире DSL . 2013.
  • Улоф Торгерссон. Заметка о парадигмах декларативного программирования и будущем дефиниционного программирования . 1996 г.