Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение 
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 922 22-08-2006 12:04 |  |
Ответ на »сообщение 889« (SJ)
___________________________
>>> все компьютеры - это и конечные автоматы и машины Тьюринга одновременно.
Автоматы - да. Но вот машина Тьюринга может вычислить функцию Аккермана для любых агрументов, а конечный автомат и реальный компьютер не могут.
№ 921 22-08-2006 12:02 |  |
Ответ на »сообщение 919« (Jack Of Shadows)
___________________________
>>>Вы хоть сами с этой страшилкой, кроме как на тестовых примерчиках с функциями Акермана, где нибудь на практике сталкивались ?
Увы, сталкиваюсь постоянно. Задачи составления расписаний подобными проблемами набиты под завязку. Казалось бы так красиво решать рекурсией, вот только вычислительная сложность алгоритма становится экспоненциальной и можно дальше не дергаться. Вообще, в комбинаторных задачах очень редко удается использовать рекурсию.
В этой дискуссии, насколько я понимаю, сформировались два лагеря: один, считающий, что вычислительной мощности теперь (или через десять лет) хватит на что угодно и другой, который пытается решать задачи, для которых вычислительной мощности не хватит никогда.
Отсюда и взаимное непонимание (и неприятие).
А на самом деле нужно просто признать, что для многих задач быстродействие стало несущественным, во всяком случае менее существенным чем скорость и надежность разработки, но остались и останутся задачи, для которых быстродействие критически важно.
№ 920 22-08-2006 11:38 |  |
Ответ на »сообщение 915« (Mirage)
___________________________
GOAL rules! Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp), Naughty Dog's own internally developed language, which was based on the Lisp programming language.
Полмиллиона строк кода на диалекте Лиспа, практически весь run-time code - очень даже немаленькая часть кода...
Тем не менее они ползовались не только Лиспом, но и Visual C++:
Development software used: Allegro, Common Lisp, Visual C++, Maya, Photoshop, X Emacs, Visual Slick Edit, tcsh, Exceed, CVS
потому что
Eventually GOAL became much more robust, but even now C++ has some advantages over GOAL, such as destructors, better constructors, and the ease of declaring inline methods.
A major difficulty was that we worked in such isolation from the rest of the world. We gave up third-party development tools such as profilers and debuggers, and we gave up existing libraries, including code previously developed internally. Compared to the thousands of programmers with many years of C++ experience, there are relatively few programmers with Lisp experience, and no programmers (outside of Naughty Dog) with GOAL experience, making hiring more difficult.
хоть и надёжнее, но и сложнее, и менее эффективно работать только на Лиспе...
Постепенно всё больше склоняюсь к тому, что часть программы нужно делать с использованием ФЯ, а часть - с использованием ИЯ.
№ 919 22-08-2006 11:20 |  |
Ответ на »сообщение 912« (Сергей Перовский)
___________________________
А то опять инструмент хвалят и критикуют без четкого осознания области применимости.
Да ладно вам Сергей. Неужели вы думаете что программисты слепо применяют рекурсию невзирая на результаты ?
Вот прямо вот так вот я пишу рекурсию, а потом каждый раз терпеливо пережидаю комбинаторный взрыв ? :))
И как можно говорить о четком осознании области применения со стороны тех кто ФП не пробовал ?
Что и как они могут четко осознавать ? :))
Вы хоть сами с этой страшилкой, кроме как на тестовых примерчиках с функциями Акермана, где нибудь на практике сталкивались ?
№ 918 Удалено модератором | |
№ 917 22-08-2006 08:14 |  |
Ответ на »сообщение 916« (Max Belugin)
___________________________
см. сообщения №№ 17, 278, 477
№ 916 22-08-2006 07:48 |  |
Ответ на »сообщение 913« (Артем)
___________________________
я поискал lsharp гуглом в королевстве, не нашел и запостил
№ 915 22-08-2006 07:08 |  |
Кстати, про Naughty Dog.
Вот постмортем их игры Jak & Daxter: the Precursor Legacy на Лиспе:
http://www.gamasutra.com/features/20020710/white_02.htm
Там вроде требуется регистрация, но она вроде бесплатна.:)
Вобщем-то игра не совсем на Лиспе, а лишь ее игровая логика. Это может быть довольно большой частью, но все-таки это не та часть, где требуется максимум производительности. Что, впрочем, логично.
Срок разработки тоже довольно большой:
1 year of initial development, plus 2 years of full production
№ 914 22-08-2006 05:26 |  |
Ответ на »сообщение 912« (Сергей Перовский)
___________________________
А то опять инструмент хвалят и критикуют без четкого осознания области применимости.
А почему так произошло? Потому, что кто-то за всех решил, будто рекурсия – это стиль одного лишь ФП, а итерация – ООП.
№ 913 22-08-2006 05:21 |  |
Ответ на »сообщение 911« (Max Belugin)
___________________________
Ссылка на lsharp была уже тут давно приведена. Нам даже успели расскзать, что это - недо-Лисп, а LispWorks гораздо лучше. Или я не прав?
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|