Кто убил пролог?

Original author: Maarten van Emden
  • Translation
Существуют тысячи языков программирования (строго говоря, так утверждают люди, которые их считают). Классификация такого количеств их разновидностей весьма сложна и служит источником споров. Тем не менее, классификация запутанна и зачастую противоречит сама себе. Предлагаю ограничиться четырьмя ветвями на верхнем уровне. Я привязал каждую ветвь к языку, который был первым в своем семействе в хронологическом порядке:
  • императивные (1956, Фортран);
  • функциональные (1959, Лисп);
  • объектно-ориентированные (1972, SmallTalk);
  • логические (1974, Пролог).

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

Вернемся к заголовку статьи. Убийцей (или избавителем, смотря, как вы относитесь к вопросу), я считаю японский проект «Вычислительных Систем Пятого Поколения», просуществовавший с 1982 по 1992. Даже тем, кто знал о проекте, стоит освежить в памяти его увлекательную историю в контексте времени. Эта статья с одной стороны обзор, а с другой — теория, того, как был убит Пролог, и как Лисп смог избежать схожей участи.

Начать стоит с 1982 года. Долгое время в центре внимания было военное и политическое противостояние СССР и США, но теперь его вытесняет промышленное и коммерческое соперничество с Японией. Япония, разрушенная и нищая в 1945, трансформировалась, пока никто не видел, в блестящую модель общества, создающего все предметы зависти современного индустриального мира. Японцы стали лучшими не только в часах, камерах и прочей потребительской электронике, но и в скоростных поездах, промышленных роботах, автомобилях, сталеварении и мейнфреймах (которые удивительным образом были полностью совместимы с системами IBM).

Хотя коммерческие успехи Японии и пугали, присутствовало убеждение, что ее основная роль — роль имитатора, а не новатора. Японии приписывалась нечестная конкуренция, паразитирующая на чужих исследованиях, особенно, на американских. Еще японская конкуренция считалась бесчестной из-за того, что японские компании (особенно кэйрецу) могли создавать альянсы, запрещенные антимонопольным законом для их американских соперников. Более того МИТИ (Министерство Иностранной Торговли и Индустрии Японии) подозревалось в управлении кэйрецу. Конечно же, такая конкуренция считалась бесчестной — она же такая неамериканская.

Книга Чалмерса Джонсона, которую стоит хотя бы пролистать, если не прочитать — «МИТИ и японское чудо: политика индустриального роста, 1925-1975», была опубликована в 1982. Ни десятью годами раньше, ни десятью годами позже, подобная книга не могла привлечь внимания. В 1982 она становится бестселлером.

Попробуйте представить, к каким последствиям при таком положении вещей привела новость о том, что МИТИ запускает проект по разработке принципиально новых компьютерных систем. Со стороны программной разработки проект включал в себя почти все, что было связанно с исследованиями ИИ. Аппаратная часть была полностью параллельной.

Маркетологи IBM приучили всех оценивать развитие компьютеров в терминах поколений. Утверждалось, что лампы породили компьютеры Первого Поколения, транзисторы — Второго Поколения. Потому, когда был выпущен IBM 360, это был не просто новый тип компьютера, это было новое поколение — Третье! В 1970-ых все запуталось, и не было четкого критерия для определения компьютеров Четвертого Поколения. Итак, в 1982 МИТИ финансирует запуск института названного ICOT (Institute for New Generation Computer Technology), цель которого создание «Вычислительных Систем Пятого Поколения».

Проект ассоциировался с двумя словами, нервирующими запад: МИТИ и ИИ. МИТИ — по причинам описанным выше. ИИ — потому, что о нем просто нельзя спокойно слушать: слишком долго в этой области было тихо. Периоды спокойного отношения к ИИ, чередуются с временами, когда от него ожидают малореальных прорывов. Начало очередного такого всплеска пришлось на 1982. Казалось, Япония меняет свою политику, которая и так уже была страшной силой, в сторону инноваций, чтобы смести все оставшиеся барьеры и окончательно захватить мир.

