Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  05:30[Войти] | [Зарегистрироваться]
Обсуждение темы:
Функциональное программирование

Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.

Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.

Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.

 Jack Of Shadows

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 5502 сообщения

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Средства разработки. Языки программирования.
  • Delphi 4 or Delphi 5
  • Что приобрести в качестве средства разработки?
  • Delphi6
  • Delphi vs PowerBuilder
  • Сравнение компиляторов
  • Вот и вышла Delphi 7... Вы рады?

  • <<<... | 1232—1223 | 1222—1213 | 1212—1203 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 429


    № 1222   16-09-2006 10:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1218« (bb)
    ___________________________

    2) Подход к этому термину со стороны Дейкстры, введенный в его книге "Дисциплина программирования"?

    ________________

    Функции на которых я вырос, такие как синус, косинус, квадратный корень и логарифм, были почти исключительно вещественными функциями вещественного аргумента...
    В результате я был чрезвычайно плохо подготовлен, чтобы оценить функциональное программирование, когда я с ним столкнулся: Например, меня ставила в тупик потрясающая мысль, что значением функции может быть другая функция.

    Эдсгер Дейкстра
    ________________

    Возможно, Дейкстра и не рассматривал ФП с точки зрения дисциплины программирования...


    № 1221   16-09-2006 08:02 Ответить на это сообщение Ответить на это сообщение с цитированием
    Если смотреть на чужой опыт, то пока что единственным удачным применением чистого ФЯ в пром. программровании является спользование Erlang в телекоммуникационном бизнесе (JOS об этом говорил). Да если язык заточен на определенные проблемы (многопоточность, например, по нетребовательности к ресурсам там вообще уникальна), если один и тот же класс проблем воплощается на нем в меньшем количестве кода, чем в C++ (упомянем здесь и ~ одинаковую квалификацию программистов), то и ошибок там будет меньше.

    Я не хочу предсказывать будущее и говорить о том, что какая-то одна парадигма задавит все остальные и она единственная будет считаться программированием. Время покажет. Пока же я выбираю такие средства, которые позволяют мне зарабатывать деньги, ну, и получать определенное удовольствие от самого процесса работы. :)  Кстати, я вполне (!) допускаю, что у каждого эти средства могут быть свои :)


    № 1220   16-09-2006 07:42 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1219« (Jack Of Shadows)
    ___________________________
    С чистым ФЯ все просто. Там сам язык не приемлет просто другого подхода. Когда мы в институте учили Пролог, глядя на код моих сокурсников мне становилось дурно. Хотя Пролог - это высокоуровневый декларативный язык. Их программы тоже работали, - да они были медленнее, гораздо длиннее, но они тоже работали.
    Я не гуру в ФЯ, но, подозреваю, что язык, заставляющий программиста писать хорошо - это утопия.  Я преклоняюсь перед вашим литературным талантом, Вагиф (особенно в сообщении №1210), но это, извините, чистой воды беллетристика. Во-первых, что позволяет вам быть таким уверенным, что в больших проектах при использовании чистых ФЯ все так хорошо? Вы ведь пока только пол-года с хвостиком серьезно используете "нечистый" Лисп (не считая автокада), а к тому же "чистому" Хаскелю только присматриваетесь.  Во вторых, если уж говорить языком аллегорий, то в ответ на ваши рассуждения о военной дисциплине я могу возразить упоминанием о том, что военная и дисциплинированная Спарта когда-то проиграла Афинам.


    № 1219   15-09-2006 17:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1218« (bb)
    ___________________________
    Поскольку речь идет о дисциплине программирования, то какая конкретно выбрана парадигма не имеет значения.
    Имеет значение строгое следование выбранной парадигме что и есть ДИСЦИПЛИНА.
    Использовать разные парадигмы в разных частях системы можно без проблем. Главное чтобы они не пересекались в одном коде.
    Скажем сервер на Erlang (ФЯ) а клиент на java (ОО) - запросто.
    Вот только кто будет обеспечивать дисциплину ? Где тот сержант с палкой, который будет гонять ваших программистов и заставлять их седовать ОО ?
    С чистым ФЯ все просто. Там сам язык не приемлет просто другого подхода.
    А java и вообще в любом ОО нет никаких ограничителей. Соответственно мы и имеем катастрофическое положение с качеством кода.


    № 1218   15-09-2006 16:19 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1216« (Jack Of Shadows)
    ___________________________

    Дисциплина программирования это прежде всего парадигма, на основе которой строятся программы.


    Вот оно что! Т.е. в современных условиях смешения парадигм как на уровне проектирования, так и кодирования дисциплина программирования оказывается следованием одной конкретной парадигме.

    Как с таким представлением соотносятся:
    1) Реальная необходимость использования в проекте нескольких парадигм программирования;
    2) Подход к этому термину со стороны Дейкстры, введенный в его книге "Дисциплина программирования"?


    № 1217   15-09-2006 11:04 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1214« (Geniepro)
    ___________________________
    Ну, не знаю, не знаю... Мир программистов раз за разом отказывался от функционального стиля мышления..

    Мир программирования никогда и не имел шанса использовать чистый ФЯ. Как же можно говорить о том что он от него отказывался ?
    Повышенные требования ФЯ к железу сделали невозможным их примемение в первые 20-30 лет.
    А дальше уже было наработано сотни миллион строк императивного кода, тысячи и тысячи библиотек, тысячи книг, школ, 3 поколения императивных программистов.То что вы видите сейчас и есть очень быстрый процесс перехода к ФП. Быстрый конечно в масштабе истории программирования, а не в масштабе жизни и карьеры одного программиста.

    Осознание необходимости какого то механизма, гарантирующего дисциплину программирования не приходит сразу.
    До того как Древний Рим создал свою армию с жесткой дисциплиной, тысячи лет велись войны и существовали большие армии без какой бы то ни бы ло базы формальной дисциплины, осуществлявшие вполне успешные миссии.

    Тот период в котором мы с вами живем - взрывной рост возможностей компьютеров, дешевая и доступная память огромного обьема, многоядерные процессоры - все это приведет к коренным изменениям в программировании, и очень быстро. Но опять таки - быстро в масштабе истории программировнаия. Для нас с вами этот процесс растянется на десятилетия.

    Это как время когда появились первые машины или первые самолеты. Скажи кому нибудь тогда что лошадь навсегда сойдет с транспортной сцены - и вас бы засмеяли.


    № 1216   15-09-2006 10:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1212« (bb)
    ___________________________
    Дисциплина программирования это прежде всего парадигма, на основе которой строятся программы.
    То есть ОО или ФП. Что дает то и другое повторяться смысла нет.
    В кратце - это возможность увеличивать сложность программы, без потери контроля над ее кодом, без взрывного увеличения количества багов, с сохранением возможности этот код читать, понимать и соответственно менять, не только самим создателям но и новой команде.
    При этом использование ОО или смешанного императивно-функционального языка гарантии следования выбранной парадигме не дает. Всегда есть возможность скатывания к процедурщине, и как вы все из своего опыта знаете, ни один проект не избежал такой участи. Чем сложнее система, чем больше разношерстного народу в ее создании учавствует, тем больше в этой системе "спагетти" кода. Вплоть до того что на определенном этапе, что либо исправить в этой системе становится невозможным, и ее просто переписывают с нуля, начинается жизнь новой программы.

    А вот чистый ФП как я уже говорил - дает гарантии что независимо от того кто пишет код, этот код будет отвечать определенным требованиям - абстракции и инкапсуляции.
    Согласитесь для больших проектов это достаточно важный выигрыш, чтобы рассмотреть вопрос о переходе на чистый ФЯ.


    № 1215   15-09-2006 05:24 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1214« (Geniepro)
    ___________________________

    Первые версии Лиспа были чистыми в функциональном смысле

    ИМХО, не были. В "LISP 1.5 Programmer's Manual" уже упомянуты rplaca, rplacd, conc, nconc.


    № 1214   15-09-2006 04:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1210« (Jack Of Shadows)
    ___________________________

    Ну, не знаю, не знаю... Мир программистов раз за разом отказывался от функционального стиля мышления...

    В Алголе-60 была возможность ленивых вычисления (с помощью передачи параметров по имени) - и эту возможность практически все сочли ошибкой разработчиков языка, и в трансляторах практически не реализовывали...

    Первые версии Лиспа были чистыми в функциональном смысле - а сейчас и Лисп, и Scheme - насквозь императивны и обьектно-ориентированны...

    В 1985 году разработали язык SISAL (Stream and Iteration in a Single Assignment Language) - параллельный функциональный язык со статической типизацией и строгой семантикой. Программы на SISAL'е по быстродействию превосходили аналогичные на Си и Фортране чуть ли не в пять раз (по утверждению разработчиков компилятора SISAL'а osc)... В 1997 году проект SISAL был закрыт и практически забыт...
    http://www.cs.utexas.edu/users/browne/cs392cf2001/papers/Sisal.pdf
    http://www.linuxjournal.com/node/4383/print

    То есть постоянно программисты отбрыкивались от ФЯ - толи из-за лени, толи ещё по каким-то причинам...

    Правда, сейчас в игру вступил супертяжеловес Майкрософт (ну прям отче наш :-)) - может быть ситуация и изменится?..

    Поживём - увидим, если доживём до того светлого будущего... :-))

    А пока что, действительно, программеры-функциональщики собираются в мелкие сообщества - но ведь в открытые!
    Это не касты, а секты... :-)) (Христианство тоже когда-то было лишь сектой...)
    Скоро, скоро грянет функциональный "New Age", и надо быть к нему готовым... ;-)


    № 1213   15-09-2006 02:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1210« (Jack Of Shadows)
    ___________________________

    Поправка: моя реплика »сообщение 1212« была ответом на »сообщение 1210« (Jack Of Shadows).


    <<<... | 1232—1223 | 1222—1213 | 1212—1203 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 429


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования