Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1222 16-09-2006 10:16 | |
Ответ на »сообщение 1218« (bb)
___________________________
2) Подход к этому термину со стороны Дейкстры, введенный в его книге "Дисциплина программирования"?
________________
Функции на которых я вырос, такие как синус, косинус, квадратный корень и логарифм, были почти исключительно вещественными функциями вещественного аргумента...
В результате я был чрезвычайно плохо подготовлен, чтобы оценить функциональное программирование, когда я с ним столкнулся: Например, меня ставила в тупик потрясающая мысль, что значением функции может быть другая функция.
Эдсгер Дейкстра
________________
Возможно, Дейкстра и не рассматривал ФП с точки зрения дисциплины программирования...
№ 1221 16-09-2006 08:02 | |
Если смотреть на чужой опыт, то пока что единственным удачным применением чистого ФЯ в пром. программровании является спользование Erlang в телекоммуникационном бизнесе (JOS об этом говорил). Да если язык заточен на определенные проблемы (многопоточность, например, по нетребовательности к ресурсам там вообще уникальна), если один и тот же класс проблем воплощается на нем в меньшем количестве кода, чем в C++ (упомянем здесь и ~ одинаковую квалификацию программистов), то и ошибок там будет меньше.
Я не хочу предсказывать будущее и говорить о том, что какая-то одна парадигма задавит все остальные и она единственная будет считаться программированием. Время покажет. Пока же я выбираю такие средства, которые позволяют мне зарабатывать деньги, ну, и получать определенное удовольствие от самого процесса работы. :) Кстати, я вполне (!) допускаю, что у каждого эти средства могут быть свои :)
№ 1220 16-09-2006 07:42 | |
Ответ на »сообщение 1219« (Jack Of Shadows)
___________________________
С чистым ФЯ все просто. Там сам язык не приемлет просто другого подхода. Когда мы в институте учили Пролог, глядя на код моих сокурсников мне становилось дурно. Хотя Пролог - это высокоуровневый декларативный язык. Их программы тоже работали, - да они были медленнее, гораздо длиннее, но они тоже работали.
Я не гуру в ФЯ, но, подозреваю, что язык, заставляющий программиста писать хорошо - это утопия. Я преклоняюсь перед вашим литературным талантом, Вагиф (особенно в сообщении №1210), но это, извините, чистой воды беллетристика. Во-первых, что позволяет вам быть таким уверенным, что в больших проектах при использовании чистых ФЯ все так хорошо? Вы ведь пока только пол-года с хвостиком серьезно используете "нечистый" Лисп (не считая автокада), а к тому же "чистому" Хаскелю только присматриваетесь. Во вторых, если уж говорить языком аллегорий, то в ответ на ваши рассуждения о военной дисциплине я могу возразить упоминанием о том, что военная и дисциплинированная Спарта когда-то проиграла Афинам.
№ 1219 15-09-2006 17:47 | |
Ответ на »сообщение 1218« (bb)
___________________________
Поскольку речь идет о дисциплине программирования, то какая конкретно выбрана парадигма не имеет значения.
Имеет значение строгое следование выбранной парадигме что и есть ДИСЦИПЛИНА.
Использовать разные парадигмы в разных частях системы можно без проблем. Главное чтобы они не пересекались в одном коде.
Скажем сервер на Erlang (ФЯ) а клиент на java (ОО) - запросто.
Вот только кто будет обеспечивать дисциплину ? Где тот сержант с палкой, который будет гонять ваших программистов и заставлять их седовать ОО ?
С чистым ФЯ все просто. Там сам язык не приемлет просто другого подхода.
А java и вообще в любом ОО нет никаких ограничителей. Соответственно мы и имеем катастрофическое положение с качеством кода.
№ 1218 15-09-2006 16:19 | |
Ответ на »сообщение 1216« (Jack Of Shadows)
___________________________
Дисциплина программирования это прежде всего парадигма, на основе которой строятся программы.
Вот оно что! Т.е. в современных условиях смешения парадигм как на уровне проектирования, так и кодирования дисциплина программирования оказывается следованием одной конкретной парадигме.
Как с таким представлением соотносятся:
1) Реальная необходимость использования в проекте нескольких парадигм программирования;
2) Подход к этому термину со стороны Дейкстры, введенный в его книге "Дисциплина программирования"?
№ 1217 15-09-2006 11:04 | |
Ответ на »сообщение 1214« (Geniepro)
___________________________
Ну, не знаю, не знаю... Мир программистов раз за разом отказывался от функционального стиля мышления..
Мир программирования никогда и не имел шанса использовать чистый ФЯ. Как же можно говорить о том что он от него отказывался ?
Повышенные требования ФЯ к железу сделали невозможным их примемение в первые 20-30 лет.
А дальше уже было наработано сотни миллион строк императивного кода, тысячи и тысячи библиотек, тысячи книг, школ, 3 поколения императивных программистов.То что вы видите сейчас и есть очень быстрый процесс перехода к ФП. Быстрый конечно в масштабе истории программирования, а не в масштабе жизни и карьеры одного программиста.
Осознание необходимости какого то механизма, гарантирующего дисциплину программирования не приходит сразу.
До того как Древний Рим создал свою армию с жесткой дисциплиной, тысячи лет велись войны и существовали большие армии без какой бы то ни бы ло базы формальной дисциплины, осуществлявшие вполне успешные миссии.
Тот период в котором мы с вами живем - взрывной рост возможностей компьютеров, дешевая и доступная память огромного обьема, многоядерные процессоры - все это приведет к коренным изменениям в программировании, и очень быстро. Но опять таки - быстро в масштабе истории программировнаия. Для нас с вами этот процесс растянется на десятилетия.
Это как время когда появились первые машины или первые самолеты. Скажи кому нибудь тогда что лошадь навсегда сойдет с транспортной сцены - и вас бы засмеяли.
№ 1216 15-09-2006 10:49 | |
Ответ на »сообщение 1212« (bb)
___________________________
Дисциплина программирования это прежде всего парадигма, на основе которой строятся программы.
То есть ОО или ФП. Что дает то и другое повторяться смысла нет.
В кратце - это возможность увеличивать сложность программы, без потери контроля над ее кодом, без взрывного увеличения количества багов, с сохранением возможности этот код читать, понимать и соответственно менять, не только самим создателям но и новой команде.
При этом использование ОО или смешанного императивно-функционального языка гарантии следования выбранной парадигме не дает. Всегда есть возможность скатывания к процедурщине, и как вы все из своего опыта знаете, ни один проект не избежал такой участи. Чем сложнее система, чем больше разношерстного народу в ее создании учавствует, тем больше в этой системе "спагетти" кода. Вплоть до того что на определенном этапе, что либо исправить в этой системе становится невозможным, и ее просто переписывают с нуля, начинается жизнь новой программы.
А вот чистый ФП как я уже говорил - дает гарантии что независимо от того кто пишет код, этот код будет отвечать определенным требованиям - абстракции и инкапсуляции.
Согласитесь для больших проектов это достаточно важный выигрыш, чтобы рассмотреть вопрос о переходе на чистый ФЯ.
№ 1215 15-09-2006 05:24 | |
Ответ на »сообщение 1214« (Geniepro)
___________________________
Первые версии Лиспа были чистыми в функциональном смысле
ИМХО, не были. В "LISP 1.5 Programmer's Manual" уже упомянуты rplaca, rplacd, conc, nconc.
№ 1214 15-09-2006 04:47 | |
Ответ на »сообщение 1210« (Jack Of Shadows)
___________________________
Ну, не знаю, не знаю... Мир программистов раз за разом отказывался от функционального стиля мышления...
В Алголе-60 была возможность ленивых вычисления (с помощью передачи параметров по имени) - и эту возможность практически все сочли ошибкой разработчиков языка, и в трансляторах практически не реализовывали...
Первые версии Лиспа были чистыми в функциональном смысле - а сейчас и Лисп, и Scheme - насквозь императивны и обьектно-ориентированны...
В 1985 году разработали язык SISAL (Stream and Iteration in a Single Assignment Language) - параллельный функциональный язык со статической типизацией и строгой семантикой. Программы на SISAL'е по быстродействию превосходили аналогичные на Си и Фортране чуть ли не в пять раз (по утверждению разработчиков компилятора SISAL'а osc)... В 1997 году проект SISAL был закрыт и практически забыт...
http://www.cs.utexas.edu/users/browne/cs392cf2001/papers/Sisal.pdf
http://www.linuxjournal.com/node/4383/print
То есть постоянно программисты отбрыкивались от ФЯ - толи из-за лени, толи ещё по каким-то причинам...
Правда, сейчас в игру вступил супертяжеловес Майкрософт (ну прям отче наш :-)) - может быть ситуация и изменится?..
Поживём - увидим, если доживём до того светлого будущего... :-))
А пока что, действительно, программеры-функциональщики собираются в мелкие сообщества - но ведь в открытые!
Это не касты, а секты... :-)) (Христианство тоже когда-то было лишь сектой...)
Скоро, скоро грянет функциональный "New Age", и надо быть к нему готовым... ;-)
№ 1213 15-09-2006 02:35 | |
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|