Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 2212 24-03-2007 17:40 | |
Ответ на »сообщение 2211« (Geniepro)
___________________________
Ответ на »сообщение 2206« (AVC)
___________________________
Надеюсь, Илья Ермаков распишет так же подробно матричные-множественные алгоритмы из своей программы на КП и укажет, какие у них преимущества... ;о)
А что там расписывать?? Решение собственно задачи - это строк 50 кода, между прочим - практически "функционально чистого".
Громотуха начинается с вводом/разбором строк - по уже обсуждавшимся причинам (нужна подходящая библиотека обработки строк и т.п.)
№ 2211 24-03-2007 17:37 | |
Ответ на »сообщение 2206« (AVC)
___________________________
Легче читать нормальный текст, чем криптограмму, даже короткую.
Без привычки поэму читать тоже труднее, чем прозу.
Однако вскоре понимаешь, что поэмы красивее тяжеловесных романов.
Кстати, о криптограммах. :о))
Почитайте, если найдёте время, мою статью с расписанной по пунктам программой - решением задачки с ACM ICPC 2007.
Не знаю, почему Вы так не любите Хаскелл, но надеюсь, что Ваше мнение о нём изменится...
Надеюсь, Илья Ермаков распишет так же подробно матричные-множественные алгоритмы из своей программы на КП и укажет, какие у них преимущества... ;о)
№ 2210 24-03-2007 16:25 | |
№ 2209 24-03-2007 16:12 | |
Ответ на »сообщение 2190« (Булат Зиганшин)
___________________________
идея построения софта из отдельных компонентов витает в воздухе с 80-х годов - next+objc
Идея построения ПО из отдельных компонентов была высказана Дугом Макилроем (Doug McIlroy). Он довольно знаковая фигура: автор и исполнитель идеи программных магистралей (pipeline) в UNIX и принципа фильтров -- элементарной композиции процессов через вход-выход (выход одного является входом другого), то бишь конвейер, очень близкий к композиции функций в ФП. В эпоху зарождения UNIX он возглавлял в AT&T Bell Labs тот самый департамент (Computing Techniques Research Department), где трудились Кен Томпсон и Деннис Ритчи. Известен и по реализации многих утилит в UNIX.
Так вот, Макилрой, выступая на конференции NATO по программной инженерии в Гармиш-Партенкирхене (Германия) в октябре 1968 г., предложил в целях индустриализации неиндустриализированного производства программного обеспечения идею библиотеки оттестированных и хорошо отдокументированных компонентов. Его выступление называлось "Mass Produced Software Components". В нем же он выдвинул идею фабрики компонентов (components factory). А потом свою идею компонентов в первом приближении сам же успешно воплотил в утилитах-фильтрах UNIX.
Небольшая выдержка из его выступления: I would like to see components become a dignified branch of software engineering. I would like to see standard catalogues of routines, classified by precision, robustness, time-space performance, size limits, and binding time of parameters. I would like to apply routines in the catalogue to any one of a large class of often quite different machines, without too much pain.
Интересна и реакция из зала на это выступление со стороны Петера Наура, сразу разглядевшего важные последствия ценной идеи: What I like about this is the stress on basic building principles, and on the fact that big systems are made from smaller components. This has a strong bearing on education. What we want in education, particularly at the more elementary level, is to start indoctrinating the knowledge of the components of our systems. A comparison with our hardware colleagues is relevant. Why are they so much more successful than we are? I believe that one strong reason is that there is a well established field of electronic engineering, that the young people start learning about Ohm’s Law at the age of fourteen or thereabouts, and that resistors and the like are known components with characteristics which have been expounded at length at the early level of education. The component principles of our systems must be sorted out in such a form that they can be put into elementary education."
Спустя 20 лет идеи Макилроя в контексте реплики Наура нашли свое воплощение в виртовской Oberon System.
P.S. Полный текст исторического доклада Макилроя (и другие не менее интересные выступления) можно найти в сборнике конференции: http://www.europrog.ru/book/nato1968e.pdf
№ 2208 24-03-2007 16:07 | |
Ответ на »сообщение 2202« (Булат Зиганшин)
___________________________
>>>я ниже писал - передавать целиком состояние мира в виде структуры.
Очень интересно.
Т.е. по всей программе "разгуливает" структура неизвестного размера (да и неясного содержания), а учитывая строгости ФП -- скорее всего, несколько ее копий.
Если это то, что я подумал (я мог понять неверно), то у нас с Вами разные представления о модульности (в данном контексте -- разбиении программы на части с минимизацией связей (coupling) между частями).
№ 2207 24-03-2007 15:56 | |
Смолтокисты, переходящие в Обероны, чувствуют себя как дома
На самом деле, неужели такие есть?
№ 2206 24-03-2007 15:37 | |
Ответ на »сообщение 2205« (Geniepro)
___________________________
>>>У наших оберонщиков такое мнение - чем больше код программы, тем легче его читать... :о))
Легче читать нормальный текст, чем криптограмму, даже короткую.
№ 2205 24-03-2007 15:12 | |
Ответ на »сообщение 2202« (Булат Зиганшин)
___________________________
что касается мерянья - то интересно посмотреть, *почему* программа маленькая и чтя в этом заслуга - языка, библиотек, rts, или может даже программиста :)))
У наших оберонщиков такое мнение - чем больше код программы, тем легче его читать... :о))
№ 2204 24-03-2007 14:21 | |
Ответ на »сообщение 2198« (Илья Ермаков)
___________________________
>>>Смолтокисты, переходящие в Обероны, чувствуют себя как дома
Это фигура речи или вы наблюдали хотя бы одного такого смолтокиста?
№ 2203 24-03-2007 10:53 | |
Ответ на »сообщение 2200« (Сергей Перовский)
___________________________
Ответ на »сообщение 2193« (Илья Ермаков)
___________________________
>>>При показе некоторых фокусов в Оберонах (например, работа в BlackBox с гуем в стиле составных документов) у привыкших к традиционным средам программистов глаза медленно на лоб лезут :-)
Вы имеете в виду каких программистов? Знающих пол-языка программирования?
Так их удивить не штука.
Для меня все это именно фокусы: вполне симпатичные но совершенно не обязательные возможности. Тут я согласен с Булатом Зиганшиным: для 365*24 это необходимость, в остальных случаях - приятные мелочи.
динамически-визуальных сред я до сих пор не видел (позор!), а вот от delphi обалдел когда увидел, как в среде мышкой меняют размер одного окна, и тут же меняется размер другого, от него отнаследованного :) это назыается как-то типа two-fold visual programming
что касается компонентности, то я в том обероновском треде привёл примеры программ, использующих её - от фара до винампа. единственное, с чем я не согласен - что это является исключительным свойством оберона как языка. думаю, что остальные популярные языки могут обеспечить то же самое - вопрос только в инструментарии. для хаскел к примеру есть библиотека hs-plugins, правда я совершенно не в курсе её фич
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|