Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 462 20-07-2006 05:51 | |
Ответ на »сообщение 461« ()
___________________________
>>> Ведь бог создал всю вселенную за 6 дней.
Да, но сколько багов! :)Тэстировать не кому было...
Вот мы и тестрируем Сообщение не подписано
№ 461 20-07-2006 05:08 | |
Ответ на »сообщение 460« (Как слышно? Приём!)
___________________________
>>> Ведь бог создал всю вселенную за 6 дней.
Да, но сколько багов! :) Тэстировать не кому было... Сообщение не подписано
№ 460 20-07-2006 03:54 | |
>>> Ведь бог создал всю вселенную за 6 дней.
Да, но сколько багов! :)
№ 459 20-07-2006 03:03 | |
№ 458 20-07-2006 02:36 | |
Ответ на »сообщение 457« (Артем)
___________________________
P.S. В Библии надо первое предложение заменить на “В начале был Лисп” :)))))
Дык программисты считают что в Библии есть прямое указание на это.
Ведь бог создал всю вселенную за 6 дней.
А в такие короткие сроки такую огромную задачу только на лиспе написать и можно :))
№ 457 20-07-2006 02:29 | |
Ответ на »сообщение 454« (Jack Of Shadows)
___________________________
А лисп подойдет не спеша. Ему торопиться некуда. Ведь он не однодневка, ему жить тысячи лет :)) Пройдут года и многие языки популярные сегодня, просто канут в лету, как это уже на раз происходило. Но лисп это не язык пограммирования, это закон программирования. Его нельзя создать, его можно открыть.
Он существовал с начала вселенной, и будет существовать и после того как исчезнет человечество. Лисп это математический аппарат, строгий, законченный. В него нельзя ничего добавить, и ничего из него убрать.
Боже, что там с вами случилось? :) Вы грибов, случайно, не объелись? Если вы и дальше будете выдавать такие перлы, то я с воплями ужаса умчусь с этого форума. Или вы этого и добиваетесь? :)))
P.S. В Библии надо первое предложение заменить на “В начале был Лисп” :)))))
№ 456 20-07-2006 02:18 | |
Я там в прошлом посте недописал, что лучшая IMHO парадигма взаимодействия языков реализована в dotNet Да-да. Билли - молодец. :)
№ 455 20-07-2006 02:15 | |
Ответ на »сообщение 452« (Jack Of Shadows)
___________________________
1. Просто, у меня другие задачи.
И на основании этого вы сделали вывод что Пролог доминирует в логическом программировании ? :))
Нет, не на основании этого. Здесь я указал, что особенно глубоко не вникал в другие системы лог. Программирования, потому что Пролог полностью удовлетворяет все мои потребности (в спец. областях, естественно). О преимуществе Пролога, я сужу по упоминаемости как в институтском курсе, так и по материалам в Интернете. О таких системах как OPS5, Planner, CLIPS я краем уха слышал. Что касается современного развития лог. программирования, то в Интернете (IMHO) много материалов именно по Прологу и производным от него, таким как Mercury. Я не пытаюсь тут изобразить из себя гуру декларативного программирования. Естественно, что я принимаю к сведению мнения других людей о каких-то языках. Сначала это был преподаватель, потом авторы статей в Интернете. Однако ваши утверждения о частоте использовании того или иного продукта, в принципе, такие же голословные, если уж на то пошло, как и мои. Они продиктованы или субъективным опытом, или, извините, непреодолимым желанием указать кому-либо на его недоразвитотсть
2. К вопросу о ленивых вычислениях в Лиспе.
Простите, может конечно. Я это подраумевал, когда отвечал, и забыл.
Потом вы написали
В лиспе вообще НЕТ ленивых вычислений. Как и нет ООП, нет аспектов, нет list comprehensionы. Да черт возьми практически НИЧЕГО НЕТ. И в то же время в лиспе есть все то что только может быть в любом языке программирования. Есть ООП (библиотека CLOS), есть list comprehensions (если читали эту ветку то код макроса я приводил), есть аспекты, и конечно же есть ленивые вычисления (библиотека)
Вы сами себе противоречите и вас трудно понять. То может, то не может. Я сейчас тоже приведу пример библиотеки встроенного Лиспа для Дельфи и скажу, что Дельфи поэтому гораздо круче. В C++ тоже есть библиотеки для работы с множествами или всякие хитрые вещи, для реализации интерфейсного наследования. Но в Дельфи (и в C#) это гораздо удобнее. Когда какие-то возможности встроены в язык и когда реализуются правой ногой через левое ухо, - это, извините, "две большие разницы" :) Преимущество таких языков как Хаскель именно в том, что ленивые вычисления являются их имманентным свойством. В современных версия Пролог-производных, кстати, тоже есть возможность использования ленивых вычислений.
3. Вот скажем библиотека работы с sql в дельфи, не изменяет сам язык, не добавляет в него sql. Вы там sql все равно в виде string пишете. Причем неважно что вы там написали, дельфи просто схавает при компиляции, а ошибку вы получите уже при исполнении. В лиспе библиотека добавляет sql прямо в язык. То есть вы можете прямо в лисп коде писать. Причем будет проверка при компиляции.
Ну, во-первых, когда я пихаю SQL в Дельфи, то я его всегда проверяю хотя бы с помощью SQL-Explorer или при простом SQL запросе сделав TQuery активным. (Я не говорю про ADO.Net модель связи с базой данных, там это более продвинуто) В конце концов, если вы так уж любите библиотеки, не очень трудно написать таковую, которая проверяет корректность SQL. Может, такие и есть для Дельфи. Неужели Лисп настолько интеллектуален, что может при компиляции обнаружить несоответствие названий полей реальной структуре базы, или даже такую неприятную вещь, как кортежное произведение двух подзапросов в большой базе? Что, при программировании на Лиспе не надо проверять свои запросы с помощью специфических интрументов, предназначенных именно для работы с базами данных?
4. В лисп таким образом можно добавить любой язык, пролог, опс, да черт возьми html (код html я здесь приводил) И в Дельфи тоже можно добавить. Мало ли доморощенных библиотек, реализующих тот или иной язык? Но вот в сравнении с оригиналом… Не думаю, что встроеный в какой-нибудь Лисп Пролог можно было сравнить даже с SWI, не говоря уже о SICSTUS.
Насчет взаимодействия языков, то лучшая (опять-таки IMHO) парадигма реализована
5. К вашему сведению все эти прологи, опсы и прочая логическая лабуда разрабатывались на лиспе. И уже позже переписывались на си для эффективности. Вот здесь вы и прокололись. Это говорит как раз о примитивности Лиспа, в сравнении с указанными системами. Обычно более высокоуровневые языки пишутся на менее высокоуровневых. А если следовать вашей логике, то ассемблер – это самый крутой язык, а все прочее - лабуда. Даже не ассемблер, а машинные коды :) И, в конце концов, тот же Лисп писался, скорее всего на C (и даже не на C++). Что насчет первоначальной разработки "логической лабуды" на Лиспе, а потом переписывании на C, то скорее всего Лисповый текст компилировался в сишный код, который потом оптимизировали (вот видите, опять ваш Лисп не идеален :) ) И, уверен, что есть реализации этой "лабуды", которые не писались на Лиспе. Лень рыться по документации, но если это вас интересует, то я могу поискать, в каких системах сделаны реализации Пролога, которыми я пользуюсь.
№ 454 19-07-2006 13:01 | |
Ответ на »сообщение 453« (Сергей Перовский)
___________________________
Ну вот, кажется мы и добрались до области применения лиспа: моделирование специализированных языков программирования.
Так оно и было десятилетиями. Но сейчас ситуация меняется.
Резко начинают набирать популярность динамические языки со сборщиком мусора (Python, Ruby)
А лисп это тоже динамический язык со сборщиком мусора, только на порядок мощнее всех этих игрушек (Python, Ruby)
Они проложили дорогу, как легкая кавалерия скачет впереди тяжелой пехоты.
А лисп подойдет не спеша. Ему торопиться некуда. Ведь он не однодневка, ему жить тысячи лет :))
Пройдут года и многие языки популярные сегодня, просто канут в лету, как это уже на раз происходило.
Но лисп это не язык пограммирования, это закон программирования.
Его нельзя создать, его можно открыть.
Он существовал с начала вселенной, и будет существовать и после того как исчезнет человечество.
Лисп это математический аппарат, строгий, законченный. В него нельзя ничего добавить, и ничего из него убрать.
(Эк меня понесло :))) )
№ 453 19-07-2006 12:03 | |
Ответ на »сообщение 452« (Jack Of Shadows)
___________________________
Лисп вообще никаких барьеров в виде синтаксиса программисту не ставит.
Поэтому он является основным языком для исследований в области программирования, особенно в области ИИ.
К вашему сведению все эти прологи, опсы и прочая логическая лабуда разрабатывались на лиспе.
И уже позже переписывались на си для эффективности.
Ну вот, кажется мы и добрались до области применения лиспа: моделирование специализированных языков программирования.
Если для некоторого класса задач эффективно применение специального языка с необычным синтаксисом, разумнее всего, для начала, написать его на лиспе. Если задачи не ресурсоемки, то можно так и оставить. Если эффективность трансляции и исполнения имеет значение, то, скорее всего, придется переписать на других языках (вплоть до ассемблера).
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|