Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 2462 01-04-2007 21:55 | |
Удивительные события продолжают происходить сегодня.
http://lambda-the-ultimate.org/node/2164
Билл Тейлор, генеральный менеджер стратегической группы по софтверным платформам Microsoft, сообщил сегодня на пресс-конференции, что Microsoft приняла решение убрать mutable (изменяемые) переменные из dotnet.
Как видите функциональное программирование наконец то прорвалось в самый meinstream из мейнстримов.
Советую всем сишарперам немедленно изучать хаскель. А то к следующему сервис паку могут не успеть. :))
№ 2461 01-04-2007 20:58 | |
Ответ на »сообщение 2460« (AVC)
___________________________
Хочется строго спросить учителей и программистов, сколько любознательному дарованию придется ожидать окончания вычислений?
Школьники народ любознательный ...и нетерпеливый. Ждать долго не придется. Поглядев разинув рот на заполняющие весь экран цифры с пару минут, он просто нажмет Ctrl-C (если знает) или спросит у учителя "как ЭТО остановить". И на всю жизнь запомнит это ощущение прикосновения к чему то огромному, к тому с явлениями какого невероятного масштаба позволяет иметь дело математика.
А что он запомнит набрав factorial 100 на обероне ?
Идиоткую ошибку которая ему ни о чем не говорит ? Путанные и сбивающиеся и главное совершенно непонятные для него обьяснения учителя почему математика тут маху дала ? Разочарование ? Осознание того что математика это только игрушка, которая работает "на моделях", а как что побольше так ломается ?
Оставьте практичность оберона для тех случаев где она затребована. И школа (как начальная так и высшая) к таким случаям не относится.
№ 2460 01-04-2007 19:22 | |
Ответ на »сообщение 2458« (AVC)
___________________________
Итак, допустим, что у нас попался любознательный школьник.
Сначала ему захотелось посчитать 100!
Зачем, и что он собирается делать с этим отнюдь не маленьким числом, -- не спрашиваю.
Но разве такой смышленый мальчик может этим ограничиться?
На следующий раз он захочет посчитать 1000000000000!
Хочется строго спросить учителей и программистов, сколько любознательному дарованию придется ожидать окончания вычислений?
Тут как-то нервно начинаешь коситься на то, что в коде
fac 0 = 1
fac n = (n-1) * fac n
с похвальной заботой повторяющем школьное определение факториала, рекурсия отнюдь не хвостовая...
№ 2459 01-04-2007 19:13 | |
Ответ на »сообщение 2458« (AVC)
___________________________
Jack, кажется, Вы недавно пытались проповедовать мне корректность?
И продолжаю.
Интересно, лично Вам в школе задавали вычислить fac(100)?
Вы школе не дают вычислить фаториал конкретно 10 или 100.
В школе учат базовым понятиям. А конкретно что вы там подставите для вычисления не должно иметь принципиального значения.
В случае с обероном однако имеет.
И какова была бы практическая ценность Оберона,
Какое отношение практическая ценность оберона имеет к школе ? Может еще жесткий цигун эээ РВ вспомните ?
Тут вот недавно многократно утверждалось, что на Хаскеле пишут операционки. Позвольте спросить: вот с таким представлением целых чисел?
Позволю, но в другой теме. К школе это отношения не имеет. Не сваливайте все в одну кучу.
Любопытно, что для представления вещественных чисел (по крайней мере, в DrScheme) на такое не сподобились. А чего вдруг?
Спросите у тех кто DrScheme писал. Это не ко мне.
№ 2458 01-04-2007 18:50 | |
Ответ на »сообщение 2456« (Jack Of Shadows)
___________________________
>>>Ну зачем паясничать ?
Jack, кажется, Вы недавно пытались проповедовать мне корректность?
>>>Был приведен конкретный пример вычисления факториала. Школьной надо заметить задачки.
Интересно, лично Вам в школе задавали вычислить fac(100)?
Код на обероне для этого дела был приведен. С использованием специальной библиотеки (по другому просто не получается)
Код на хаскеле (или на лиспе, или не схеме совершенно одинаковый)
fac 0 = 1
fac n = (n-1) * fac n
Где здесь готовая конструкция в языке хаскель для решения именно этой задачи?
Действительно, какая уж тут конструкция...
Разве что случайно попался рояль в кустах -- использование больших чисел во всех случаях, когда мы имеем дело с целыми.
И какова была бы практическая ценность Оберона, если бы во всех случаях он использовал подобное представление целых? Тут вот недавно многократно утверждалось, что на Хаскеле пишут операционки. Позвольте спросить: вот с таким представлением целых чисел?
Любопытно, что для представления вещественных чисел (по крайней мере, в DrScheme) на такое не сподобились. А чего вдруг?
№ 2457 01-04-2007 18:25 | |
Ответ на »сообщение 2448« (Руслан Богатырев)
___________________________
Если исходить из Вашего утверждения и того, что программисты делятся на системных и прикладных, вытекает, что школа должна готовить системных программистов?
Гениально Руслан. Я прямым текстом говорю что учить надо на языках максимально отдаленных от конкретики железа: В то время как ФЯ дает минимальный набор ортогональных средств практически никак не привязанных к ограничениям железа.
Вы на основании этого делаете вывод что я имел в виду...системное программирование.
Деление на системное или прикладное программирование ни в коем случае не должно проводиться в школе (и тем более в институте) Для этого существуют всякие ПТУ и прочие курсы.
№ 2456 01-04-2007 18:21 | |
Ответ на »сообщение 2450« (AVC)
___________________________
Видимо, задача школьника состоит в том, чтобы брать готовую конструкцию из самого языка, а не из библиотеки? :)
Ну зачем паясничать ?
Был приведен конкретный пример вычисления факториала. Школьной надо заметить задачки.
Код на обероне для этого дела был приведен. С использованием специальной библиотеки (по другому просто не получается)
Код на хаскеле (или на лиспе, или не схеме совершенно одинаковый)
fac 0 = 1
fac n = (n-1) * fac n
Где здесь готовая конструкция в языке хаскель для решения именно этой задачи ?
Приведите ЛЮБУЮ задачу из школьной программы, которая на ваш взгляд потребует в ФЯ каких то специальных конструкций.
Сравним код оберона и хаскеля, потом уже обоснованно будем говорить что для школьников егче, и где меньше наносной шелухи. Пока что пример с факториалом сильно не в пользу оберона.
№ 2455 01-04-2007 17:50 | |
Ответ на »сообщение 2454« (Руслан Богатырев)
___________________________
>>>Да, забыл дать ссылку. Схема Декарта и ее оценка подробно разобраны в классической книге Джорджа Пойа "Математическое открытие". Лучшая, на мой взгляд, книга по изучению сути программирования, которую крайне высоко ценил Дейкстра. Хотя слово "программирование" там, по-моему, ни разу не упоминается.
Интересно. С этой стороны об этой книге не думал.
Надо бы перечитать, благо электронный вариант есть.
И правда, уже названия глав какие интересные:
Глава 2. Метод Декарта.
Глава 3. Рекурсия.
Глава 4. Суперпозиция.
№ 2454 01-04-2007 17:39 | |
Ответ на »сообщение 2453« (Руслан Богатырев)
___________________________
Чем больше объем ваших знаний, тем больше пробелов вы сможете усмотреть в этой схеме. Хоть это и утопия, но во многих случаях, однако, полезна и работает.
Да, забыл дать ссылку. Схема Декарта и ее оценка подробно разобраны в классической книге Джорджа Пойа "Математическое открытие". Лучшая, на мой взгляд, книга по изучению сути программирования, которую крайне высоко ценил Дейкстра. Хотя слово "программирование" там, по-моему, ни разу не упоминается.
№ 2453 01-04-2007 17:25 | |
Ответ на »сообщение 2449« (AVC)
___________________________
То, что с помощью сочетания процедурных переменных и записей в Обероне можно реализовать все что угодно, достаточно ясно.
Т.е. все упирается в то, что есть штатные средства, а есть нештатные, которые всегда можно создать (цена вопроса). Когда я задавал (провокационный) вопрос относительно того, чего в Обероне не хватает для работы с ФП, то по ходу выяснил, что у сторонников ФП есть определенные стереотипы восприятия ИЯ. Для базовых вещей ФП в Обероне средства есть. Разумеется, есть полезные средства того же Хаскеля, которые в Обероне на уровне языка (а не через динамические структуры и реализацию специализированных ран-таймов) не достижимы. Нет ничего странного и страшного.
Если несколько утрировать споры, то они сводятся примерно к следующему: вот вы у себя в ИП постоянно должны переводить дыхание (плодить кучу явных и ненужных переменных), а мы у себя в ФП все делаем на одном дыхании (дыхнули и запомнили на всю оставшуюся жизнь). Ну да, "мелкозернистость" в ИП имеет место быть (на то он и ИП). Да, мы видим там узелки вышивки, спрятанные в ФП в ран-тайм. И даже можем их ненароком сковырнуть. А дальше-то что?
Возьмите элементарную вещь в ИП -- переменные цикла (не обязательно FOR). Их область существования по-хорошему должна ограничиваться циклом, но в ИП (за редким исключением) это не так. Плохо? Наверное, не есть хорошо. Но как только люди впадают в другую крайность -- никаких тебе переменных, только "одноразовые шприцы", понимаешь, что будут ситуации, когда многоразовость понадобится, и тогда начнутся выверты. Т.е. эквилибристика с инструментом-автопилотом вместо прямого и очевидного решения.
ИП не делает различия между следованием (порядок, время) и следствием (причина). Иногда это может быть важным. В ФП (свободном от ИП), наоборот, нет времени, есть причины. В противном случае это было бы уже ИП. Синхрон ИП против асинхрона ФП. Одно может имитировать другое. Вопрос в том, кому и для чего что удобнее.
Среди бумаг известного франузского философа и математика Рене Декарта после его смерти (примерно 350 лет назад) были найдены "Правила для руководства ума". В них Декарт пытался дать универсальный метод решения задач. Честно говоря, ФП, свободное от ИП, мне во многом напоминает утопическую попытку Декарта.
Если несколько упростить картину, то Декарт предложил такую схему:
1. Задача любого вида сводится к математической задаче.
2. Математическая задача любого вида сводится к алгебраической задаче.
3. Любая алгебраическая задача сводится к решению одного-единственного уравнения.
Чем больше объем ваших знаний, тем больше пробелов вы сможете усмотреть в этой схеме. Хоть это и утопия, но во многих случаях, однако, полезна и работает.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|