По всей планете началась суета в высоких кабинетах. В головах министров, ответственных за производство, науку, торговлю, экономику, образование и все остальное, зудел вопрос: Что Противопоставить? Правительство Тэтчер решило, что ответом будет программа Alvey; европейское содружество запустило ESPRIT (European Strategic Program on Research in Information Technology). В США дело обстояло иначе, правительство не могло просто выделить бюджет и выдать его исследователям, описывающим себя в качестве достойных получателей денег. В результате, меры противодействия в США были более интересными. Если правительство не может противодействовать, тогда может быть индустрия сформирует консорциум, который обеспечит лидерство США в области «Вычислительных Систем Пятого Поколения»? Не сформирует — запрещено антимонопольным законодательством. Но накал страстей был таким, что в 1984 правительство одобрило «Акт о Совместных Национальных Исследованиях». Никакого лоббирования не хватило бы для принятия такого закона. Мне кажется, что принятию способствовала книга «Пятое Поколение» Эдварда Файгенбаума и Памелы МакКормик, опубликованная в 1983. Хотя Файгенбан был академиком, очень уважаемым и стоящим у истоков экспертных систем, книга прекрасно написана. Она красноречива и захватывающа, как статьи журнале Times, который объявил человеком года ни кого-нибудь, а Компьютер.

После объяснений того, как экспертные системы повлияют на развитие Индустрии Знаний и как Знание само по себе станет национальным достоянием, Файгенбаум и МакКормик продолжают:
Для реализации такого виденья у японцев есть и стратегия, и тактика. Их стратегия проста и мудра: избежать лобового столкновения с американскими компаниями, доминирующими сейчас на рынке, вырваться вперед в 1990-е, где есть огромные просторы для роста экономического потенциала, который не замечают близорукие и самодовольные американские фирмы и быстро захватить эти просторы. Тактика определяется впечатляющим планом МИТИ, который называется «пятое поколение».

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

В атмосфере теплого приема этой книги небольшого лоббирования стало достаточно для принятия акта, который в достаточной мере ослабил антимонопольное законодательство, чтобы создание ответного консорциума стало правомерным. В качестве главы проекта был найден подходящий адмирал, видимо, под впечатлением Манхетеннского Проекта, который возглавлялся генералом. Этим адмиралом был Бобби Рей Инман, в прошлом директор Агентства Национальной Безопасности и заместитель директора Центрального Разведывательного Управления. Консорциум назвали «Корпорация Микроэлектроники и Вычислительных Технологий» и разместили в Остине штата Техас.

У проектов противодействия компьютерам пятого поколения было много оппонентов. Главным аргументом являлось утверждение, что проект компьютеров пятого поколения нельзя воспринимать всерьез. Звучали предположения, что хитрые японцы создали шумиху, чтобы заставить конкурентов бесцельно тратить ресурсы и ослабить запад. Некоторые говорили, что системы пятого поколения являются исключительно шумихой, т.к. направлены в сторону ИИ. И даже если японцы станут делать что-то связанной с ИИ, то будут заниматься Лисп-машинами, а не заменять Лисп на… как его там… ну этот… да, точно – Пролог.

Тем не менее выбор Пролога был озвучен из первых уст в рамках «Международной Конференции по Вычислительным Системам Пятого Поколения», прошедшей в Токио 19-21 октября 1981. Сборник докладов, под редакцией Т. Мото-Ока, до сих пор хранится во многих библиотеках. Конференция дала официальный запуск проекту. Многие доклады организационного комитета описывают и разъясняют как прорывы в ИИ, программном и аппаратном обеспечении позволят компьютерам вывести общество на новый уровень процветания и гармонии. Но были и доклады ученых, особенного внимания заслуживают доклады Ф. Фучи (ставшего в последствии директором ICOT) и К. Фурукава (ставшего руководителем направления в ICOT). Если исполнительный комитет болтал о выборе между Лиспом и Прологом в качестве языка и функциональным и логическим подходом в аппаратном обеспечении, то и Фучи и Фурукава четко определяли понятия: Пролог – это язык, логическое программирование – это методология. Параллелизм виделся основным направлением развития аппаратного обеспечения, а Пролог (будучи связанным с ним на низком уровне) казался наиболее подходящим инструментом. Следовательно, системы пятого поколения будут параллельными.

Перенесемся в 1992. Мир изменился. В 1990 индекс Никкей рос рекордно долгое время с самого начала проекта систем пятого поколения и собирался преодолеть планку в 40000. Но вместо продолжения роста, он начал падать, и к 1992 был уже вдвое меньше своего пикового значения. Большая часть Тойот и Хонд, разъезжающих по штатам, в штатах и были сделаны. Если кто и вспоминал об МИТИ, то только в учебных пособиях, рассказывающих, что МИТИ никогда не финансировало ни одного успешного проекта и ни разу не помогло промышленности, а только мешало ей своим вмешательством. Книга 1992 года – «Конец Истории и Последний Человек», Фрэнсис Фукуйама – поющая хвалу распространению американского стиля жизни по всему миру. Компании, занимавшиеся Лисп-машинами, исчезли, а те, что остались, превратились в что-то сильно отличное от производителей Лисп-машин. Интел повсеместно демонстрировала закон Мура на своих традиционных процессорах, которые исполняли Лисп-программы на обычных ПК быстрее чем Лисп-машины. Стремительный рост скоростей обычных процессоров убил интерес к параллелизму, который гораздо сложнее применять на практике. Пролог-версия параллельной Лисп-машины, такая заманчивая и многообещающая в 1982, стала реликтом.

