Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 312 21-06-2006 00:38 | |
Ответ на »сообщение 310« ()
___________________________
В третем абзаце опечатка. Он должен выглядеть так:
Можно вспомнить, что даже комплексные числа трудно включить в язык так, чтобы совсем исключить необходимость покомпонентной работы -- подразумевается, без потери эффективности.
Вы о каком уровне работы в данном случае говорите? Реализации понятия "комплексное число" или использование в проектах реализаций комплексных чисел (будь то библиотека или тип языка)? Сообщение не подписано
№ 311 21-06-2006 00:33 | |
Ответ на »сообщение 301« (Jack Of Shadows)
___________________________
Ответ на »сообщение 300« (info21)
___________________________
причина очевидна -- эффективность.
...
что эмулируют просто автоматическое управление памятью,
Contradiction of interests как говорится.
Ну вот, будем цитаты выдергивать...
Неохота весь этот словесный узор распутывать ...
№ 310 21-06-2006 00:22 | |
Ответ на »сообщение 299« (info21)
___________________________
..., причина очевидна -- эффективность.
... с какой точки зрения?
Идём от задачи (построенной модели) или от имеющихся средств её решения (учёт архитектуры, средств реализации, "традиций"...)?
Когда (у некоторых часто) эта часть задачи становится важной, проектирование динамических структур данных, отличных от простейших списков, перестает быть "низкоуровневой" частью программирования. А выигрыш бывает очень большой.
Некоторые так и останавливаются на "методиках" "заточки" получившихся описаний предметной области к ограниченному набору средств имеющегося "привычнопарадигмального" инструмента.
Можно вспомнить, что даже комплексные числа трудно включить в язык так, чтобы совсем исключить необходимость покомпонентной работы -- подразумевается, без потери эффективности.
Вы о каком уровне работы в данном случае говорите? Реализации понятия "комплексное число" или их использование в проектах реализаций комплексных чисел (будь то библиотека или тип языка)?
Даже для квази-простых списков разнообразие возможных вариаций, возможно, и больше, чем для комплексных чисел.
Вы сейчас смотрите на всё это с точки зрения примера hugi или, всё же, - как пользователь типовой Лисп-системы? Сообщение не подписано
№ 309 21-06-2006 00:17 | |
Ответ на »сообщение 307« (panda)
___________________________
OODB vs SQL DB это офтопик.
Если хотите его обсуждать, то пожалте сюда: http://www.delphikingdom.com/asp/talktopic.asp?ID=337
Неправда, это Вы игнорируете ответ: QuickSort.
Офигеть!! У вас что не цикл так задачу QuickSort решаете ? Первый раз вижу такого программиста.
И потом QuickSort это не ежедневная задача программиста. QuickSort уже давно реализован в библиотеках практически для всех массивов, списков, и прочих связанных структур.
Вы до сих пор ее решаете ?!
Я все еще жду, так как насчет возможно/невозможно на больших массивах данных.
Я был прав или нет ?
№ 308 21-06-2006 00:07 | |
Ответ на »сообщение 305« (Jack Of Shadows)
___________________________
А на маленьких я уже тоже вам задавал вопрос неоднократно. Вы его продолжаете игнорировать. Где ваше "использование" ?
Неправда, это Вы игнорируете ответ: QuickSort.
Хотите еще, пожалуйста, вчера только видел: сравнение текстов в стиле MS Visual SourceSafe.
Поскольку я немного занимаюсь преподаванием Delphi, есть учебные примеры, демонстрирующие удобство рекурсии там, где это уместно. Пример: составить список иерархии классов, начиная от заданного и заканчивая TObject.
№ 307 21-06-2006 00:02 | |
Ответ на »сообщение 306« (Jack Of Shadows)
___________________________
Ошибаетесь, Обьектная база AllegroCache написанная на чистом лиспе, в сотни раз быстрее любых SQL серверов, включая Oracle и DB2.
Что-то это слабо отражается на объемах продаж Oracle, DB2 и даже MS SQL Server. Странно, не правда ли?
К тому же это полный офтопик. Не пытайтесь перевести тему.
Ничуть. Просто для моих задач там где не хватает рекурсии в Delphi - это значит пора переходить на серверную обработку. Работать на клиенте со 100000 элементов списка - это извращение.
№ 306 20-06-2006 23:54 | |
Ответ на »сообщение 304« (panda)
___________________________
Обработка 20 миллиардов записей на SQL будет намного эффективней.
Ошибаетесь, Обьектная база AllegroCache написанная на чистом лиспе, в сотни раз быстрее любых SQL серверов, включая Oracle и DB2.
К тому же это полный офтопик. Не пытайтесь перевести тему.
№ 305 20-06-2006 23:49 | |
Ответ на »сообщение 304« (panda)
___________________________
И на Лиспе тоже.
Неправда, я проверял. Именно эту функцию. Работает преспокойно и с миллионом и с 10 миллионами и с миллиардом.
А на реальных объемах данных использовать рекурсию в Delphi вполне можно.
Вы на меня бочку катили, когда я сказал что на больших массивах, использование рекурсии невозможно.
Я это доказал.
А теперь не хотите признавать что я был прав. Что это за "реальные обьемы" :))
И не пониманию, почему, если Вы ее не используете, то это проблема Delphi, а не Ваша?
Большие массивы, помните ? Не моя проблема, проблема дельфи.
А на маленьких я уже тоже вам задавал вопрос неоднократно. Вы его продолжаете игнорировать. Где ваше "использование" ?
Я привел пример использования рекурсии в ИЯ мною. В очень редких случаях - обработка дереьвев.
Почему в лиспе рекурсия повсеместно ? Почему в дельфи не повсеместно ?
Ведь рекурсия в ИЯ возможна, пусть даже и на "реальных обьемах" :)))
№ 304 20-06-2006 21:43 | |
Ответ на »сообщение 303« (Jack Of Shadows)
___________________________
На больших (100000) Вылетает с ошибкой Stack Overflow.
Что означает что использование рекурсии в дельфи на больших массивах НЕВОЗМОЖНО !!!
И на Лиспе тоже. Обработка 20 миллиардов записей на SQL будет намного эффективней.
А на реальных объемах данных использовать рекурсию в Delphi вполне можно. Я, например, ее использую в реальных программах. И не пониманию, почему, если Вы ее не используете, то это проблема Delphi, а не Ваша? Вам же неудобно использовать. Другим людям удобно.
Пример с быстрой сортировкой Вам уже приводили. Это ли не реальная работа?
№ 303 20-06-2006 19:13 | |
Вот кстати и доказательство.
Я даже не стал брать громоздкий пример panda. Сделал примитивнейшую рекурсию для суммирования чисел.
Императивный вариант с циклом:
for I := 0 to 1000000 do
begin
lsum := lsum + i;
end;
Отрабатывает за секунду !!
Рвариант с рекурсией:
function Summ(inbr:integer):integer;
begin
if inbr < 1 then Result := 1
else Result := inbr + Summ(inbr-1) ;
end;
На маленьких числах (100 или 1000) прекрасно работает.
На больших (100000) Вылетает с ошибкой Stack Overflow.
Что означает что использование рекурсии в дельфи на больших массивах НЕВОЗМОЖНО !!!
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|