Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 442 18-07-2006 13:51 | |
Ответ на »сообщение 440« (Артем)
___________________________
Надеюсь, что это мое утверждение не вызовет истерическую реакцию и требование от модератора закрыть мне рот )
Не паясничейте Артем, я не затыкаю вам рот. Более того я рад что вы заинтереснованы в обсуждении пролога и ocaml, о чем вам кстати и сказал. Просто следите за своей речью.
Мол, если кто-то с вами не согласен, то он посредственность,
Я привел слова создателей java и сишарп об их собственных языках. При этом я сам несколько лет активно работаю на java, да и на dotnet тоже уже перешел. То что вы и я вынуждены использовать посредственный инструмент ни в коем случае не означает что я считаю посредственностью.
Мы здесь обсуждаем ФЯ, то есть инструменты, помогающие мне (и вам) выходить за жесткие рамки, навязанные существующими языками. Я бы не стал обсуждать ФЯ с посредственностями :)), а значит и вас таковым не считаю, тем более учитывая то что вы видите преимущества логического программирования и используете пролог, что является невероятной редкостью в среде дельфистов. Да вы уникум, уважаемый, как вас можно считать посредственностью ? Да и кто ? Я ?!! тот кто САМ ИСПОЛЬЗУЕТ ПРОЛОГ ?
Нельзя ли подробнее об этом?
А вот это уже другой разговор. От безапелляционных заявлений к вопросам.
http://www.gigamonkeys.com/book/ Главы 16 и 17. Увы на английском.
Если кто посоветует литературу по CLOS (это ООП система в лисп) на русском, буду рад за вас.
По моему здесь пробегала ссылка на русские учебники по лиспу.
СКОЛЬКО ВСЕГО ПРОГРАММ ВЫ НАПИСАЛИ НА ЛИСПЕ?
Я работал на лиспе с 1992 года. Не могу сказать точное число программ, но достаточно много.
Особенно графику (Autocad) и GUI
Сейчас у нас в компании я на лиспе написал и веду сервер правил (rule engine)
Ну, тут вы сами себе противоречите. На протяжениее всей дискуссии вы доказываете, что такой универсальный язык есть. Как он называется? Укадайте с трех раз :)
Вот тут вы меня поймали :)) Согласен, признаю, я считаю лисп универсальным языком. Однако я не считаю лисп языком для всех, и потому несмотря на его универсальность, необходимость в других языках не отменяется.
Именно потому что лисп не для всех. Иначе не было бы смысла в создании java.
Далее, лисперы на самом деле не решают задачи (крупные задачи конечно) на лиспе. Они сначала создают на нем ЯЗЫК ПРОГРАММИРОВАНИЯ, идеально заточенный под конкретную задачу, и уже затем при помомщи этого языка решают саму задачу.
лисп называют programmable programming language.
Так что для лиспера мысль о необходимости множества языков является естественной, ведь он это множество сам создает. :))
Об этом говорит тот факт что в лиспе я пользуюсь встроенными пролог и OPS для работы с базами знаний.
Но в отличии от вас, для меня все это множество языков - лисп. Мне не нужно учить разные синтаксисы, мне не нужно запускать разные компиляторы, мне не нужно организовывать взаимодействие между разными средами.
Кстати, раз уж речь зашла о логическом программировании и о прологе.
Артем, вынужден вас огорчить. Пролог не является доминирующим языком в логическом программировании.
Более того, он просто физически не в состоянии этого сделать. По той простой причине что пролог представляет из себя один из двух подходов к работе с базами знаний - а именно backward chaining.
Существует еще и forward chaining, который представлен такими языками как OPS, CLIPS.
Я например в своем сервере правил использую диалект OPS - KnowledgeWorks. При этом KnowledgeWorks имеет встроенный пролог в качестве языка запросов к базе знаний. Я выбрал эту систему именно потому что в ней реализованны оба подхода. То есть я могу решать весь спектр логических задач, а не только половину, доступную вам в прологе.
Я вам советую ознакомиться с OPS, поскольку вы любитель логического программирования, и было бы жаль, если для вас осталось бы неизведанной огромная область (половина!!!) логического программирования.
Ну а по поводу того какой же подход доминирует в этой области, то выиграл forward chaining.
То есть большинство экспертных систем построено при помощи языков семейства OPS. При этом многие из них имеют встроенный пролог, как удобный ДОПОЛНИТЕЛЬНЫЙ инструмент для анализа базы знаний.
№ 441 18-07-2006 13:23 | |
Там в предыдущем посте я ошибся с Quote, поэтому позволю еще раз спросить ув. Jack of Shadows, сколько он всего написал программ на Лиспе?
№ 440 18-07-2006 13:18 | |
Ответ на »сообщение 439« (Jack Of Shadows)
___________________________
Ув. Jack of Shadows! На протяжении всей этой дискуссии очень хорошо прослеживается ваше желание указать на интеллектуальную неполноценность ваших оппонентов. Мол, если кто-то с вами не согласен, то он посредственность, и кроме пары языков ничего больше не знает. Причем, эта тема витает не только в общении со мной. ( Надеюсь, что это мое утверждение не вызовет истерическую реакцию и требование от модератора закрыть мне рот ) Теперь, перейдем от лирики к конкретике.
Мы не будем хихикать и ерничать Артем, мы всего лишь укажем вам что гораздо более мощные механизмы ООП существуют уже десятки лет в Smalltalk и лисп.
Нельзя ли подробнее об этом? Я понимаю, как вам приятно скрестив руки на груди, сообщить другим о своем превосходстве, но не могли бы вы снизойти и поведать нам, несчастным, о более мощных механизмах ООП. Я то, глупый, думал что SmallTalk по своей сути – экспериментальный язык, а в C# красиво реализовали только действительно нужные и удобные вещи, а такие, как например множественное наследование из C++ отбросили (правда, оно чудесно и без побочных эффектов реализуется в C# через интерфейсы).
Универсальный язык для всех - это утопия. Да вы и сами это прекрасно значете, иначе не работали бы с прологом В СВЯЗКЕ с dotnet, а делали бы все на одном языке.
Оглянитесь, с какой стати люди понаделали сотни языков программирования, если достаточно одного ? [/Qoute]
Ну, тут вы сами себе противоречите. На протяжениее всей дискуссии вы доказываете, что такой универсальный язык есть. Как он называется? Укадайте с трех раз :)
Пролог это такой же нишевый язык как и sql. Для того чтобы вы это осознали, предлагаю вам написать полноценную программу с GUI целиком на прологе. [/Qoute]
А я и не спорю. Поэтому я и использую его в связке. Хотя во многих версиях Пролога, в частности в SWI, в Visual Prolog, есть мощные библиотеки GUI. Но делать многие вещи с помощью ООП гораздо удобнее. А скажите мне, ув. Jack of Shadows, сколько GUI-программ вы написали с помощью Лиспа? И вообще, ответьте честно, СКОЛЬКО ВСЕГО ПРОГРАММ ВЫ НАПИСАЛИ НА ЛИСПЕ?
№ 439 18-07-2006 12:14 | |
Ответ на »сообщение 436« (Артем)
___________________________
На сегодня это высшая ступень развития ООП. Можете тут хихикать и ерничать, но мультиязыковая парадигма, продуманность процесса компиляции, логическая стройность базовых классов и изящность C# меня просто удивили.
:))) Мы не будем хихикать и ерничать Артем, мы всего лишь укажем вам что гораздо более мощные механизмы ООП
существуют уже десятки лет в Smalltalk и лисп.
Вы этого знать не можете, потому что ваш опыт ограничен знакомством с dotnet и парой других языков типа delphi. Отсюда и ваше удивление.
Функциональные языки, по сути, не дотягивают до возможностей логического вывода Пролога.
Артем, вы продолжаете делать ошибку. Вы еще скажите что дельфи не дотягивает до возможностей реляцилнных баз данных, потому что в нем нет sql.
Пролог это язык хранилища баз знаний. Шикарная вешь не спорю. Более того в лиспе он встроен. Попробуйте найти другой язык в котором пролол был бы встроен.
Мне например не нужно знать 2 языка и обеспечивать их взаимосвязь чтобы работать с прологом. Я это делаю прямо в лиспе. А вы нет. Вам приходится работать с двумя средами, двумя языками.
Таким образом лисп имеет абсолютно все те же возможности логического вывода что и пролог по той простой причине что в лиспе ЕСТЬ ПРОЛОГ. :)) Вы конечно этого тоже знать не могли, опять же по причине того что у вас нет опыта за пределами dotnet и пары языков.
Про негарантированный выход из цикла я понял сам. Вы знаете, почему-то у меня таких проблем практически никогда не возникает. Тут, просто, дело в опыте.
Знаем, проходили. В све время сишники говорили "Вы знаете почему у меня нет проблем с освобождением памяти ? Тут, просто, дело в опыте." :))
№ 438 18-07-2006 11:55 | |
Ответ на »сообщение 430« (Артем)
___________________________
Дело в том, что посредственность – она и в Лиспе посредственность.
Согласен, но также как и я не призываю всех посредственностей работать на лиспе, также и вы не можете призывать всех кто способен на большее ограничивать себя рамками посредственных инструментов.
Каждому свое.
А хороший язык, даже не язык, а система программирования, должен быть доступен как посредственностям, так и гениям.
Это все равно что сказать что арифметика это самай лучший раздел математики потому что доступен как посредственностям так и гениям. :))
Универсальный язык для всех - это утопия. Да вы и сами это прекрасно значете, иначе не работали бы с прологом В СВЯЗКЕ с dotnet, а делали бы все на одном языке.
Оглянитесь, с какой стати люди понаделали сотни языков программирования, если достаточно одного ?
Благодаря java и VB индустрия получила миллионы посредственных программистов, вместо нескольких тысяч хороших. Это как арифметика в средней школе дает индустрии миллионы бухгалтеров вместо несокльких тысяч математиков. И это хорошо, это очень нужно.
уже говорит о многом тот факт, что в логическом программировании с начала 70-х годов доминирует Пролог
Артем, в базах данных доминирует sql. Я не знаю о чем это таком многом это вам говорит, мне это говорит о том что sql идеальный нишевый язык - для манипулирования реляционными данными.
Пролог это такой же нишевый язык как и sql. Для того чтобы вы это осознали, предлагаю вам написать полноценную программу с GUI целиком на прологе. :))
Конечно, я несколько упрощаю, но основной момент, кажется, я уловил.
Вы себя обманываете Артем. Вы ни черта не поняли, и упрощаете так как что теряете вообща всякий смысл.
Рекурсия не является центральной темой ФЯ. Это всего лишь частный технический прием. Один из многих, наряду с closures, higher order functions, currying.
лучше было обратить внимание на OCAML (F#).
Эта тема не о лиспе а о функциональных языках. Поэтому если сподобитесь работать на Ocaml, милости просим поделиться опытом и впечатлениями.
призывать неофитов от программирования бросать всё (в данном случае ООП)
Артем, если вы неофит от программирования, то вы забрели не туда :))
Здесь никто с неофитами не разговаривает.
У меня нет ни времени ни желания открывать школу для начинающих программистов, как это сделал например info21
На этой ветке уже опытные программисты, обмениваются впечатлениями и рассуждениями о разных ФЯ и их отличиях от ИЯ.
Вообще, мне кажется, что в будущем произойдет конвергенция ООП и ФЯ.
Не в будущем а уже прямо сейчас. В OCAML первая буква как раз и означает обьектный.
В лиспе есть ООП.
Ну и напоследок.
...задрав штаны мчаться за комсомолом, пардон, Лиспом.
...начиная с пронафталиненого старья 50-х
...если кто-то хочет писать кипятком от ФП
...в вашем нафталинном собрании глупых скобок
Артем, подобные выражения не делают вам чести.
У меня нет модераторских прав, но если вы будете продолжать фолить, я попрошу модераторов обратить на вас внимание. Мне в этой ветке троли не нужны.
Пока что у нас здесь очень хорошая и дружелюбная атмосфера, может быть не в последнюю очередь потому что сюда "неофиты" не заглядывают :))
№ 437 18-07-2006 10:27 | |
Про негарантированный выход из цикла я понял сам. Вы знаете, почему-то у меня таких проблем практически никогда не возникает. Тут, просто, дело в опыте.
№ 436 18-07-2006 10:08 | |
И все-таки Пролог мне нравится больше чем любой ФЯ. Пролог – это квинтэссенция декларативности. Функциональные языки, по сути, не дотягивают до возможностей логического вывода Пролога. А как вам факт возможности заносить правила в базу, а потом считывать их оттуда и использовать, т.е. взаимопревращение кода и данных? Для себя я выбрал схему сочетания .dotNet-программирования и прологовых модулей. Жаль, что бесплатные реализации Пролога (YAP,SWI) имеют довольно куцые интерфейсы. Приходится пользоваться SICSTUS. Есть еще P#, но автор его давно забросил.
Да, кстати, хочу еще сказать о "посредственности" dotNet. На сегодня это высшая ступень развития ООП. Можете тут хихикать и ерничать, но мультиязыковая парадигма, продуманность процесса компиляции, логическая стройность базовых классов и изящность C# меня просто удивили. Я понимаю, что многие фичи dotNet появились ранее в Java, Delphi и т.д., но в dotNet их реализация гораздо более красива.
Замечание к № 434.
"Сколько было проблем с неправильным выбором типа переменных, с негарантированным выходом из цикла, с неинициализированными переменными - все это болезни императивного подхода".
Что такое неправильный выбор типа переменной и негарантированый выход из цикла? Это что-то фортрановское? Насчет неинициализированной переменной – в Delphi это предупреждение, в C# - ошибка.
№ 435 18-07-2006 09:45 | |
№ 434 18-07-2006 09:14 | |
Ответ на »сообщение 432« (Артем)
___________________________
Серьезный математик не будет работать на Фортране (понимая качество тех библиотек).
Преимущество декларативного подхода именно в строгости и надежности.
Сколько было проблем с неправильным выбором типа переменных, с негарантированным выходом из цикла, с неинициализированными переменными - все это болезни императивного подхода.
Я все пытался понять, для каких задач функциональный подход предпочтительнее, а дискуссия свернула в другую сторону: для каких людей. Может это и правильно.
№ 433 18-07-2006 09:08 | |
Ответ на »сообщение 431« (Сергей Перовский)
___________________________
Если взглянуть на историю программирования, то это ремесло постепенно смещается из среды элитарных кругов в среду обычных инженеров, продвинутых пользователей, копипастеров и т.д., подавляющее большенство из них (из нас) перестанут замечать скобки, только к пенсии окончательно посадив зрение. Помоему Lisp — для тех у кого IQ>>150 и не надо ссориться.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|