Тем временем, в Токио проходит конференция «Вычислительные Системы Пятого Поколения 1992», зафиксировавшая конец этого проекта. Некоторые доклады были опубликованы в мартовском номере Communications, издаваемого ACM. Участники проекта не смогли справиться с людьми, думающими только о том, что проект создаст системы нового поколения, которые выведут общество на новый уровень процветания и гармонии, и забывшими о самой малости – параллельных вычислительных машинах. Первый доклад Фучи был завуалированным извинением, с оправданием «зато у нас есть замечательная параллельная вычислительная машина». Второй доклад, за авторство Роберта Ковальски, более четкий и даже содержал тему, набранную жирным шрифтом: «Что пошло не так?»

Вот и всё. Всего лишь «шумиха» в конце концов. Вычислительные системы пятого поколения ушли в небытиё, захватив с собой логическое программирование и Пролог. Фатальная связь логического программирования и систем пятого поколения образовалась только потому, что Фучи и Фурукава полюбили Пролог. Мораль такова, что если опустить болтовню организационных комитетов, люди выбирают между технологиями, и они выбирают те, которые они могут полюбить. В следующей своей статье, я планирую рассказать о том как Пролог появился на радарах японцев, когда небо сверкало от выстрелов Лисп. Выстрелов, которые делали люди, любящие Лисп. Я постараюсь максимально хорошо описать как люди влюбляются в Лисп, и как тоже самое происходит с Прологом.


