Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1512 10-11-2006 02:53 | |
Ответ на »сообщение 1510« (Jack Of Shadows)
___________________________
зато есть eval
№ 1511 10-11-2006 02:47 | |
По моему тут кто то интересовался средствами отладки для хаскеля.
Есть такие: http://haskell.org/hat/#intro
Полноценный пошаговый дебаггер. Причем в отличии от императивных языков может шагать и НАЗАД! :))
№ 1510 10-11-2006 02:46 | |
Ответ на »сообщение 1508« (Lisp Hobbyist)
___________________________
Особенно хорошо на этапе компиляции ловится зацикливание вычисляемых ссылок, типа Excel'ного OFFSET...
OFFSET это работа с относительной адресацией ячеек, это к си а не к лиспу :))
лисп с адресами памяти не работает :)) По моему в нем даже указателей в сишном понимании этого слова, нет.
№ 1509 10-11-2006 02:43 | |
Ответ на »сообщение 1507« (Lisp Hobbyist)
___________________________
Вы правы я именно defsetf имел в виду. Хороший вопрос.
Я попробую задать его Тилтону. Посмотрим что он думает по этому поводу.
В любом случае как я уже говорил, полезность сеlls для простых типов (не обьектов) мне кажется сомнительной, и данный вопрос имеет чисто теоретическое а не практическое значение, в отличие от cells, который очень практичен в его нынешней реализации.
№ 1508 10-11-2006 02:08 | |
Ответ на »сообщение 1504« (Jack Of Shadows)
___________________________
Ну не совсем так. Не забывайте что лисп компилируемый язык, в отличие от Экселя :))
Так что зацикливание ссылок легко ловится на этапе компиляции.
Особенно хорошо на этапе компиляции ловится зацикливание вычисляемых ссылок, типа Excel'ного OFFSET...
№ 1507 10-11-2006 01:57 | |
Ответ на »сообщение 1503« (Jack Of Shadows)
___________________________
Переопределение setf это конечно не для новичков. Однако и невероятно трудного в этом ничего нет.
Я встречал довольно много исповых библиотек в которых setf переопределяется.
Более того при создании практически любого DSL вам скорее всего придется и setf для него переписывать.
Так что ничего необычного или редко используемого. Однако техника конечно для тех кто значет что он делает. :))
Расширение setf при помощи defsetf и переопределение его встроенных вариантов вообще-то две большие разницы. Я вообще сомневаюсь, что такое переопределение безопасно --- setf это все-таки макрос (со всеми вытекающими последствиями), хоть явного запрета в CLHS я пока не нашел (хоть и не особо искал).
Зато там есть вот это:
The effect of
(defsetf symbol-value set)
is built into the Common Lisp system. This causes the form (setf (symbol-value foo) fu) to expand into (set foo fu).
Таким образом, если я ничего не напутал, перехватить присваивания вида (setf (symbol-value 'foo) 15) точно не получится. А без этого заявления о возможности надежного и прозрачного расширения подхода cells на произвольные переменные выглядят, мягко говоря, неубедительно.
№ 1506 10-11-2006 00:03 | |
Кстати, о реальных проектах на ФЯ.
На Erlang написан Ejabberd - копроративный Jabber-сервер. Лицензия - GPL, так что можно спокойно изучать и дорабатывать.
№ 1505 09-11-2006 23:38 | |
Ответ на »сообщение 1504« (Jack Of Shadows)
___________________________
Вы это должны прекрасно знать по дельфишному VCL фреймворку. Там в принципе та же самая идея, только сделанная топорно, насколько возможности языка позволяли.
Э... какие еще возможности языка? В Delphi вместо property Enabled: Boolean легко можно сказать TBooleanMethod = function(Sender: TObject): Boolean of object;
property Boolean: TBooleanMethod;
Язык позволяет реализовать такую библиотеку.
№ 1504 09-11-2006 17:41 | |
Ответ на »сообщение 1500« (Сергей Перовский)
___________________________
Кстати, идеология ( и название ) cells очень напоминает электронные таблицы.
И проблемы те же - зацикливание ссылок, большие накладные расходы и т.д.
Ну не совсем так. Не забывайте что лисп компилируемый язык, в отличие от Экселя :))
Так что зацикливание ссылок легко ловится на этапе компиляции.
А большие накладные расходы, слово большие здесь понятие относительное.
Для оркестрации GUI-шных элементов не так уж и много накладных расходов.
Вы это должны прекрасно знать по дельфишному VCL фреймворку. Там в принципе та же самая идея, только сделанная топорно, насколько возможности языка позволяли.
И ниче, никто особенно на накладные расходы не жалуется :))
№ 1503 09-11-2006 15:48 | |
Ответ на »сообщение 1495« (Lisp Hobbyist)
___________________________
Еще одна возможность сделать такой перехват --- переопределить макрос setf, но такого рода штуки крайне не рекомендуются стандартом и могут иметь трудноуловимые и далеко идущие последствия.
Переопределение setf это конечно не для новичков. Однако и невероятно трудного в этом ничего нет.
Я встречал довольно много исповых библиотек в которых setf переопределяется.
Более того при создании практически любого DSL вам скорее всего придется и setf для него переписывать.
Так что ничего необычного или редко используемого. Однако техника конечно для тех кто значет что он делает. :))
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|