Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 142 13-06-2006 05:14 | |
Ответ на »сообщение 141« (Руслан Богатырев)
___________________________
Параллельно, имея возможность достраивать Лисп до собственного языка.
Это интересный момент. Что значит достраивать? В смысле синтаксиса или семантики?
В обоих.
И значит ли это, что при достраивании я вынужден тащить за собой все богатство и своеобразие Лиспа, не имея возможности от него отгородиться (ведь язык-то собственный)?
Для целевых систем, где существенны ограничения на размеры получающихся образов - можете.
Но, в общем случае, - зачем? Сообщение не подписано
№ 141 13-06-2006 04:28 | |
Ответ на »сообщение 139« ()
___________________________
Параллельно, имея возможность достраивать Лисп до собственного языка.
Это интересный момент. Что значит достраивать? В смысле синтаксиса или семантики? И значит ли это, что при достраивании я вынужден тащить за собой все богатство и своеобразие Лиспа, не имея возможности от него отгородиться (ведь язык-то собственный)?
№ 140 13-06-2006 04:23 | |
Ответ на »сообщение 138« ()
___________________________
А кто сказал, что их там нет?
Так расскажите, в каких. Интересно разобраться, что за сия конструкция в мире функциональных языков. А то, быть может, разумеем под словом "модуль" разное? Тут в мире императивности на эту тему споры до хрипоты. Но раз так уверенно возражаете -- буду признателен за примеры таких языков.
Кой толк выяснять что первично, если в разных местах мне разные подходы по разному предпочтительны? Что ж мне акцентироваться только на одном каком-то подходе и носиться с ним как "дурень с писаной торбой"?
Объясню, зачем нужно выяснять. Предположим есть желание (производственная необходимость, нужное подчеркнуть) использовать обе парадигмы в одном языке. Какой выбрать (ФЯ/ИП или ИЯ/ФП) и почему?
№ 139 13-06-2006 04:17 | |
Ответ на »сообщение 137« (Руслан Богатырев)
___________________________
Ответ на »сообщение 125« (Jack Of Shadows)
___________________________
... это совершенно ортогональные понятия. Т.е. одно не заменяет другое. ...
... а – дополняет. В чём проблемы? Тут уже не раз говорилось, что можно выражать подходы "иной" парадигмы в языке, не предназначенном для неё. Но затраты и усилия будут велики. А в Лиспе вы всё множество парадигм выражаете без "напряга". Единообразно. Параллельно, имея возможность достраивать Лисп до собственного языка.
Если речь зашла о параллельностях и ортогональностях. А если вся совокупность имеющихся у вас возможностей выражения той или иной парадигмы ну никак не ложится своей "проекцией" на задачу?
Важно не наличие в языке готового набора средств для выражения той или иной парадигмы, а возможность создания их с минимальными усилиями. Сообщение не подписано
№ 138 13-06-2006 04:00 | |
Ответ на »сообщение 137« (Руслан Богатырев)
___________________________
Вот и хотел узнать, что там на фронте функционального программирования -- отсутствие модулей не сильно напрягает?
А кто сказал, что их там нет?
Чем таким интересно ФП здесь (при создании больших программных систем) и в чем оно выигрывает по отношению к остальному миру программирования?
Ничем. "В обоих смыслах".
1. Первично ФП (в одном языке)
2. Первично ИП (в одном языке)
3. Равноправны (каждый в своем языке)
Какой из них предпочтительнее (теоретически), какой Вам больше по душе и почему?
Первично не яйцо и не курица, а неопреодолимое желание оставить потомство.
Кой толк выяснять что первично, если в разных местах мне разные подходы по разному предпочтительны? Что ж мне акцентироваться только на одном каком-то подходе и носиться с ним как "дурень с писаной торбой"?
На счёт "своего языка" - почитайте первые несколько глав "Мир Лиспа" горячих финских парней. В каком ещё языке вы такую возможность для выражения стольких парадигм найдёте? Сообщение не подписано
№ 137 13-06-2006 03:23 | |
Ответ на »сообщение 125« (Jack Of Shadows)
___________________________
Поправьте меня если ошибаюсь. Но по моему модульность и функциональность это совершенно ортогональные понятия. Т.е. одно не заменяет другое. И оба являются свойствами первостепенной важности.
Не просто ортогональные, а "попендикулярные". Вопрос был вот почему: тот же Пролог как чистый язык логического программирования для определенных задач -- вещь полезная, но без модулей многое теряет. Было несколько проектов на эту занятную тему. Вот и хотел узнать, что там на фронте функционального программирования -- отсутствие модулей не сильно напрягает?
Попутно вот о чем подумалось. Пока что обсуждение использования ФП идет в разрезе программирования в малом (programming-in-a-small), а как насчет программирования в большом? Чем таким интересно ФП здесь (при создании больших программных систем) и в чем оно выигрывает по отношению к остальному миру программирования?
И еще вопрос: как мы выяснили, ФП без ИП (императивного программирования) обходиться не может (или почти не может). Если говорить об их совместном использовании, то (если не учитывать имитацию) есть три варианта сосуществования двух систем с разным "общественным строем":
1. Первично ФП (в одном языке)
2. Первично ИП (в одном языке)
3. Равноправны (каждый в своем языке)
Какой из них предпочтительнее (теоретически), какой Вам больше по душе и почему?
№ 136 13-06-2006 02:49 | |
Ответ на »сообщение 119« (Geo)
___________________________
Ответ на »сообщение 116« ()
___________________________
>>> А если вам нужно использовать эти функции в разных контекстах и одновременно? :о)
У меня с терминологией проблемы. Можно пояснить?
Шутите? Мне всегда казалось, что если человек заявляет Я, собственно говоря, вообще не программист. Скорее -- аналитик., то это автоматически определяет его широту его знаний...
Я говорил и безопасности доступа к вашей "переменной модуля" относительно потоков управления. Вне зависимости от контекстов вызывающих процедур, экземпляр у вас будет один на всех. Делайте выводы. Сообщение не подписано
№ 135 13-06-2006 02:36 | |
Ответ на »сообщение 132« (panda)
___________________________
Через классы - запросто. ;-)
Это будет считаться решением?
Конечно будет! :)) О том и речь. ОО и closures оба мощные инструменты с одинаковыми возможностями.
Но как через ОО делать тут все знают.
Просто это 2 разных мира, императивный и функциональный, каждый со своими механизмами решения одних и тех же проблем.
Сначала в фаворе был более эффективный, экономный к рессурсам компьютера подход.
Теперь чашу весов перевешивает более экспрессивный, легкий, понятный.
№ 134 13-06-2006 02:29 | |
Ответ на »сообщение 130« (Trurl)
___________________________
Мне тоже. Пока я не попробовал SML и OCaml.
А вот это очень интересно! Если есть время и желание, не поделитесь подробностями ?
№ 133 13-06-2006 02:25 | |
Ответ на »сообщение 128« (torvic)
___________________________
Кстати, про list comprehensions. Вы говорили, что порядок записи деклараций в функциональных языках неважен.
Пример:
Это пример pattern matching.
Из документации: The patterns are tried in textual order.
Поскольку меняя паттерны местами можно задавать стратегии выборки, то паттерны вполне логично решено было проверять по мере написания.
Я же говорю об этом:
a = b + c
b = 7 + 10
c = 50 - 2
Такой код в императивном языке даст ошибку. A a чистом функциональном сработает. Поскольку присваивания нет, то компилятор знает что b и с, нважно где бы они не были описаны, все равно будут иметь одно единственное значение. А потому просто продолжает читать код дальше, пытаясь их найти.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|