Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 32 08-06-2006 06:25 | |
Ответ на »сообщение 31« (Q. Werty)
___________________________
Не обижайтесь, но я думаю, что число сторонников и активных пользователей Лиспа не намного превосходит число сторонников и активных пользователей Оберона.
Небольшое лирическое отступление...
Невольно вспоминается Маяковский:
Разевают дети рот.
– Мы же ехали вперед,
а приехали туда же.
Это странно, страшно даже.
Для Лиспа, как и Оберона, в нашей стране, похоже, актуальны революционные лозунги:
1. "Пролетарии всех стран, соединяйтесь!"
Девиз Союза коммунистов, выдвинутый Марксом и Энгельсом
2. "Мы на горе всем буржуям мировой пожар раздуем"
Александр Блок (Двенадцать)
Но "мировая революция" -- это замечательно. Однако у людей другие, куда как более приземленные проблемы... Все тот же Маяковский:
Что бабе масштаб грандиозный наш?!
Бабе грязью обдало рыло,
и баба, взбираясь с этажа на этаж,
сверху и меня и власти крыла.
Правдив и свободен мой вещий язык
и с волей советскою дружен,
но, натолкнувшись на эти низы,
даже я запнулся, сконфужен.
Я на сложных агитвопросах рос,
а вот не могу объяснить бабе,
почему это о грязи на Мясницкой
вопрос никто не решает в общемясницком масштабе?!
№ 31 08-06-2006 05:09 | |
>>>Ну хорошо, попробую еще раз.
Действительно, ну что Вы так бурно реагируете, Jack.
Мы уже все давно поняли, что функциональные языки - это другой подход к представлению алгоритма.
Проблема в другом. Функциональный подход не сможет полностью вытеснить императивный до тех пор, пока сама архитектура компьютера будет оставаться "императивной", т.е. фон-неймановской. От связи железа и софта мы никуда не уйдем - "старики-классики" всегда это понимали. Еще у команды академика Глушкова были хорошие идеи по адаптации не только софта к "железу", но и "железа" к софту. Говоря Вашим "языком" надо создавать "Лисп-процессор", который бы понимал не такие слова, как "ячейка памяти", а такие как "атом" или "список".
А насчет схожей ситуации оберона и лиспа - я это понял по-другому. Они схожи, потому что им обоим приходится завоевывать место под солнцем. В то время как другие, не лучшие с любой точки зрения языки, заняли чуть ли не все пространство в умах homo programmicus. Не обижайтесь, но я думаю, что число сторонников и активных пользователей Лиспа не намного превосходит число сторонников и активных пользователей Оберона.
№ 30 08-06-2006 03:51 | |
Ответ на »сообщение 28« (Jack Of Shadows)
___________________________
Вы ошибочно считаете что оберон и лисп находятся в схожих ситуациях.
Но это не так.
:o) Не принимайте все всерьез и близко к сердцу. Прокладывать дорогу к неизведанному для других можно разными способами: через известное, давая ориентиры и, наоборот, -- через нечто кардинально новое (для них), что способно разрубить гордиев узел познания.
№ 29 08-06-2006 03:28 | |
Ответ на »сообщение 27« (Q. Werty)
___________________________
нмм странно, я вроде думал понятно обьяснил про декларативный характер ФЯ.
Ну хорошо, попробую еще раз.
именно так и понимает оператор присваивания - как присваивание переменной нового значения. А об ячейках памяти он может в этом случае вообще не думать.
Да как угодно называйте. Главное имеет значение в какой последовательности вы это пишите.
В ФЯ не имеет значения, потому что нет присваивания, нет этих переменных, которым присваиваются, нет ящичков, куда запихивается.
x = 5 воспринимается как "Назовем пятерку иксом"
При этом не имеет значения в каком конкретно месте программы вы это сделали,
Вы можете везде использовать этот х и только в конце сказать что х это вообще то 5.
Потому что не может возникнуть ситуации что вот здесь присваиваем иксу 5 а вот попозже уже 10
От такого вот мышления вы никуда не убежите, как бы не старались не упоминать всуе не к ночи помянутые ячейки памяти :)))
№ 28 08-06-2006 03:20 | |
Ответ на »сообщение 26« (Руслан Богатырев)
___________________________
Вот если бы Вы предложили воспринимать Лисп как Simple C++ или Difficult Basic, агитпропом не назвал бы.
Руслан. Великому и могучему лиспу на черта не нужно камуфлироваться под всякие си и васики.
Вечному лиспу не нужно также никуда торопиться. Он будет жив тысячи лет после того как канут в небытие не только все остальные языки, но и машины для которых они делались.
Вы ошибочно считаете что оберон и лисп находятся в схожих ситуациях.
Но это не так.
№ 27 08-06-2006 03:12 | |
>>>Так что от вашего желания не мыслить в терминах ячеек памяти ничего
>>>не зваисит. Императивные языки заставляют вас это делать.
Может где-то и заставляют, но не в этом случае.
Причем тут какие-то ячейки и какая-то память? Мы говорим об императивных языках высокого уровня, а не об ассемблерах.
Запись присваивания вида <имя> := <выражение>
означает, что значение выражения <выражение> вычисляется и переменная с именем <имя> получает это значение. И все. И если Вы при этом хотите говорить о каких-то ячейках, то это уже Ваше личное желание отразить, что именно скрывается за этим с точки зрения реализации.
Кстати, человек, который сразу начинает программировать на языке высокого уровня, именно так и понимает оператор присваивания - как присваивание переменной нового значения. А об ячейках памяти он может в этом случае вообще не думать.
P.S.
Вашу мысль я, конечно, понимаю, только пример Вы выбрали неудачный. Для присваивания говорить о ячейках памяти не требуется. Вот объяснять, что такое указатель - это другое дело.
№ 26 08-06-2006 03:06 | |
Ответ на »сообщение 24« (Jack Of Shadows)
___________________________
Есть такое дело. :))) Вы в ветках про обероны несете что то про light java :))) А я здесь в меру своих сил, тяну одеяло на сторону лиспа.
Java Light -- это, на мой взгляд, полезное восприятие неизвестного (Оберона) через известное (Java). Людям нужны маяки-ориентиры. Без них им трудновато. Хотя, конечно, определенное отношение к пропаганде это имеет.
Вот если бы Вы предложили воспринимать Лисп как Simple C++ или Difficult Basic, агитпропом не назвал бы.
№ 25 08-06-2006 02:43 | |
Ответ на »сообщение 22« (Q. Werty)
___________________________
Если Вы не хотите мыслить в терминах ячеек памяти, то и не надо. В математике, кроме ламбда-исчисления Черча есть и другие базовые понятия, например, понятие продукции (подстановки), которое, собственно, и является математическим эквивалентом операции присваивания. x:=5 означает, что в дальнейшем контексте всюду, где символ x встречается в составе выражения вместо x надо подставить 5. Например, y := x + 1 надо заменить на y := 5 + 1. Это не сложнее, чем ЛИСП и никаких ссылок на физическое понятие "ячейки" - такая же чистая математика.
А вот тут вы не правы. Понятие продукции не означает "выполни операцию и сохрани результат в этой ячейке"
Оно означает "замени эту операцию на вот эту" т.е.
y := 5 + 1 не будет означать "прибавь 1 к 5 и запомни что это 6"
Это будет означать "замени везде Y на (5 + 1)"
И это кстати именно как работает скажем в таком языке как Хаскель.
В нем конструкция типа y = 5 + 1 не будет выполнена пока y не понадобится где то еще.
Это например позволяет писать не заботясь о последовательности.
т.е.
z = x + y
y = 5 + 1
x = 4 * 2
Это не будет ошибкой. Последовательность деклараций не имеет значения, потому то это именно декларации, а не выполнение операции и запоминание результата где то в ячейке.
z будет равен 14, хотя у привыкшего к императивному программированию человека это может в голове не укладываться. Потому что он именно в терминах ячеек памяти и мыслит. По другому не может.
Так что от вашего желания не мыслить в терминах ячеек памяти ничего не зваисит. Императивные языки заставляют вас это делать.
Опять же приведенный пример четко показывает почему функциональные программы хорошо распараллеливаются.
Поскольку последовательность декларации не имеет значения, то непосредственное вычисление этих выражений может осуществляться параллельно на разных процессорах.
В императивных языках, где последовательность является принципиальной, добиться такого вот автоматического распараллеливания практически невозможно. Приходится явно указывать в программе что и как вычислять.
№ 24 08-06-2006 02:23 | |
Ответ на »сообщение 20« (Руслан Богатырев)
___________________________
А вот эти рассуждения уже начинают отдавать агитпропом.
Есть такое дело. :))) Вы в ветках про обероны несете что то про light java :)))
А я здесь в меру своих сил, тяну одеяло на сторону лиспа.
Так сравните для себя разницу в реализациях. Речь не о том, можно или нет, а о том, как это выглядит.
Спасибо мне уже не надо. :)) Да кстати я для той же цели вам привел примеры реализации сетей Петри на лиспе и хаскеле. Сравнивайте, раз уж вы затронули эту тему.
Скажите, если есть "кульная визуальная среда с рюшечками и компонентами", сколь существенна разница в том, каков целевой язык?
Разница в возможностях той части задач которым нуджно еще что то помимо рюшечек.
Ведь красивый визуальный фасад нужен не только дурацким пустышкам.
Но я ни в коем случае не собираюсь принижать роль этих рюшечек. IDE, GUI билдеры, построители отчетов, все это очень нужные инструменты. Было бы глупо недооценивать их роль, и считать их никому не нужными или мелкими игрушками.
№ 23 08-06-2006 02:14 | |
Ответ на »сообщение 21« (Руслан Богатырев)
___________________________
Я не запамятовал. Реализаций МЛ десятки. Я просто не знаю про все.
Поскольку эта ветка в общем о функциональных языках то я только рад любой информации о них.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|