Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение 
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 812 18-08-2006 07:34 |  |
Ответ на »сообщение 803« (Jack Of Shadows)
___________________________
JOS, я просто сообчаю свой опыт, воспоминание, так сказать, из будущего. Мне лично все равно, на чем программировать. Хоть на марковском каком-языке (кстати, рекомендую, расширяет кругозор не хуже функциональных).
Невозмножно отрицать, что ФЯ сразу закладывает дозу сложности, даже для тривиальных задач.
И все равно в итоге синтетические языки, когда для людей.
Но вот железо -- оно императивное.
№ 811 18-08-2006 07:34 |  |
Ответ на »сообщение 808« (Артем)
___________________________
А вот, кстати об интуитивной понятности ООП.
Для всех ли очевидно, что 5 умеет реагировать на сообщения и превращать себя в строку?
№ 810 18-08-2006 07:27 |  |
Ответ на »сообщение 807« (Артем)
___________________________
Так что давайте мерять крутость языка, по количеству ключевых слов :)))
Боюсь, Лисп окажется круче в oo раз. :-)
№ 809 18-08-2006 06:21 |  |
>>>Так споры не ведутся,SJ. Если бы рекурсия и итеративность были одним и тем
>>>же, то не было бы надобности называть их разными именами. Другое дело, что
>>>рекурсию можно преобразовать в итеративность, и наоборот.
Вы, наверно, не мои посты читали :)))
Я никогда не говорил, что это одно и то же. Я говорил только об их смысловой эквивалентности. А Вы опять за меня что-то свое придумали и тут же бросились опровергать.
>>>Так и с типами вы уперлись. Вам уже говорили здесь, что есть реализации
>>>ООП, где даже простые типы являются объектами. А вы, просто, или
>>>невнимательно читаетет доводы оппонентов, или считаете, что они вас
>>>обманывают.
Опять Вы говорите о чем-то своем :)))
Я не отрицаю, что есть типы данных, которые являются объектами. Я отрицаю, что не существует типов данных, которые объектами не являются. Вы на самом деле не понимаете разницы?!!!
№ 808 18-08-2006 05:52 |  |
Ответ на »сообщение 805« (SJ)
___________________________
SJ, не впадайте слишком в схоластику. Толку от этого никакого не будет.
То, когда мы обсуждали рекурсивность или итеративность каких-то определений, вы сначала говорили, что такое-то определение рекурсивно; потом, когдамы настаивали на его итеративности, вы вдруг начинали говорить, что рекурсия и итеративность еквивалентны, т.е. по сути есть одно и тоже. Так споры не ведутся,SJ. Если бы рекурсия и итеративность были одним и тем же, то не было бы надобности называть их разными именами. Другое дело, что рекурсию можно преобразовать в итеративность, и наоборот.
Так и с типами вы уперлись. Вам уже говорили здесь, что есть реализации ООП, где даже простые типы являются объектами. А вы, просто, или невнимательно читаетет доводы оппонентов, или считаете, что они вас обманывают. Привожу пример:
int myVar = 5;
String st = myVar.ToString();
№ 807 18-08-2006 05:49 |  |
Ответ на »сообщение 806« (Max Belugin)
___________________________
Хороший ответ JOS и отличный пример. :)))
Так что давайте мерять крутость языка, по количеству ключевых слов :)))
№ 806 18-08-2006 05:13 |  |
№ 805 18-08-2006 04:20 |  |
for hugi
А если без юмора, то доказать мою простую "теорему" можно очень просто, почти как в геометрии.
Итак, мы должны доказать, что:
Понятие "тип данных" не равносильно понятию "тип объекта".
Для этого достаточно доказать, что понятие "данные" не равносильно понятию "объект" - другими словами, что могут быть данные, которые не являются объектами (в смысле ООП, конечно!) и могут быть объекты, которые не состоят только из данных.
Докажем это.
1) Данные, которые состоят только из значений и не поддерживают механизмы наследования, полиморфизма, инкапсуляции и другие характерные признаки ООП - это объекты в смысле ООП или нет. Конечно, нет.
2) Могут ли существовать объекты, которые кроме данных содержат еще и алгоритмы (методы)? Могут. Их можно построить в любом ОО-языке.
Таким образом, мы показали, что не все данные являются объектами и не все компоненты объекта являются данными.
Следовательно, понятие "данные" не тождественно понятию "объект".
Из этого следует, что понятие "тип данных" не тождественно понятию "тип объекта". Что и требовалось доказать.
№ 804 18-08-2006 02:14 |  |
>>>Во-вторых, Вы приводите аксиомы, а не доказательства.
Хорошо!
Формулирую Вашу "теорему"
"Тип данных и тип объекта - это равнозначные понятия (говоря языком логики, понятия одного объема). Другими словами, все, что является данными, является объектом, и все, что является объектом, является данными".
Можете это доказать? Именно доказать, а не, как я, аксиомами, да аксиомами :) Только не забывайте, что данные в программировании появились лет на 30 раньше, чем ООП.
>>>Мне, например, вовсе не очевидно, что "простая переменная величина" --
>>>это не объект.
Если следовать этому Вашему "открытию", то ООП появилось вместе с первыми языками программирования типа Фортрана или Алгола. Переменные величины в этих языках уже были. Но программисты даже не подозревали, что имеют дело с экземплярами классов :)
№ 803 17-08-2006 17:50 |  |
Ответ на »сообщение 802« (info21)
___________________________
JOS еще для себя это откроет, законы природы не отменяются.
ФЯ -- излишняя сложность по ср. с Обероном.
Про простоту ООП вы своим студентам на примерчиках типа TAnimal, TDog, TCat будете рассказывать.
А я излишней сложности навидался за годы работы с ООП.
Дурацкие примерчики из учебника ООП не отражают всех тех идиосинкразий, с которыми приходится сталкиваться, решая большие нетривиальные задачи.
Не зря сами основатели ООП, теперь либо осторожно предупреждают против использования ОСНОВНОГО механихма ООП наследования, либо вообще уже в открытую ругают его и предлагают заменить интерфейсами, либо композицией.
Расскажите ка им про "простоту" ООП.
Заодно сравните количество зарезервированных слов и сематнических понятий в императивных ОО языках и в функциональных.
Для примера в сложнейшем функциональном языке хаскеле всего 21 зарезервированное слово.
В java 50. А в обероне сколько ?
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|