Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 2442 01-04-2007 15:07 | |
Ответ на »сообщение 2436« (Руслан Богатырев)
___________________________
>>>что важнее для человечества: вода (ИП) или электричество (ФП).
Я то считаю и ИП и ФП всего-навсего инструментами.
Мне говорят, что надо научится пользоваться разводным ключем - это самый удобный инструмент.
А я вообще-то электрик и представления не имею, зачем мне разводной ключ :)
№ 2441 01-04-2007 15:03 | |
Ответ на »сообщение 2439« (Geniepro)
___________________________
Очень интересно, надеюсь, Вы нам расскажете, как это делается?
Набросаю сам принцип (один из возможных путей решения). В ИЯ используется абстрактный уровень, позволяющий решить поставленную задачу.
Итак, что у нас есть в ИЯ (Оберон):
1. Процедуры-функции
2. Процедурные типы
3. Записи (кортежи)
Передача информации в функцию (параметры) определяется кортежами (записями). Возврат результата (через имя функции) подразумевает не только любой базовый тип, но и процедурный (т.е. ссылку на функцию). Известно, что "статические" функции (которые пишутся на самом ИЯ) имеют бирки-ссылки.
Теперь осталось понять, как из этого можно конструировать (динамически) новые функции. Берем, скажем, формализм сетей Петри. Будем считать, что каждая динамическая функция будет описываться одной самостоятельной сетью Петри, которая задает топологию (композицию) произвольной сложности (и c причинно-следственной связью) из других функций (статических и динамических -- т.е. в виде других сетей Петри). Позиции в сети Петри -- это условия композиции, а ее переходы -- ссылки на функции. Остается еще связать параметры в кортежах. Но это уже детали.
Если требуется минимизировать ручную работу по отображению разных приемов композиции на сети Петри, то вводится простейший язык топологии (достаточно компактный по записи), с которого ведется автоматическое отображение на сеть Петри. Сами сети -- это просто данные (граф + вектор разметки).
Вообще говоря, на сети Петри можно много чего наотображать. Фундаментальная вещь. И полная динамика (все на лету, только данные без "кода", причем в рамках ИЯ). В общем -- никакого мошенничества :)
№ 2440 01-04-2007 14:43 | |
Предлагаю для обсуждения простую идею. Берется устройство архитектуры компьютера в трактовке Джона фон Неймана. Точнее, это по всей видимости не его идея, а идея других людей (и в первую очередь Джона Эккерта).
Итак, в известном документе "First Draft of a Report on the EDVAC" (1945), под которым стоит подпись фон Неймана и который разошелся по миру, определив на годы архитектуру современных компьютеров, выделяются следующие 5 блоков:
1. CA (central arithmetic part), арифметическое устройство, впоследствии его стали называть арифметико-логическим устройством (АЛУ) или просто операционным.
2. CC (central control part), устройство управления (УУ)
3. M (memory), память
4. I (input), устройство ввода
5. O (output), устройство вывода
Последние два блока можно для простоты слить в один (устройство ввода-вывода).
Попробуйте взять три парадигмы -- ИП, ФП и ООП -- и выяснить, как при отображении с них (с соотв. языков) на архитектуру Эккерта-Неймана задействуются эти ключевые блоки компьютера (что первично, что вторично, можно даже отранжировать более точно). Быть может, это поможет кое-что прояснить.
Оригинал текста фон Неймана (если очень нужно) можно найти здесь: http://www.europrog.ru/book/edjn1945e.pdf
№ 2439 01-04-2007 14:38 | |
Ответ на »сообщение 2435« (Руслан Богатырев)
___________________________
Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).
Очень интересно, надеюсь, Вы нам расскажете, как это делается?
№ 2438 01-04-2007 14:28 | |
Ответ на »сообщение 2420« (info21)
___________________________
Значит, проблема в другом: в отсутствии опыта преподавания в школе (там можно спокойно ни разу не упоминать, что INTEGER -- 32 бита) и т.п.
Стоит только ученику захотеть узнать, чему равен тот же самый несчастный факториал ста (занимающий как минимум 525 бит в памяти), он тут же упрётся в 32 бита INTEGER'а или в 64 бита LONGINT'а, и придётся Вам рассказывать ему, что вот для таких конкретно задач был придуман специальный модуль BigInts, в котором есть тип данных BigInt, для которого определены специальные процедуры Set, Add, Mul, Sub, Div, Rem, Pow, и т.д. и его несчастный запрос product [1..100] должен выглядеть примерно так:
MODULE Fact100;
IMPORT BigInts, StdLog;
PROCEDURE Do*;
VAR
i : INTEGER;
r : BigInts.BigInt;
s : ARRAY 100000 OF CHAR;
BEGIN
NEW (r); r.Set (1);
FOR i := 1 TO 100 DO
r.Set (r.MulInt (i))
END;
r.ToString (s);
StdLog.String (s); StdLog.Ln
END Do;
END Fact100. Чрезвычайно просто и доступно для любого школьника, неправда ли?...
№ 2437 01-04-2007 14:28 | |
Ответ на »сообщение 2435« (Руслан Богатырев)
___________________________
>>>Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).
Наверное, самый простой способ -- использовать объект-функцию (функтор), т.е. процедуру+запись.
Остальные пути уж больно обходные...
Или имеется в виду какой-то другой способ?
№ 2436 01-04-2007 14:16 | |
Ответ на »сообщение 2430« (Сергей Перовский)
___________________________
Спор водопроводчиков с электриками о комплектации инструментального чемоданчика :)
Не совсем. Если не брать сопоставление Оберона с Хаскелем, то споры куда более высокого порядка, что важнее для человечества: вода (ИП) или электричество (ФП). Без электричества вроде как-то раньше обходились, а без воды -- "и не туды, и не сюды".
№ 2435 01-04-2007 14:11 | |
Ответ на »сообщение 2429« (AVC)
___________________________
Сначала я не учел "динамическое" порождение функции.
Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).
№ 2434 01-04-2007 13:32 | |
Ответ на »сообщение 2432« (Jack Of Shadows)
___________________________
Пока что arc недоступен. Пол использует его сам, и вот дает свои друзьям типа :))
Рано или поздно конечно он выпустит arc на волю.
Много народу этого ждет не дождется.
Кстати, а какие преимущества у Arc перед Common Lisp'ом и Scheme?
Я что-то читал про этот язык, но так и не понял...
Какой смысл плодить ещё один диалект Лиспа, у которого сразу возникнет проблема с несовместимостью и отсутствием библиотек?
№ 2433 01-04-2007 13:27 | |
Ответ на »сообщение 2430« (Сергей Перовский)
___________________________
Спор водопроводчиков с электриками о комплектации инструментального чемоданчика :)
Ваша правда... :о))
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|