vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2009-12-11 12:00 pm

Возрождение логического программирования

Когда-то давно японцы с большой помпой организовали проект "компьютеров 5-го поколения". С упором на логическую парадигму, в частности язык Prolog. Проект с треском провалился.

В начале 90-х использованрие Prolog воспринималось скорее как курьез, хотя по крайней мере одну геоинформационную систему в нашей лаборатории в Почвенном институте (еще до моего прихода туда) на Turbo Prolog написали.

Потом почти 20 лет в тех областях IT, с которыми мне приходилось иметь дело, единственным реально используемым языком логического программирования был make.

А вот сегодня [livejournal.com profile] abbra пишет об использовании Prolog в системе управления энергопотреблением Nokia N900.
Я злобно ругаюсь у него в комментариях. Почему? Да точно так же я бы ругался если бы кто-то сегодня использовал Fortran IV для решения задачи которую стоит решать в каком-нибудь Matlab или использования gw-basic там, где под рукой есть интерпретатор Python.

Другое дело, что предложить инструмент логического программирования эквивалентный по зрелости Python или Matlab я, пожалуй, не возьмусь. Если проводить параллель между Prolog и Fortran (хотя может быть, разумее сравнивать Prolog с basic - уж больно до хрена диалектов и Turbo среда опять же существовала), то make - это аналог bourne shell. Причем даже gnu make - ни разу не bash, а в лучшем случае dash. На bash/zsh тянут разве что bras и ему подобные make replacements.

А вот языков которые были бы в области логического программирования тем, чем являются современные продвинутые скриптовые языки (включая и нелюбимый мной php) в области императивного программирования - мне что-то неизвестно.

Но вообще тенденция возвращения логического программирования интересна. Да, конечно, мы потеряли 20 лет. Но теперь, пусть из-за внутренних потребностей вычислительной техники - управления её собственным энергопотреблением, возвращаются технологии, которые пригодны для управления объектами реального мира. Вспомним, что Шумил описывает управление киберами именно как логическое программирование.

[identity profile] potan.livejournal.com 2009-12-11 09:21 am (UTC)(link)
Prolog сегодня это не то же самое, что Prolog 20 лет назад. Он развивается.
Из интересных разработок в области ЛП отмечу Mercury и Curry. Первый очень эффективен, хоть и поддержка ЛП ограничена. Curry очень красив (синтаксис и многие фичи взяты из Haskell), но как-то вяло развивается.
Но сейчас более интересно обобщение ЛП - программирование в ограничениях.

[identity profile] father-gorry.livejournal.com 2009-12-11 09:29 am (UTC)(link)
К своему стыду, никогда не понимал разницы между парадигмами. Для меня любой язык выглядит как набор упрощающих задачу функций и средств инкапсуляции. А потом - нужна логика, значит пишем с упором на логику. Нужна работа со свойствами - сопоставляем свойства в таблицеподобном виде. И т.д.
andrzejn: (Default)

[personal profile] andrzejn 2009-12-11 09:41 am (UTC)(link)
Я крайне поверхностно знаком с логическим и функциональным программированиями, поэтому мне любопытно:

Можно ли кратко указать, какая существенная возможность Prolog отсутствует в современных функциональных языках - всех этих ML, Haskell, Clean, F#?...

[identity profile] permea-kra.livejournal.com 2009-12-11 09:51 am (UTC)(link)
Витус, а посмотрите на языки, которые term rewriting. типа Pure.

[identity profile] max630.livejournal.com 2009-12-11 10:05 am (UTC)(link)
Вот я так и не понял, что такое это логическое программирование. Учебные примеры на prolog по тасованию родственников совершенно неубедительны, кроме того непонятно как это имплементироваить иначе как полным перебором вариантов.

а какое отношение имеет make к ЛП - тоже непонятно. По-моему, у него ровно одно предназначение - управлять зависимыми друго от друга задачами. что он, надо признать, делает хорошо.

[identity profile] volodymir-k.livejournal.com 2009-12-11 11:54 am (UTC)(link)
> Проект с треском провалился.

Казалось бы, не работает -- похоронить и забыть. Пробовали много раз, разные люди. Не работает. Нет, "возрождают".

[identity profile] vit-r.livejournal.com 2009-12-11 12:45 pm (UTC)(link)
XSLT - убогий наследник Лиспа.

[identity profile] afa-at-work.livejournal.com 2009-12-11 01:23 pm (UTC)(link)
вот интересно, кста.
а рубишный rake куда среди мэйков отнесен будет?

[identity profile] the-realistic.livejournal.com 2009-12-11 10:29 pm (UTC)(link)
В Windows NT версии до 4ой на Прологе была написана та часть control panel, что строила реестр для сетевых компонент.

Задача: перебрать сетевые компоненты в системе, для каждого выяснить интерфейсы сверху и снизу, догадаться, кто с кем стыкуется, и эту "карту стыков" хитрым замудреным образом вписать в реестр.

В 4рке вместо Пролога сделали скриптовый язык INF файлов, они были _императивные_, и да, отдаленно смахивали на Питон.

В w2k все это выбросили, и вместо этого сделали декларативный язык INF файлов (PnPшных, по некоей концептуальной сути оно похоже на make), с возможностью воткнуть куда не попадя еще и специфичные для компонента, написанные в машинном коде, coinstaller и notify object DLLs. В первом грубейшем приближении - сначала все делается на основе INF файлов, потом этот первый результат предъявляется nofify objectам, что вносят в него правки.

Это и по сей день так.