Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 52 08-06-2006 14:40 | |
Ответ на »сообщение 51« (Geo)
___________________________
Кстати, если кто-то может сам в двух словах описать разницу между императивными и функциональными языками программирования, не отсылая к другим публикациям, то было бы очень здорово.
Я попробую. Но, повторяю - это сугубо мое скромное мнение.
Компьютерная программа есть информационная модель, реализованная средствами компьютера (или языков программмирования). Онтологически любая программа есть объединение некоторых объектов и процессов, изменяющих эти объекты (и судя по всему - это фундаментальное свойство нашей реальности. Ведь само понятие информации имеет смысл имеет смысл лишь в контексте изменения состояния некоторой системы).
Т.о., существующие парадигмы программирования можно представить метафорически в виде некоторого отрезка
*<-------------------------------->*
объекты (данные) процессы (алгоритмы)
Каждая из парадигм порождения вычислительного процесса в разных пропорциях обращает
внимание (ракурс) на эти элементы (или их соотношение). Например, функциональная парадигма - в чистом виде представляет процессуальный подход, декларативная парадигма - чистый подход "от данных", императивная парадигма есть паритет обоих составляющих (может именно в следствии такой "толерантности" она и получила столь широкое распространение, в том числе, - и воплощенная в архитектуре подявляющего большинства современных вычислительных систем, т.е. фон Неймановской архитектуре).
Следует отметить, что при любом подходе, невозможно принципиально отбросить ни один из элементов ИС (программы). То, что функциональный (апликативный) подход фокусируется на процессах (получении результата как композиции функций), отнюдь не означает отбрасывания другого компонента - данных. Просто данные подразумеваются при разработке программы неявно (как ОДЗ функции). В декларативном (логическом) же подходе декларируются правила отношения между данными. Но... процессы имеют место присутствовать в виде "автоматического решателя", основанного на методе резолюций, а предметная область описывается с помощью логики предикатов первого порядка. Ну, и императивные языки, как я уже отмечал, одинаково фокусируют внимание разработчика и на данных, и процессах их преобразования. Да, и еще - ООП. Судя по всему - это расширение императивного программирования (мне понравилась такая метафора - это множество императивных "компьютеров", взаимодействующих между собой посредством сообщений. К сожалению, источник не помню :( ).
Еще раз делаю ударение - сугубо мое ИМХО, после изучения области программирования в течении 12 лет :)
№ 51 08-06-2006 13:00 | |
Ответ на »сообщение 50« (Jack Of Shadows)
___________________________
>>> Одна строчка, понятная даже ребенку
echo Hallo, World!
Тут тоже все понятно даже ребенку (ДОСовский BAT-файл). И даже кавычки не нужны.
Но это я так, повыпендриваться. Есть ли где-нибудь материалы, поясняющую разницу между императивными и функциональными подходами к языкам программирования. Желательно на научнопопулярном уровне (пусть это и нестрого). А то я, конечно, помню машину Тьюринга и нормальные алгоритмы Маркова, но не настолько хорошо, чтобы понять разницу в языках программирования, построенных на этих принципах.
Кстати, если кто-то может сам в двух словах описать разницу между императивными и функциональными языками программирования, не отсылая к другим публикациям, то было бы очень здорово.
№ 50 08-06-2006 12:12 | |
Ответ на »сообщение 48« (Q. Werty)
___________________________
(print "Hello World")
Классно правда ? Одна строчка, понятная даже ребенку.
№ 49 08-06-2006 12:08 | |
№ 48 08-06-2006 12:00 | |
>>>Я могу пособирать данные если вас интересует эта тема.
Можете смеяться, но меня вот что интересует.
Как выглядит на Лиспе программа "Hello, world!".
№ 47 08-06-2006 11:57 | |
Ответ на »сообщение 39« (AVC)
___________________________
Все же, мне кажется, можно дать и иное объяснение.
До последнего времени многопоточный код в обычных программах не давал ощутимой пользы.
Как мне кажется, и на LISP параллельных/многопоточных программ немного.
По крайней мере, было до последнего времени.
А это, ИМХО, снижает вес аргумента, что многопоточных программ было мало по причине засилья императивного стиля программирования.
№ 46 08-06-2006 11:53 | |
Ответ на »сообщение 45« (Q. Werty)
___________________________
Если Вас именно слово "грязь" зацепило, то примите мои извинения - оно не главное в моем сообщении.
Спасибо. Мне бы очень не хотелось чтобы технологии затыкания рта неугодным проникли и сюда. Здесь нет авторитетов и истин в высшей инстанции. Здесь все имеют право на ошибку. И никто не делает ее намеренно. Никто не врет. Если вы не согласны с моим или чьим то утверждением - возразите, приведите свои аргументы.
Я с удовольствием поменяю свое мнение, что делал уже не раз.
Главное - в другом. Не надо вообще на ветке о ФЯ обсуждать императивные языки.
Вот тут вы ошибаетесь сравнения неизбежны. Ибо это ветка о функциональном программировании на сайте императивного языка. Здесь нет лисперов и хаскелистов. Здесь все дельфисты, джависты, сишники и оберонщики.
И потому столкновения мнений неизбежны. Только вот не надо их бояться. :))
Второе. Насчет огромного роста популярности ЛИСПА - это ведь тоже из области агитпропа
Я могу пособирать данные если вас интересует эта тема.
А пока Руслан прав - C++/C#, VB, Java. Вот реальность, с которой придется мириться еще долго.
Этого никто не оспаривает.
Сравните. Быстрый рост популярности Линукса никто не оспаривает. И тем не менее windows - Вот реальность, с которой придется мириться еще долго. Одно другому не противоречит, верно ?
№ 45 08-06-2006 11:42 | |
>>>Константация факта малой популярности оберона есть поливание грязью ?
Если Вас именно слово "грязь" зацепило, то примите мои извинения - оно не главное в моем сообщении.
Главное - в другом. Не надо вообще на ветке о ФЯ обсуждать императивные языки. Это все равно, что на ветке о дельфинах обсуждать и сравнивать их с бизонами. Они не плохие, и не хорошие - они просто РАЗНЫЕ.
Второе. Насчет огромного роста популярности ЛИСПА - это ведь тоже из области агитпропа (видите, я использую мягкие формулировки :)
Вот когда у меня в сети будет работать хотя бы 1 (одна!!!) реальная программа, написанная на Лиспе - тогда я сам в это поверю. А пока Руслан прав - C++/C#, VB, Java. Вот реальность, с которой придется мириться еще долго.
№ 44 08-06-2006 11:25 | |
Ответ на »сообщение 42« (Q. Werty)
___________________________
Простите меня уважаемый. Но где и когда я поливал грязью оберон ?
Константация факта малой популярности оберона есть поливание грязью ?
Я всегда думал что поливание грязью - это вранье с целью очернить, нанести вред, испортить репутацию.
Может укажете мне где и что я врал про оберон ?
Если уж на то пошло, я первый скажу что оберон лучший из императивных языков.
И пожалуйста не надо на меня бочку катить. Я же не виню вас или Руслана в том что вы поливаете грязью лисп или функционаьный подход только потому что вы критикуете их, или указываете на недостатки.
Я буду только рад если вы противопоставите моему энтузиазму свой трезвый и критический подход.
Никаких поливаний грязью.
Уж я достаточно навидался этого поливания в обероновских форумах. Потому и ушел оттуда.
№ 43 08-06-2006 11:19 | |
Вот интересная страничка где собраны высказывания многих людей пришедших в лисп: http://wiki.alu.org/RtL_Highlight_Film
Несколько цитат:
Within a couple weeks of learning Lisp I found programming in any other language unbearably constraining.
the desperate search for Something Better is gone
The final language.
It feels like lightning between your fingertips.
The language God would have used to implement the Universe.
If I find a better language, I'll let you know.
I'm amazed at how many of the features of CL are just now appearing in more "modern" languages."
To me, the concepts that Lisp stands for are an embodiment of all that is beautiful in the Universe.
И так далее.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|