Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 3242 05-10-2007 15:18 | |
Ответ на »сообщение 3241« (Geniepro)
___________________________
Ну так это так и сделано в Хаскелле - классы типов, содержащие в себе методы работы со значениями разных логически схожих типов, и просто функции...
Как сообразуется Ваше высказывание с негативным высказыванием Вагифа про пришпиливание процедур к типам (про инкапсуляцию)? См. »сообщение 3154« и »сообщение 3135«.
Вообще, это было забавное утверждение о том, что Хаскелл слишком самодостаточен, что бы использоваться в связке с другими языками. Увы, пока это не так, иначе не делали бы к нему foreign function interface, не придумывали бы всякие O'Haskell, OOHaskell...
Может ли Haskell обойтись без работы с миром императива через монады? Если будет для этого специальный язык (вне Haskell'я)? Аналогично: может ли он обойтись без ООП, если за это отвечает свой язык?
№ 3241 05-10-2007 14:00 | |
Ответ на »сообщение 3159« (Руслан Богатырев)
___________________________
А Вы не задумывались над тем, что можно иметь и то, и другое? Отдельно -- пришпиливание процедур (методов) к типам и отдельно -- функции?
Ну так это так и сделано в Хаскелле - классы типов, содержащие в себе методы работы со значениями разных логически схожих типов, и просто функции...
Вообще, это было забавное утверждение о том, что Хаскелл слишком самодостаточен, что бы использоваться в связке с другими языками. Увы, пока это не так, иначе не делали бы к нему foreign function interface, не придумывали бы всякие O'Haskell, OOHaskell...
Ну что ж, "Haskell: the world's finest imperative programming language" (C) Simon Peyton Jones
№ 3240 05-10-2007 13:44 | |
Ответ на »сообщение 3153« (Евгений Непомнящий)
___________________________
Как я понимаю, вещи типа
filenames = [x for x in filenames if os.path.splitext(x)[1] in extensions]
в Питоне это элементы ФП?
Нет, это - элементы декларативного программирования, ведь здесь Вы декларируете содержимое списка, а не описываете, как его получить. Фактически это то же самое, что и запросы к базе данных в SQL...
Элементы же ФП - это lambda.
Пролог, кстати, не имеет отношения к ФП - это язык логического программирования, которое вместе с функциональным составляет ветку декларативного программирования, противостоящую ветке императивного программирования, в которую входят процедурное и ООП...
№ 3239 05-10-2007 13:43 | |
Ответ на »сообщение 3146« (Руслан Богатырев)
___________________________
Асинхронное ООП в моем понимании не сильно отличается от декларатива (то бишь вообще не отличается).
Это вообще поразительное утверждение. Этак можно договориться, что Смоллток - диалект Пролога... :о))
Придётся Вам теперь объяснять, что такое декларативное программирование, и почему Ваше понимание декларатива так существенно отличается от распространённого...
№ 3238 05-10-2007 13:42 | |
Ответ на »сообщение 3145« (Сергей Осколков)
___________________________
А можно чуть подробней? Я здесь спрашивал про эту книгу, никто не ответил (или я не заметил среди множества сообщений).
Признаюсь сразу, я книгу Душкина не читал и судить о ней могу только по чужим впечатлениям (эх, сразу Солженицын вспоминатеся... :о) ) Хоть Душкин и настаивал, что бы я её выписал через Озон.ру, но так у меня и не дошло дело... Он сейчас с соавтором (deniok на РСДН.ру и ЖЖ) пишет вторую, более практическую книгу. Начало вроде интересное...
Вообще, мне у Душкина понравилось (в плане какого-то интеллектуального развлечения что-ли; читаю по дороге на работу в электричке и метро) то, что чуть ли не впервые в программировании здесь столкнулся с "настоящей" математикой.
Вот это (по усреднённому мнению читавших его) и ставит барьер для начинающих изучать Хаскелл - сильная ориентация на хорошо подготовленных математически людей. То есть, не столько для обычных программистов, сколько для математиков, или уже имеющих опыт в ФП...
Что посоветуете другое? Мне еще попалось "Мягкое введение в Haskell" c RSDN.
К сожалению, на русском большого выбора нет...
Функциональное программирование
На инглише можно много чего насоветовать:
Основной ресурс по Хаскеллу - http://haskell.org/haskellwiki/Haskell и http://haskell.org/haskellwiki/Ru/Haskell
Также документация к GHC, так как это референсный компилятор Хаскелла, в котором появляются все новые возможности Хаскелла.
"Yet another Haskell tutorial"
"All about monads"
и ещё много чего - жизни не хватит всё прочесть... :о))
№ 3237 05-10-2007 11:11 | |
Мне конечно очень приятно что на ветке по ФП такие жаркие споры идут. Но господа, может вы свои императивные for, while и break все таки перенесете туда где им и положено быть ? Например в ветку по оберону ?
Хаскелистам и лисперам глубоко фиолетово как у вас там отношения с break складываются.
Другой вопрос если дискуссия идет в русле сравнения этих самых for while break с аналогичным функциональным кодом, map fold и рекурсией. Вот тут можно и поговорить :)
№ 3236 05-10-2007 10:26 | |
Ответ на »сообщение 3235« (panda)
___________________________
Ответ на »сообщение 3233« (Илья Ермаков)
Т.е. если найденный элемент первый, то это никого не волнует и надо пройти все оставшиеся?
М-да... Вирт был бы вами "доволен" за такой алгоритм...
А Вы внимательнее смотрите.
На условие цикла: не_вышли_за_конец && не_нашли_элемент.
Цикл будет завершён либо в конце, если элемента нет, либо как только элемент будет найден.
Здесь for применён как while, поскольку в С++ по семантике он таков и есть - while, в котором явно синтаксически оформлена инициализация, условие продолжения и изменение.
№ 3235 05-10-2007 10:21 | |
Ответ на »сообщение 3233« (Илья Ермаков)
___________________________
А вы присмотритесь повнимательнее - там после for точка с запятой стоит (цикл с пустой нагрузкой). return снаружи цикла, в конце функции. Просто возврат значения. ПО дельфийски result := i <> list.end().
Т.е. если найденный элемент первый, то это никого не волнует и надо пройти все оставшиеся?
М-да... Вирт был бы вами "доволен" за такой алгоритм...
№ 3234 05-10-2007 10:18 | |
Ответ на »сообщение 3231« (Стэн)
___________________________
Кстати без всяких явных break и return... И очень даже понятно...
Не хочу, вас огорчать, но у нас тут вообще-то спор возник совершенно о другом: что понятнее в императивном программировании: чистый while или foreach + break/return
;-)
№ 3233 05-10-2007 10:18 | |
Ответ на »сообщение 3232« (panda)
___________________________
Илья, я просил Вас привести пример структурного программирования "без goto и его суррогатов в виде break и return" (c) не мое ;-)
А вы присмотритесь повнимательнее - там после for точка с запятой стоит (цикл с пустой нагрузкой). return снаружи цикла, в конце функции. Просто возврат значения. ПО дельфийски result := i <> list.end().
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|