Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1502 09-11-2006 06:10 | |
Ответ на »сообщение 1501« (al_mt)
___________________________
и представлять, как бегают электрончики в процессоре :)))
№ 1501 09-11-2006 06:03 | |
Ответ на »сообщение 1500« (Сергей Перовский)
___________________________
Ответ на »сообщение 1496« (Как слышно? Приём!)
___________________________
>>>Кстати, Excel - наиболее симпатичный из них, на мой вкус.
Кстати, идеология ( и название ) cells очень напоминает электронные таблицы.
И проблемы те же - зацикливание ссылок, большие накладные расходы и т.д.
Совершенно по Джоэлю, чтобы хорошо кодить на ФЯ, надо знать как это в конечном итоге реализуется на ИЯ :)))))
№ 1500 09-11-2006 04:54 | |
Ответ на »сообщение 1496« (Как слышно? Приём!)
___________________________
>>>Кстати, Excel - наиболее симпатичный из них, на мой вкус.
Кстати, идеология ( и название ) cells очень напоминает электронные таблицы.
И проблемы те же - зацикливание ссылок, большие накладные расходы и т.д.
№ 1499 09-11-2006 03:25 | |
Ответ на »сообщение 1498« (Как слышно? Приём!)
___________________________
Ответ на »сообщение 1497« (al_mt)
___________________________
>>> Среда исполнения сама всё сделает.
А зачем она - география? На то есть кондуктора.
Это просто другой уровень абстрагирования.
С точки зрения ФЯ вопрос "как отследить изменение значения переменной?" бессмысленен, т.к. в ФЯ нет переменных :) А в ИЯ делаем глобальное сообщение "изменилась переменная".
№ 1498 09-11-2006 03:13 | |
Ответ на »сообщение 1497« (al_mt)
___________________________
>>> Среда исполнения сама всё сделает.
А зачем она - география? На то есть кондуктора.
№ 1497 09-11-2006 03:06 | |
Вопрос. КАК cells узнает об изменении значения y?
А в чём проблема? Если на ЛИСП, то и не надо ни о чём узнавать. Среда исполнения сама всё сделает. Вопрос только в накладных расходах.
№ 1496 09-11-2006 03:06 | |
>>> Вы свято верите, что Delphi Вас не обманет ... ?
Нет, не обманет. Разве могут лгать эти глаза!
Она просто невинно ошибётся, она не нарочно :)
Я свято верю, что если что-то может сломаться - оно обязательно
сломается, причём в самый неподходящий момент.
Связь с БД - это шлифовали и ходили по граблям долгие годы. А потом,
это одна связь. Ежели количество связей велико, топология их неизвестна,
организация их обработки - тайна неизъяснимая, пока не поработаешь
несколько лет, то начинают терзать сомнения. Тут презумпция виновности.
Чем сложнее аппарат, например ФЯ или шаттл, тем труднее найти ошибку.
И самое неприятное - теряется ощущение подконтрольности своего софта.
А уж про надёжность продуктов M$ я вообще молчу во избежание флейма.
Кстати, Excel - наиболее симпатичный из них, на мой вкус.
№ 1495 09-11-2006 02:44 | |
Ответ на »сообщение 1482« (hugi)
___________________________
Вопрос. КАК cells узнает об изменении значения y?
В случае, когда y представляет собой "слот" CLOS-объекта, это делается достаточно просто --- в составе CLOS Metaobject Protocol (MOP) имеется стандартная (в рамках MOP, который, правда, сам по себе частью ANSI CL не является :-) возможность перехвата обращений к слотам. Если же мы хотим перехватить обращение к произвольной переменной, то здесь, насколько мне известно, простого и общего решения не существует. По крайней мере, MOP здесь уже ИМХО не помощник. Несмотря на то, например, что символы представляют собой CLOS-объекты, эти объекты мало чем могут нам помочь:
CL-USER 1 > (class-of 'foo)
#<BUILT-IN-CLASS SYMBOL 20731A6C>
CL-USER 2 > (class-effective-slots (class-of 'foo))
NIL
Отсюда видно, что объекты, ассоциированные с символами, не имеют слотов вообще (по крайней мере, в LispWorks). Как следствие, обращение к чему нам перехватывать средствами MOP?
Еще одна возможность сделать такой перехват --- переопределить макрос setf, но такого рода штуки крайне не рекомендуются стандартом и могут иметь трудноуловимые и далеко идущие последствия.
В общем, у меня очень большие сомнения, что observer можно навесить на любую переменную, даже в Лиспе. На слоты объектов --- сколько угодно.
№ 1494 09-11-2006 00:30 | |
Ответ на »сообщение 1490« (Jack Of Shadows)
___________________________
Да есть в монадах самое обчное присваивание с изменением сотояния переменной, то есть заменой предыдущего значения на новое.
Возьмите код подсчета запятых, который я здесь приводил, и вместо переменной t2 напишите t1
<...>
Как видите вначале в переменную t1 запихивается одно значение времени, потом в нее же другое значение.
Все точно также как и в любом другом императивном языке. Только вместо знака = пишется <- :))
Мда, действительно... :-(
Ну хоть хорошо, что это жёстко выделено в do-участках...
№ 1493 09-11-2006 00:09 | |
Ответ на »сообщение 1484« (hugi)
___________________________
OK, давайте пихать в язык всё подряд, подозреваю, что получится второй Perl или что-то вроде этого. Как же тогда быть с элегантностью языка, с его простотой, целостностью, чистотой дизайна, лаконичностью, единообразием внутренних концепций в конце концов?!
Не "пихать всё подряд", а наделить язык и исполняющую среду возможностями реализовать любую концепцию и парадигму.
Заметьте, что все упомянутые вами языки + Лисп + Форт имеют развитое (базовое) свойство взаимодействия как с исполняющей системой (метаинформация), так и "переделки" и взаимодействия со "средой разработки". Это - одна из составляющих гибкости и настриваемости этих языков и сред. И не случайно они начинали (ну, может быть за исключением Форта - там ваще особый случай, называть ли его языком?) с интерпретаторов.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|