Обсуждение:Декларативное программирование

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

Замечание по стилю[править код]

В общем и целом, декларативное программирование идёт от человека к машине, тогда как императивное — от машины к человеку — понятно, что хотели сказать, но как-то не по-русски получилось —be-nt-all (обс.) 02:58, 23 октября 2017 (UTC)[ответить]

Магические высказывания в статье[править код]

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

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

Mihail Haritonov (обс.)

  • Коллега Mihail Haritonov, посмотрел правки, которые были отменены. Вы написали хорошее эссе, но Википедия не является эссе, это не место для публикаций рассуждений авторов. Включение того или иного материала в Википедию определяется авторитетными источниками. Вы не привели ни один. Кроме того, часть высказываний неверна по своей сути, например: "часть кода, присутствующая в императивном программировании... в декларативном никуда не исчезает, а лишь переносится на сторону исполнителя на более низкий уровень". Есть языки описания железа, например, VHDL и Verilog, являющиеся декларативными и не подразумевающими выполнения инструкций как такового. Поэтому в целом отмену поддерживаю, но это, разумеется, НЕ означает, что какие-то части удалённого материала, будучи переработанными и снабжёнными авторитетными источниками, не могут быть снова включены в статью. Юрий (обс.) 16:42, 23 июня 2021 (UTC)[ответить]
  • Юрий, спасибо за Вашу рецензию. Я согласен с тем, что мои правки являются по сути эссе, т.к. я не привёл АИ. Я постараюсь это исправить. Что касается приведённых Вами языков (VHDL и Verilog), то судя из их определения в википедии, они являются языками описания, а не программирования. Но данная статья называется именно "декларативное программирование" (в определении которого идёт косвенная отсылка к определению компьютерная программа, где сказано, что это "комбинация компьютерных инструкций и данных"), поэтому, думаю, моё высказывание, всё же верно. Возможно, чтобы избежать этого противоречия, стоит разделить статью на "Декларативное программирование" и "Декларативный язык" или добавить раздел с разъяснением разницы. Mihail Haritonov (обс.)
  • В узком смысле - да, язык описания аппаратуры. В широком это всё программирование, как и HTML, и на этапе исполнения (трансляции) всегда присутствует императивный этап: для HTML это код, преобразующий текст в набор элементов в браузере (на дисплее), а для Verilog/VHDL - в набор транзисторов и их связей. Ну да ладно, это всё философия и моё ИМХО. Что касается статьи, то она вся сейчас, по сути, одно большое эссе: чьи-то мысли без АИ. По идее, она должна быть вся переписана. Если Вы можете этим заняться, прекрасно. Начните с выбора хороших АИ, и примите во внимание вот это. Юрий (обс.) 19:57, 30 июня 2021 (UTC)[ответить]

Уточнение[править код]

Верно ли понимать, что если язык истинно декларативный, то все возможные алгоритмы решения всех мыслимых задач во Вселенной уже заранее написаны и содержатся в компиляторе, который подбирает нужные по спецификациям проблемы и результата? Ну, а как иначе-то, совсем-то без алгоритма ведь ничего не сделать, это же не предвыборная политика, "вы много работаете и мало имеете - мы вернём старый пенсионный возраст и спишем долги малоимущим", надо ведь точно и детально, по шагам указать, где взять на всё на это деньги и как отбиться от тех, у кого их взяли. Michael MM (обс.) 15:58, 20 октября 2021 (UTC)[ответить]

  • Да, но поскольку нет никаких ограничений ни на проблему, ни на результат, ни на их сочетание - то и задача может оказаться любой. Проще объяснить от обратного: берём любую мыслимую задачу, описываем начальную проблему и желаемый результат - вот и декларативная программа, ау, компилятор, изволь, вынь-положь. Michael MM (обс.) 15:20, 21 октября 2021 (UTC)[ответить]