Продолжение: "Фатальный выбор".
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 106

    +15
    Незнаю кто но меня в свое время он точно убил.
      +7
      На курсе Пролога помнится после ООП перестраиваться конечно очень сложно было. Мозг взрывался.
        0
        Ничего кроме названия про язык не слышал (ВО в облсти IT получил 5 лет назад), надо будет взглянуть на него.
          +2
          У нас курс довольно разнообразный был. И lisp, и пролог и 1с захватили… Даже DSP пробовали. Привет ТРТУ :)
            0
            Привет из НПИ ;) Был семестр ФЛП с лиспом и прологом. Мне понравилось
          +3
          У нас в ТулГУ в приложении к курсу «Экспертные Системы» тоже учили Prolog и даже лабы делали. А вот где реально мозг перестраивать надо — так это GPSS ;)
            +3
            Было, было… Не к ночи он будет помянут :)
              0
              Когда у меня был курс GPSS — я тогда писал какое-то многопоточное приложение на работе. И все в голове уклалось как нужно: есть конвеер на который поступаю разные объекты и из них нужно было сделать нужную процукцию:) Ну а на языке GPSS уже это всё описать.
                0
                Кстати, никогда бы не подумал изучая GPSS, что может когда-то пригодится… Позднее автоматизировали производственный процесс и встала задача моделирования технологического пути прохождения деталей по станкам. Система обслуживающих аппаратов, транзакций и очередей «один в один» как в GPSS. Правда реализовали все это на Delphi, но работало на «ура».
                +1
                Да уж :) У нас в институте был Пролог, да и GPSS тоже изучали. Слегка трудновато после многолетнего изучения С++ было понять язык логического программирования, но зато серьезно тренирует разум. И не прав тот, кто говорит, что в России нет высшего образования, оно есть ;)
                0
                аналогично. Меня наша преподавательница «похвалила», сказав что она первый раз видит, чтобы на прологе кто-то написал бы программу на Си (мой моск к тому моменту был уже необратимо поврежден).
                  0
                  Вспоминается, как молодой аспирант, смущаясь, пытался обьяснить нам, двум студенткам, сдающим лабу на Прологе, что «ну девочки, это не рекурсия, хотя… странно, это работает».
                    0
                    хвостовая рекурсия, ага ;) сейчас мне почти тридцать, я программист и бородат, и до сих пор чтобы уместить прологовские концепции в голове требуется применить некоторое ментальное усилие.
                0
                Помню у нас в библиотеке, на очень видном месте гордо стояла книга «Пролог — язык программирования будущего», года 90го выпуска.
                +1
                Цитата из вики в статье о Prolog:
                «Перспектива развития всемирной Сети, известной как проект Веб 3.0 поддерживает особый интерес к семантике распределенных данных и их обработке декларативными методами. В связи с этим появились концепции языка OWL, основанного на концепции First-Order Logic (FOL)[2], реализацию которой, в свою очередь, можно рассматривать как значительно более расширенную технику классического Prolog.»
                так что вроде жив язык.
                  +2
                  скорее оживает — параллельные вычисления, а с ними и логическое программирование, возвращается
                  потолок частотного ускорения слишком близок
                    0
                    OWL критикуют за излишнюю сложность, его лет пять назад на руках носили, говорили, что вот-вот OWL, RDF и прочие захватят мир. Не захватили.
                      0
                      В процессе захвата, посмотрите сайт bbc.co.uk — он вполне использует уже семантические фишки (дублин коре, запросы к dbpedia.org и прочее)
                      Просто RDF оказался неудобен, а вот RDFa в сочетании с HTML5 может оживить семантическую паутину.
                        +1
                        Проблема RDF и прочего подобного исключительно психологическая: люди не хотят, не умеют и не будут заполнять метаданные. Что-то можно, конечно, вытащить автоматом, но это эмпирические данные, от них никакой семантики толком. Так что я не верю в светлое семантическое будущее.
                          0
                          Посмотрим, на самом деле здесь не только психологический барьер, а так же еще банальный — технический (сделать апдейт в графе не такая и простая задача, даже Oracle не сделал еще полную поддержку SPARQL, хотя сделал уже большой шаг к этому), практическое применение получить от семантической паутины не так и просто, для компаний это очень серьезный шаг.
                            0
                            Полагаю, нас просто с детства учили читать неструктурированный негипертекстовый текст. Поэтому и к метаданным такое отношение.

                            Вот когда учебник литературы будет содержать не тексты произведений, а семантические графы, тогда и к метаданным отношение другое будет.
                            +1
                            И как он дублин коре использует? И что у DBPedia запрашивает? Можно поподробнее и с примерами?
                              +1
                              В общем-то, вы можете просто посмотреть исходных код их страниц и увидеть метаданные.
                              Запросы к dbpedia они делают для получения данных в своих раздела, например, можете открыть раздел о животных (http://www.bbc.co.uk/nature/animals/) — там берутся энциклопедические данные, а в качестве контекста уже подаются их программы на эту тему.

                              Боюсь если я начну расписывать все это — будет очень много текста и не думаю что это совсем к месту.
                                +1
                                Кстати, очень похоже что интересный пост получился бы :)
                          +4
                          Вы забыли, что SQL с каждой новой версией семантически приближается к Prolog. Даже группа по развитию SQL, собираясь каждые 10 лет обязательно упоминает об этом.
                          –2
                          жив, то жив но на последнем исдыхании. Хотя в ВУЗЕ где учусь, перваки изучают его немного.
                            0
                            Угу, у нас тоже изучают, курсе на втором, в одном предмете в Лиспом. А мне в свое время довелось и нечто вроде базы знаний на нем писать в курсовой. Не очень я его полюбила после этого.
                              0
                              я тоже было время курсовой на нем писал. давался вобщем кусок города. нужно было поставить две точки в этом куске город и программа должна была довести из одной точки до другой по кратчайшему маршруту описывая все улицы и дома по которым пролагается маршрут.
                                0
                                у меня метро было :)
                              0
                              Нам тоже пролог преподавали пару месяцев. Ничего оттуда не запомнил, в языке особо не разобрался. Разбираться сейчас в прологе никакого желания нет из-за того, что применять его все равно негде. Уж лучше бы лисп преподавали, функциональщина везде используется и на практике полезна.
                                0
                                > Разбираться сейчас в прологе никакого желания нет из-за того, что применять его все равно негде.

                                Зря вы так резко. Проблема не в языке, а в отсутствии раскрученных инструментов разработки. На прологе очень красивые системы бухучета могут получиться, например. Системы компьютерной алгебры, системы принятия решений, системы семантического поиска в Web 3.0
                                  0
                                  Могут, но не получаются. Вообще, декларативный ли, функциональный, асинхронный язык — не важно — без возможности написания на нём нормальных императивных программ они — бессмысленный пустой звук (тот же лисп — не вполне функциональный, в частности, благодаря макросам).
                                    +1
                                    Хм, не уловил, а как макросы ломают функциональность? Лисп даëт возможность писать программы имеративно с помощью присваивания (setq, etc), а макросы тут не при чëм, или я что-то упускаю?
                                      0
                                      Насколько я понял, некоторые общеупотребимые лисперами макросы (loop, например) вкупе с кейвордами «лёгким движением руки» добавляют во вполне себе функциональный Лисп программирование в императивном стиле (точнее, они добавляют императивные DSL). Можно даже (о ужас) программировать в стиле tagbody/go.

                                      Вместе с возможностью доступа в глобальную таблицу символов (насколько я понял, из любой части программы), в принципе, это делает Лисп таким же «функциональным», как Perl, Python или Javascript.
                                        0
                                        А, как-то я с этой стороны не посмотрел. Ну, возможность писать императивно не исключает возможность писать функционально. И это на лиспе всë-таки делать проще, чем на перле, питоне или жаваскрипте.
                                          0
                                          У Лиспа есть одно важное достоинство перед перечисленными: возможность программным образом обрабатывать исходные формы программы и писать эти самые макросы. А в остальном, «функциональность» в смысле возможности написания программ с подавлением возможных сайд-эффектов — такая же, как у перечисленных языков, просто вместо зоопарка скобочек и прочих лексических/синтаксических средств структурирования программ есть очень ограниченный набор правил.
                              0
                              классный язык
                              • UFO just landed and posted this here
                                +1
                                у них есть множество приемников


                                У них есть множество преемников.

                                А «приёмники» — это которые с антеннами и батарейками.
                                  0
                                  тож верно :)
                                  +1
                                  Мы тоже его изучали. И на вопросы о применении нам тупо отвечали:«ИИ и системы экспертной оценки». При этом никто из кафедры не смог привести пример ни одной реально работающей и востребованной ИС, написанной на прологе. ИМХО, пролог можно зарывать.
                                    0
                                    дело не в практике, дело в обучении логическому мышлению, думаю.
                                      0
                                      честно говоря, я так и не уловил различия в областях применения Пролога и Лиспа
                                      хотя у меня были отдельные курсы по ним
                                      и в том, и в другом определенный круг задач решается одинаково легко
                                        0
                                        Так ведь вся борьба между этими языками — борьба между технологиями Европы и Америки.

                                        Пролог — Лисп
                                        Паскаль — Си

                                        И то что победили вторые не заслуга самих языков, а грамотный маркетинг, затем инерционность мышления пользователей (влом переучиваться) и в конце уже мегааргумент — библиотек и инструментов больше для Лисп и Си. Но по вначале мегааргумента не было, а был только маркетинг.
                                          0
                                          еще в тему «невидимой» борьбы (из нижних комментов)

                                          Симула (Новегия 1967) — SmallTalk (США 1972)
                                            0
                                            был не прав, всё-таки Пролог изобрели в Европе
                                            0
                                            вы не поверите (в следующей статье есть об этом) — первые версии пролога были сделаны в Стэндфорде в лабораториях Роберта Ковальски, а вот ускорение и известность ему принесли уже Фурукава и проект пятого поколения
                                        0
                                        писал и работало… давно это было)
                                          +5
                                          Вы в университете учились или ПТУ? Вас не должны интересовать реально работающие и востребованные применения технологий. Вас учат думать своей головой, а не статистикой, и самостоятельно принимать решения.
                                            +1
                                            Судя по минусу, в наших университетах на самом деле не учат думать головой, а учат пользоваться популярными технологиями, не обращая внимания на их адекватность.
                                              +1
                                              Дело в том что в наших универах не учат думать своей головой, а учат бесполезным устаревшим техногиям.
                                                0
                                                умение думать головой вырабатывается исключительно самостоятельно
                                                универ может только помочь в этом
                                                холиварная тема, на самом деле, чему и как учить в ВУЗе, даже на Хабре столько копий поломано :)
                                          +2
                                          объектно-ориентированные (1972, SmallTalk);


                                          Симула была раньше. В 1967
                                            0
                                            автор из штатов, а за их пределами развитого мира нет, как известно :)
                                            кому какое дело, что там сказочной стране Норвегия в 67 изобрели
                                              0
                                              Симула не была чистым объектно-ориентированным языком.
                                              Тогда уж впишите лисп везде — на нём впервые варианты систем на логических формулах и передаче сообщений делались.
                                              0
                                              С нетерпением жду продолжения.
                                                +1
                                                к среде, думаю, переведу
                                                тоже весьма занятная статья
                                                  0
                                                  сделал, хоть и позже
                                                • UFO just landed and posted this here
                                                    +7
                                                    Как по мне — так эта статья живее всех живых. Стиль почти идеальный, давненько не встречал на хабре подобное.
                                                    • UFO just landed and posted this here
                                                    0
                                                    Может быть, если бы была приличная реализация пролога, многие бы его применяли. Наверняка многие его используют, не зная об этом, и создавая свои версии — когда пишут микро-экспертные системы.
                                                    +8
                                                    Позвольте поворчать :)

                                                    Объектно-ориентированное программирование — это методика, ортогональная и императивному, и функциональному, и логическому программированию. ООП есть и в хаскеле и в прологе и в Си, при желании. А те, языки которые обычно называют объектно-ориентированными (Java/C++) являются в целом имеративными. И забыли про одну важную разновидность — программирование в ограничениях. Итого:

                                                    * императивные
                                                    * функциональные
                                                    * логические
                                                    * в ограничениях (constraint programming, развитие идей логического программирования)

                                                    И еще: Лисп имеет достаточно мало связи с функциональным программированием. Если в Scheme еще туда-сюда, то Commonn Lisp скорее императивный объектно-ориентированный с развитой системой метапрограммирования, чем функциональный.

                                                      0
                                                      хорошо поворчали :)
                                                      позволю себе ответить цитатой: Тем не менее, классификация запутанна и зачастую противоречит сама себе.
                                                        0
                                                        Для своего времени (и ещё лет 10-20 после) LISP был самым функциональным из имеющихся. Хотя чисто функциональных языков в этом семействе до сих пор нет.
                                                      • UFO just landed and posted this here
                                                          0
                                                          Согласен, пролог сам убил себя. Он был кандидатом на серебрянную пулю, а их не существует. Я думаю декларативное программирование вообще плохо преспособлено решать сугубо прикладные задачи. Уж слишком императивен этот мир. Кто хочет похоливарить на этот счет, пусть вначале напишет алгоритм бинарного поиска в массиве на Си, хаскеле, прологе — в любом из трех случаев придется писать программу «на Си». Но я не хочу сказать, что декларативному программированию вообще нету места в промышленной разработке, некоторые элементы очень полезны, например: составление списков, монада maybe, лямбды.
                                                            +2
                                                            > Кто хочет похоливарить на этот счет, пусть вначале напишет алгоритм бинарного поиска в массиве на Си, хаскеле, прологе — в любом из трех случаев придется писать программу «на Си»

                                                            Зачем же писать и холиварить? До нас уже всё написали и доказали, что ваше мнение не верно.

                                                            rosettacode.org/wiki/Sorting_algorithms/Quicksort#C
                                                            rosettacode.org/wiki/Sorting_algorithms/Quicksort#Haskell
                                                            rosettacode.org/wiki/Sorting_algorithms/Quicksort#Prolog

                                                            Как говорится, найдите десять отличий. Даже немного смешно, что вы могли такое мнение высказать. Похоже, вам со школы внушали, что кроме императивной парадигмы ничего не существует.
                                                              +1
                                                              Увы, я тоже свято верил во все это, когда учил хаскель :). Но все таки вы не правы. Я просил именно бинарный поиск, а не сортировку. И конечно же нормальную, эффективную (читай итеративную) реализацию без рекурсии, в крайнем случае на хвостовой рекурсии.

                                                              Что касается quicksort, то и на С++ можно написать такую же тормозную и компактную реализацию, как и на хаскеле или прологе.

                                                              > Похоже, вам со школы внушали, что кроме императивной парадигмы ничего не существует.

                                                              Ничего мне не внушали. Просто я побаловался с лиспом и хаскелем, а потом вырос и понял, что мне все эти костыли не нужны.
                                                                0
                                                                Бывает. Люди вон «вырастают» и понимают что им линукс даже серверах не нужен. Мало ли чего может с человеком произойти.
                                                                  0
                                                                  Бывает и такое, но это не про меня — у меня линукс на всех компьютерах :)
                                                                  0
                                                                  Позвольте уточнить. С каким именно лиспом вы знакомились в контексте декларативных языков? Просто ни одного современного декларативного языка этого семейства не припомню, кроме Scheme.
                                                                    0
                                                                    SICP читал, какие-то упражнения делал на Scheme. Помнится был в восторге от программы символьного дифференцирования.
                                                                      +1
                                                                      Среди лисперов бытует мнение, что Scheme — идеальный язык, пока не пытаешься написать на нём что-то полезное. :) Мой опыт это мнение подтверждает.

                                                                      Так же мой опыт подтверждает мнение, что чисто декларативные языки (например, erlang, синтаксис которого — prolog процентов на 80) нужны только в сильно многопоточных приложениях. Иначе идеальны мультипарадигменные вроде Common Lisp или (внезапно) ещё шевелящегося D. Или Python. Или C++, если бы не его многочисленные другие недостатки.

                                                                      Потому что почти в любой задаче есть и императивные и декларативные куски. А императивные иногда легко описываются как набор объектов, а иногда — как набор процедур.
                                                                        0
                                                                        Да, я с этим согласен сам использую разные парадигмы в коде. Я собственно сразу написал, что место декларативному подходу вообще есть. Но «чистые» вещи, вроде хаскеля, навечно обречены быть инструментом для решения задачек с Project Euler-а :) Пролог видимо такой же сферический конь в вакуме, да еще и с совсем скудными возможностями — реализовать пролог в лиспе задачка на вечер.
                                                              0
                                                              Я мож чего не понял, но понятие «алгоритм» — сугубо императивное. Как можно вообще просить сделать «алгоритм» на Прологе?
                                                                0
                                                                И да и нет. Конечно, совковое определение алгоритма императивное. Однако единого мнения на этот счет нету, есть версии определения вполне годящиеся и для декларативных языков. Например: «Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи»
                                                                Но какие определения не давай, все равно, вы правы, алгоритмы обычно даются в императивной записи в виде строгой последовательности действий.
                                                            –1
                                                            раз на нем никто не пишет, значит плохой язык был, независимо от того, что сделали японцы
                                                              0
                                                              то что многие пишут на PHP не хороший, так и prolog не плохой потому что никто не пишет — причины какие-то другие. Одна из них — в эпоху его распространения он требовал памяти больше чем было в системе.
                                                                0
                                                                ну, а сейчас почему на него не переходят? потому что он не приспособлен к реальным задачам. я считаю так.
                                                                  +1
                                                                  гм… про паровозы тоже говорили «кто на этом железном взрывоопасном чудовище поедет?»
                                                                  на мой взгляд, критическая масса еще не набралась — пока с коммерческой точки зрения пролог невыгоден
                                                                  хотя может и не наберется никогда — конкуренты есть и тоже развиваются
                                                                    0
                                                                    А вот вам другой пример: многие в том числе и Intel прекрасно знает, что x86 архитектура тяжела и неповоротлива сегодня, с огромным количеством ошибок и костылей, даже были попытки со стороны той же Intel представить что-то принципиально новое, но почему-то мы до сих пор сидим на этой x86 архитектуре… Интересно почему?

                                                                    Или вот пример из прошлого: Симула была первым ООП, но было не её время и проект и сам подход себя тогда изжил. Сейчас какой вид программирования доминирующий?

                                                                    Порой наработанные привычки и инерционный подход и потребление не позволяют чему-то принципиально новому придти сделать качественный скачок вперёд. Что-то новое, пусть и хорошо забытое старое, вылезает в условиях той современной конкуренции подходов только если в наиболее популярных сегодня подходах накопится критическая масса неудобства, ошибок, противоречий и сложности.
                                                                      0
                                                                      Реальным задачам это к каким? Web? А в какой-нибудь системе определения атак или неполадок вполне можно было бы использовать пролог, мне кажется.

                                                                      Далее, где этот пролог? Я могу из перла эффективно использовать программу на прологе, или из каких-то других языков? Есть реализации, но пролог написанный на perl — это диковато, там структуры данных развесистые, надо память экономить.

                                                                      А во-вторых сейчас программирование забито сильно программированием сайтов, остальные направления массовому программисту просто не видны, хотя они и есть. Думаю, что и на прологоподобных языках пишут, задачи искусственного интеллекта типа распознавания чего-то ведь никуда не делись.
                                                                –1
                                                                Так вроде Erlang жив, а он и пролог — почти одно и то же.
                                                                  0
                                                                  из похожего — только схожий синтаксис, а так все разное
                                                                    0
                                                                    Есть несколько общих идей, например, паттерн матчинг и там и там можно применять где угодно, а не в строго обозначенных синтаксисом местах, как в большинстве других языков где он есть, синтаксис похож.

                                                                    Модель вычислений разная. Функциональная и логическая соответственно. Обе декларативные.
                                                                    0
                                                                    Ну автор прочел пару «бестселлеров» и убежден, что схватил ту эпоху целиком, хотя кажется и близко не подошел…
                                                                    и ничего о Рейгане.
                                                                      0
                                                                      У нас его в школе в 10 классе целых две четверти преподавали. Никто так и не понял что это и для чего. На неокрепшие мозги без какого-то бекграунда не ложатся такие абстракции…
                                                                        0
                                                                        жуть какая…
                                                                        за жестокое обращение с детьми привлечь педагогов не пытались? :)
                                                                          0
                                                                          Мне студенты педунивера говорили об экспериментах, в которых обучали семилетних детей паскалю и прологу. Скорость овладения примерно одинаковая. Но переучивание на другой язык требует значительно большего времени.
                                                                          0
                                                                          Предлагаю ограничиться четырьмя ветвями на верхнем уровне. Я привязал каждую ветвь к языку, который был первым в своем семействе в хронологическом порядке:

                                                                          * объектно-ориентированные (1972, SmallTalk);
                                                                          Все хорошо, но это Simula 67 — первый ОО язык.

                                                                          The Vietnam War was still a page-4 item; barricades had not yet sprung up in the streets of Paris; a mini-skirt could still cause a stir: away by the Northern shores of the Baltic a few fortunate software developers led by a handful of visionaries were already profiting from the power of classes, inheritance, polymorphism, dynamic binding and most of the other marvels of object orientation.
                                                                          Газеты обсуждали войну во Вьетнаме, Париж пока еще не зарос баррикадами, миниюбка могла вызвать переполох, а счастливчики с северного побережья Балтики уже использовали классы, наследование, полиморфизм, динамическое связывание и другие вкусности ОО.
                                                                          • UFO just landed and posted this here
                                                                              0
                                                                              Извините, но Вы c COBOL хорошо знакомы? Чтоб это утверждать? Я его в глаза не видел никогда, но английская вики говорит, что ОО в него стали добовлять только 90х. И окончательно эта фича вошла в него только по стандарту 2002 года.
                                                                              • UFO just landed and posted this here
                                                                              0
                                                                              Интересное мнение о «Конец истории...» Фукуямы. Такое ощущение что автор не читал работу, а просто что-то слышал о ней.
                                                                                0
                                                                                «Prolog is similar to Lisp on the main points.» — Norvig, PAIP, p. 381
                                                                                  +1
                                                                                  Да ну. Дело совсем не в этом, как мне кажется. Ну не получилось у японцев с Пролгом, почему это должно означать смерть языку? У многих современных стартапов, разрабатывающих процессоры с новыми микроархитектурами, не получается с Си. Си от этого слабее не становится.

                                                                                  IMHO, дело в самом Прологе. Просто на практике умение пролога строить логические выводы от одного набора предикатов к другому не так уж и востребовано. Для человечества гораздо важнее хранить большие объёмы данных, кодировать и декодировать сигналы, проводить инженерные расчёты. Пролог (в чистом виде) для всех этих целей совсем не подходит. Будь он даже в 100 раз параллельнее ФОРТРАНА. Ну не для этого он (как и LISP) был предназначен. Поэтому, как бы, и кажется, что на фоне других языков Пролог не успешен.

                                                                                  Вот. Но, IMHO, Пролог (да у меня странный стиль переключения раскладок :) в своей нише живее всех живых. И последователи у него есть, при чём весьма продвинутые. Взять тот же Oz. Плюс алгоритмы, на которых Prolog построен, широко используются в других проектах, в символьной математике, например, которая широко используется в пакетах для расчётов.

                                                                                  И т.д. и т.п. Так что, говорить, что Пролог — штука не успешная, вряд ли оправдано. Хороший язык, хорошая концепция для определённого класса задач, успешно всё это развивается и используется. Просто круг задач не такой широкий.
                                                                                  • UFO just landed and posted this here
                                                                                      0
                                                                                      Раньше и трава зеленее была…
                                                                                        0
                                                                                        Спасибо за интересную статью.
                                                                                        Изучал и Lisp и Prolog, поэтому будет очень интересно узнать о них побольше.
                                                                                        Если с примерами будет, то вообще замечательно. :)
                                                                                          0
                                                                                          На самом деле пролог живет и сейчас как средство прототипирования алгоритмов… Занимался в свое время, писал на ECLiPSe строил динамические модифицируемые сети решений уравнений в ограничениях с условие веса каждого из уровнений…

                                                                                          ECLiPSe кстати это уже не стандартный пролог, а пролог с механизмом «отложенного выполнения целей», к нему кстати и gtk прикручивается :) можно GUI делать. Дык вот программка у меня была где-то на 400 строк (без GUI)… Конечно работало это не шустро, но я потом прикинул сколько бы у меня такая-же программка занимала на с++ и получилось что не меньше 3500 тыс. строк :) тобишь в 7 раз больше…

                                                                                          То что пролог выворачивает мозг и чтобы на нем программировать надо забыть о функциональном программировании это точно :) но надо сказать что когда привыкаешь, то просто «подсаживаешься» на этот «кайф» :) начинаешь просто думать на нем ;)

                                                                                          Вобщем имхо для науки, когда хочется быстро запрототипировать какой-нить довольно сложный алгоритм на графах, пролог очень даже само то…
                                                                                            0
                                                                                            Пролог не убил, а улучшил SQL (как правильно написано выше).
                                                                                            А следующим этапом должно быть QBE с учетом возможных вопросов к БД.

                                                                                            Only users with full accounts can post comments. Log in, please.