Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1492 09-11-2006 00:05 | |
Ответ на »сообщение 1477« (Как слышно? Приём!)
___________________________
Но речь шла вообще-то о том, что при автосинхронизации, которая ещё
существеннее в ФЯ, чем в Дельфи, поведение может быть непредсказуемым.
Ну, или труднопредсказуемым - порядок выставления триггеров в логике
существенен, а где "гарантии" корректности при непрожёванной генерации
холодным умом компьютера?
Т.е. Вы свято верите, что Delphi Вас не обманет правильно вызвав OnCalcFields, но не верите, что система, построенная на ФЯ сможет правильно сделать то же самое, но для данных, не связанных с БД?
А в Excel Вы сложные формулы писали? Microsoft Вам дал "гарантии" корректности при непрожёванной генерации холодным умом компьютера?
№ 1491 08-11-2006 16:36 | |
Ответ на »сообщение 1489« (Geniepro)
___________________________
Ах вот вы о чем :) Нет, это придуманный сюжет, не из мультика :)
№ 1490 08-11-2006 16:30 | |
Ответ на »сообщение 1487« (Geniepro)
___________________________
Да есть в монадах самое обчное присваивание с изменением сотояния переменной, то есть заменой предыдущего значения на новое.
Возьмите код подсчета запятых, который я здесь приводил, и вместо переменной t2 напишите t1
то есть вот так:
main = do fromHandle <- openFile "d:\\test.txt" ReadMode
contents <- B.hGetContents fromHandle
t1 <- getClockTime
putStr "Start Time "
print t1
putStr "Number of commas = "
print (calcCommas contents)
t1 <- do getClockTime
print t1
hClose fromHandle
Как видите вначале в переменную t1 запихивается одно значение времени, потом в нее же другое значение.
Все точно также как и в любом другом императивном языке. Только вместо знака = пишется <- :))
№ 1489 08-11-2006 16:29 | |
Ответ на »сообщение 1488« (Jack Of Shadows)
___________________________
Вы о чем ? Не помню такого :)
Ну как же? Сама основа статьи - задачка о том, как перевести четырёх игрушек через мост, по которому идти могут только двое одновременно, притом с фонариком, идти долго и опасно, а фонарик скоро погаснет... :о) Вроде бы сюжет их мультика "Toy Story 2"
Статья о том, что в поисковых задачах Пролог нафик не нужен тому, кто знает Хаскелл... :о))
№ 1488 08-11-2006 16:18 | |
Ответ на »сообщение 1487« (Geniepro)
___________________________
С переводами да еще на русский я вам не помошник :))
type classes как ни переводи коряво получается, а если переводить в два слова, то вы ведь знаете, одно из них не приживется и останутся просто классы, что будет приводить к путанице, которой и сечас в мире ООП хватает.
Да, и кстати, не довелось увидеть эту серию мультика, там действительно была эта история с мостом? :-)
Вы о чем ? Не помню такого :)
№ 1487 08-11-2006 15:30 | |
Ответ на »сообщение 1461« (Jack Of Shadows)
___________________________
Присваивание даже в таком чистом функциональном языке как Хаскель есть. <...>
С ограничениями, но все же.
Ммм... Имхо, немного спорный момент...
Я, правда, Хаскелл только учу, но, как я понял, говоря о Хаскелле, можно смело забыть о операции присваивания. Правильнее говорить об указании эквивалентности идентификаторов и значений, с ними связанными (там, где чисто функциональные определения). А там, где монады, - так там тоже не совсем присваивания, а, скорее, передача данных от одной функции к другой в качестве аргументов. А даже если и присваивания, то однократные, что тоже самое, что указание эквивалентности... ;о) Поэтому монадный ввод-вывод и считается функционально-чистым, т.е. не императивным...
_________
ЗЫ. Кстати, вопрос немного филологический.
Перевожу сейчас статью Мартина Эрвига "Побег от Зурга" (ну помните, Вы её расхваливали как-то), так там упоминалось, что в Хаскелле есть multi-parameter type classes. Собственно, два вопроса:
1) Можно ли перевести type classes как просто "классы", или всё же как "классы типов"? Или вообще как "метаклассы", что больше соответствует их сути? Хотя они также и на "интерфейсы" похожи, но, наверное, это уже не то...
2) Как лучше перевести multi-parameter type class? "parameter class" я понимаю как "параметризованный класс". Получается что-то типа "мультипараметризованный класс", немного коряво... :-(
Да, и кстати, не довелось увидеть эту серию мультика, там действительно была эта история с мостом? :-)
№ 1486 08-11-2006 12:53 | |
Ответ на »сообщение 1484« (hugi)
___________________________
И почему вы решили, что функции не "ориентируются" вокруг объектов? Прекрасно они "ориентируются"...
Это не я решил, это Гослинг решил. С него и спрашивайте :)) Я как раз таки и говорю что обьекты это всего лишь еще один тип данных, с которым прекрасно можно работать как в императивном так и в функциональном стиле, как в паскале так и в лиспе.
OK, давайте пихать в язык всё подряд, подозреваю, что получится второй Perl или что-то вроде этого.
ОК, давайте защищать одну крайность приведением примера другой :) Кто здесь говорит о "пихании всего подряд" ?
№ 1485 08-11-2006 12:49 | |
Ответ на »сообщение 1482« (hugi)
___________________________
MOP очень часто используется в лиспе как раз для автоматического "распознавания" различных действий.
Так например в обьектной базе данных AllegroCache автоматическое распознавание когда обьект был изменен и должен быть сохранен в БД, сделано именно при помощи MOP.
Так что ваш вопрос можна задать и в этом случае. Откуда AllegroCache знает когда обьект изменен, и его надо записывать в БД. Ведь явно вы ему об этом не говорите :)
№ 1484 08-11-2006 12:49 | |
Ответ на »сообщение 1480« (Jack Of Shadows)
___________________________
Берем тип данных и начинаем "ориентировать" вокруг него все остальные возможности языка.
Например берем тип integer, и обьявляем о создании Integer Oriented Programming (IOP). Так, а теперь начинаем ориентировать язык. Прямо с арифметических операций и начнем, что у нас там ? Сложение, вычитание, умножение ? работают с integer ? Прекрасно, оставляем. Деление ? О, о ! С делением проблемы. Как кратко и емко выразила проблему IOP с делением лиса Алиса "Пять на два не делится" :)) Вот мы деление то и выкинем из языка.
Абсурд скажите вы, правильно ? Такого не может быть, на такой дебилизм никто не пойдет.
Как бы не так! Известный крестоносец ООП Гослинг, создавая java выкинул из языка ФУНКЦИИ!! Ну не ориентируются они вокруг обьектов. :)) Ну как тут зубами не поскрежетать ? Любую идею ведь можно довести до по полно потери сознания :))
OK, давайте пихать в язык всё подряд, подозреваю, что получится второй Perl или что-то вроде этого. Как же тогда быть с элегантностью языка, с его простотой, целостностью, чистотой дизайна, лаконичностью, единообразием внутренних концепций в конце концов?! Мне вот лично очень импонирует подход "Всё есть объект" принятый в языке Smalltalk (а в ещё большей степени в Self), а затем, 20 лет спустя и в C#. Так что, как видите, Гослинг не единственный "дебил" среди разработчиков языков.
И почему вы решили, что функции не "ориентируются" вокруг объектов? Прекрасно они "ориентируются"...
№ 1483 08-11-2006 12:43 | |
Ответ на »сообщение 1482« (hugi)
___________________________
Вопрос. КАК cells узнает об изменении значения y?
Через MOP (Meta Object Protocol)
Вам стало легче ? :)) Предупреждаю сразу, MOP я вам разжевывать не буду. Читайте книжки.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|