Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Парадигмы программирования |
---|
|
В информатике , декларативное программирование является парадигма программирования -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]
См. Также [ править ]
- Сравнение парадигм программирования
- Индуктивное программирование
- Список декларативных языков программирования
Ссылки [ править ]
- ^ Ллойд, Дж. У., Практические преимущества декларативного программирования
- ^ "декларативный язык" . FOLDOC . 17 мая 2004 . Проверено 26 января 2020 года .
- ^ Себеста, Роберт (2016). Понятия языков программирования . Бостон: Пирсон. ISBN 978-0-13-394302-3. OCLC 896687896 .
- ^ "DAMP 2009: Семинар по декларативным аспектам многоядерного программирования" . Cse.unsw.edu.au. 20 января 2009 . Проверено 15 августа 2013 года .
- ↑ Chakravarty, Manuel MT (14 февраля 1997 г.). О массовом параллельном выполнении декларативных программ (докторская диссертация). Технический университет Берлина . Проверено 26 февраля 2015 года .
В этом контексте критерием для объявления языка программирования является наличие четкого, математически установленного соответствия между языком и математической логикой, так что декларативная семантика языка может быть основана на модели или теории доказательства (или на обоих) логики.
- ^ "Пересмотренный отчет 7 по алгоритмической языковой схеме" (PDF) . Схема рабочей группы 1 . Проверено 5 декабря 2020 .
- ^ [1] Архивировано 23 октября 2007 г., в Wayback Machine.
- ^ «Декларативное моделирование» . Симулистика . Проверено 15 августа 2013 года .
Внешние ссылки [ править ]
Викискладе есть медиафайлы, связанные с декларативным программированием . |
- Франс Коенен. Характеристики декларативных языков программирования . 1999 г.
- Роберт Харпер .
- Что такое декларативный язык? . 2013.
- Существует такая вещь, как декларативный язык, и это лучший в мире DSL . 2013.
- Улоф Торгерссон. Заметка о парадигмах декларативного программирования и будущем дефиниционного программирования . 1996 г.