Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1452 Удалено модератором | |
№ 1451 08-11-2006 03:04 | |
Ответ на »сообщение 1450« (panda)
___________________________
И никто еще не поднимал по этому поводу вселенского хая.
А мне как раз таки поставленные вопросы понравились. Совершенно нормальное развитие темы.
Так и нужно проводить обсуждение.
Вот только вторая часть сообщения господина "Как слышно? Приём!" действительно была похожа на хай. :))
Но это я так понимаю неизбежные издержки общения на любую "огнеопасную" тему. :))
То есть я бы хотел чтобы обсуждение больше шло по техническому руслу, как первая часть сообщения № 1446
А не скатывалось бы к пассажам
Нырнуть в ФЯ - отказаться от дотошливого вникания во всё,
В конце концов это именно функциональщики здесь пытаются уговорить императивщиков попробовать и вникнуть а не наоборот. Кто отказывается как раз таки четко прослеживается.
Ты мол мне гарантию дай сто-процентную, а потом может быть я еще попробую. :))
№ 1450 08-11-2006 02:39 | |
Ответ на »сообщение 1446« (Как слышно? Приём!)
___________________________
Скажите, Вы когда-нибудь пользовались TAction.OnUpdate? Судя по Вашему сообщению - никогда. А ведь в Delphi давно уже есть все те проблемы, которые Вы описали. И никто еще не поднимал по этому поводу вселенского хая.
№ 1449 08-11-2006 02:34 | |
Ответ на »сообщение 1446« (Как слышно? Приём!)
___________________________
Я налетал на кривые компоненты, на криворуко организованную
работу COM порта в Win, Аккерман и ещё множество других вещей.
Разведку надо проводить самому - противное смерти подобно.
Увы, тут фундаментальная огромность зарыта:
надо бы законом каким обозвать, что-ли, "звонко" сформулировать...
№ 1448 08-11-2006 02:32 | |
Ответ на »сообщение 1446« (Как слышно? Приём!)
___________________________
О, now we are talkin :)
Приятно видеть мысль работающюю.
Если температура дребезжит около 150 градусов, а такое реально,
Ваш почтовик попросту заткнётся, захлебнувшись отправкой.
Совершенно верно. Есть такое. Конечно и Кени Тилтон стал сталкиваться с подобными роблемами, когда реализовал идею, и его библиотеку начали применать многие другие люди. Она развивается, на месте не стоит.
Эта проблема привела к тому что он ввел в cells новое поняти - синапсы как он их называет.
Если у вас ситуация когда какое то значение очень быстро меняется, вы вместо непосредственной связи между двумя значениями, ставите туда специальный обьект синапс, в котором можно запоминать предыдущие значения переменной, и принимать решение стоит ли дергать связь и оповещать обьект.
Отображение статусбара - медленная операция и в случае отображения
быстрых шагов может на несколько порядков затормозить работу.
То же самое, Если не хотите дергать отображение слишком часто, ставите между обьектами синапс, и отображаете скажем изменение на какой то процент.
Но это крайние случаи. В большинстве примемений обьекты меняют свои значение далеко не каждую миллисекунду.
Наиболее распространенный случай - работа с БД, где пользователь скролит по выборке очень очень медленно.
№ 1447 08-11-2006 02:20 | |
Информация к размышлению:
http://common-lisp.net/project/cells/
Cells is a mature, stable extension to CLOS that allows you to create classes, the instances of which have slots whose values are determined by a formula.
Насколько позволяет мне судить мой скромный опыт в Лиспе, его объектно-ориентированная подсистема CLOS императивна по своей сути.
Выводы об уместности cells как примера выгод функционального подхода предлагаю читателям сделать самостоятельно.
№ 1446 08-11-2006 02:19 | |
1) Инструмент и даётся, чтобы реализовать детали. А чохом ...
>>> Logger.SendWarningEmail := ?f: Engine.Temperature > 150;
Если температура дребезжит около 150 градусов, а такое реально,
Ваш почтовик попросту заткнётся, захлебнувшись отправкой.
>>> StatusBar.Position := ?f: FTPDownload.BytesDownloaded / FTPDownload.FileSize;
Отображение статусбара - медленная операция и в случае отображения
быстрых шагов может на несколько порядков затормозить работу.
Так что с медленными операциями тщательне'е.
И автоGUI из-под ФЯ с автообновлением - вешалка полная.
>>> MenuItemFileSave.Enabled := ?f: CurrentFile.isDirty;
Представляю, как будет перетрахиваться файловая система,
когда Вы таким образом наладите средней сложности меню!
2) А теперь представим, что Вы задействовали связи в цикле! :)
Всё же влияние мысли Пола Грэхема о изрядной доле религии
в программировании прослеживается отчётливо.
Нырнуть в ФЯ - отказаться от дотошливого вникания во всё,
ПОВЕРИТЬ в то, как кто-то это всё организовал.
Я налетал на кривые компоненты, на криворуко организованную
работу COM порта в Win, Аккерман и ещё множество других вещей.
Разведку надо проводить самому - противное смерти подобно.
Ну и критика императивного подхода ниже всякой критики,
типа 99.99% императивщиков отлаживают программы
исключительно в сборе, о модульном подходе и не слыхивали
или ОТО в детском саду :)
Ремонтопригодность сложной техники вызывает сомнение.
Что если заколдобит? В Дельфи, асме и т.п. любой затык разрешим.
А отладка в ФЯ?
>>> в любой задаче с динамическим выделением памяти необходимы
>>> те или иные механизмы ее возврата
Если памяти терабайт, то и не обязательно. Запальное земледелие -
насорили, переехали на чистое место. И в духе экстенсивного подхода ФЯ.
№ 1445 08-11-2006 02:14 | |
Ответ на »сообщение 1444« (al_mt)
___________________________
Что подразумевается под термином "связать"? Передача данных между полями объектов?
Странно, я вроде приводил очень очень очень простенькие примеры в одну строчку. Неужели не понятно ?
Есть 2 совершенно разных обьекта Object1 и Object2.
У Object1 есть поле (свойство, property) скажем Property1.
У Object2 есть поле (свойство, property) скажем Property2.
Вы хотите чтобы каждый раз когда свойство Property2 у Object2 менялось, автоматически бы менялось и свойство Property1 у Object1.
Для того чтобы задекларировать эту вот связь вы пишите что нибудь в таком духе:
Object1.Property1 := ?f: Object2.Property2 + 10;
Куда уж легче то ? Конечно это только в том случае если бы Дельфи предоставлял вам полноценные функциональные возможности, чтобы такую вот красотищу реализовать.
На лиспе это сделано, сделано легко, одним человеком. Можете скачать и посмотреть, кода там не ахти как много: http://common-lisp.net/project/cells/
Да вы так особенно губу не раскатывайте. Вам это не светит :)) Это только для лисперов.
Ну или для любого другого ФЯ на который кто нибудь портирует cells.
На паскаль, java, сишарп, такое портировать невозможно.
№ 1444 08-11-2006 02:02 | |
А можно поподробнее про чудеса cells???
Это что? Я могу взять два заранее неизвестных объекта (или класса?) и "связать" их?
Что подразумевается под термином "связать"? Передача данных между полями объектов?
Либо Вы JOS чего-то не договариваете, либо внутре cells ИскИн спрятался...
№ 1443 08-11-2006 00:35 | |
Ответ на »сообщение 1440« (Сварог)
___________________________
Честнслово, сообщения Jack Of Shadows из мира функционального программирования я читаю прямо как книги Мулдашева о Шамбале. В каждом посте – сплошные чудеса!
Абясняю.
Наука отличается от веры повторяемостью результатов в своих экспериментах. Религиозный опыт и опыт, основанный на ВЕРЕ такой регулярности не даёт. Всё что подтверждает Мулдашев - верность предположения о разности психотипов человеческих особей и их разной степени (само)внушаемости...
Вот и сейчас оказалось, что существует Святой Грааль... тьфу, библиотека cells, которая способно подключить любую БД безо всяких драйверов!
При чём ТУТ драйвера???
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|