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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 442—433 | 432—423 | 422—413 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 508


    № 432   18-07-2006 08:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 431« (Сергей Перовский)
    ___________________________
    Ой, бросьте. Для серьезных математиков. Что ж там более математического, чем в OCAML? Придурковатый стиль записи?
    Серьезный математик может работать даже на Фортране (учитывая огромное количество библиотек, сделанных на нем за многие годы)


    № 431   18-07-2006 08:14 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 429« (Jack Of Shadows)
    ___________________________
    >>>Лисп - это язык для хороших программистов.
    А кто говорил, что Лисп ближе к человеческому мышлению?
    Может быть Лисп - это язык для серьезных математиков?
    Уж очень высокая требуется дисциплина мышления.


    № 430   18-07-2006 07:55 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 429« (Jack Of Shadows)
    ___________________________
    Ув. Jack of Shadows! Дело в том, что посредственность – она и в Лиспе посредственность. А хороший язык, даже не язык, а система программирования, должен быть доступен как посредственностям, так и гениям. (Кстати, Вы там приводили высказывания создателей Java и .Net о посредственностях. А Билл Гейтс, случайно, нигде не признавался, что он антихрист?) Вы пытаетсь изобразить горе Лиспа от его большого ума. А у меня не вызывают приятных ассоциаций попытки расхваливать Лисп и призывать неофитов от программирования бросать всё (в данном случае ООП) и задрав штаны мчаться за комсомолом, пардон, Лиспом. Уже говорит о многом тот факт, что в логическом программировании с начала 70-х годов доминирует Пролог и похожие на него производные, а в ФП наплодили кучу разных языков, начиная с пронафталиненого старья 50-х (да-да, это я о Лиспе) и заканчивая Хаскелем, OCAML и т.п. и т.д. Это я о том, что IMHO развитие ФЯ - это стремление к более выразительной и краткой записи рекурсивных сущностей. Конечно, я несколько упрощаю, но основной момент, кажется, я уловил. Уж если кто-то хочет писать кипятком от ФП, то лучше было обратить внимание на OCAML (F#). Программы написанные на нем по производительности могут сравниться с сишными, и он довольно выразителен. В нем также можно использовать императивный стиль, там где декларативный по объективным причинам неудобен (впрочем, в вашем нафталинном собрании глупых скобок эта возможность тоже есть). Вообще, мне кажется, что в будущем произойдет конвергенция ООП и ФЯ. Я не говорю, что ФЯ – это плохо. Только, ничего особенно революционного я в нем не вижу. Основная выгода от ФЯ – это краткость записи, но, к сожалению, не всегда наглядность, как бы кто не утверждал. Бывают случаи, когда в функциональный код, особенно написанный не тобой, вникаешь очень долго.


    № 429   17-07-2006 11:20 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 427« (Артем)
    ___________________________
    Артем, вы прочитали всю дискуссию. Поэтому повторяться мне нет смысла.
    Я привел большое количество примеров мощности лиспа и его возможностей.
    Это кстати не только мое личное мнение но и мнение всех кто работал на лиспе профессионально, то есть не hello world написать, а более менее сложную задачу.
    Это также мнение самого создателя java Гослинга, который сказал о java:
    "Создавая java мы не охотились за лисперами, мы охотились за сишниками, мы пытались вытянуть сишников хотя бы на пол пути к лиспу."

    Еще он сказал о java что "это язык для посредственных программистов".

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

    О сишарп кстати его создатели говорят практически то же самое. Почитатйте статью про "Морта и Энштейна".
    Где, создатели сишарп говорят, что ориентируются прежде всего на посредственностей.

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

    Я не испытываю никаких иллюзий по поводу "завоевания мира" лиспом. Как я уже говорил, далеко не все смогут понять лисп и вообще ФП.

    И эта ветка именно для тех кто чувствует что заточенные длы посредственностей инструменты, не дают им возможности расти в профессиональном плане как программисту.

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

    Что касается "много идиотских скобок" - то это говорит о том насколько вы далеки от понимания лиспа.
    Как великолепно сказал кто то на одном из лисп форумов на вопрос "Когда я стану хорошим лиспером" - "Когда перестанете видеть скобки" :)))




    № 428   17-07-2006 10:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 427« (Артем)
    ___________________________
    >>>А за Лисп не садитесь – разочаруетесь.  Это очередной неудачный претендент на серебряную пулю.
    А мы тут серебряную пулю и не ищем. Уже договорились, что профессиональный программист должен знать SQL для работы с базами данных, Prolog для описания баз знаний и т.д.
    Пытаемся определить место функциональных языков. Давайте без фанатизьму с обоих сторон (сторонников и критиков).
    Пока я для себя уяснил только простоту распаралеливания, что меня пока не очень волнует.
    Пожалуй соглашусь, что передав полностью распределение памяти компьютеру, мы повышаем надежность.
    С близостью к человеческому мышлению не соглашусь. Человеку проще действовать по инструкции (императивной), чем по закону (декларативному).
    По поводу рекурсии. В шестидесятые годы было написано много научных трудов на тему автоматического преобразования рекурсии в цикл. Думаю, что высокая скорость и нетребовательность к ресурсам лиспа на НЕКОТОРЫХ рекурсивных задачах определяется именно успехами на этом пути. Прояснить эту проблему можно на задачах с нелинейной рекурсией - например вычисление чисел Фибоначи.


    № 427   17-07-2006 07:06 Ответить на это сообщение Ответить на это сообщение с цитированием
    Уф… Прочитал ВСЮ вашу дискуссию. Интересно и познавательно. Еще раз убедился, что я не ошибался по поводу функционального программирования. Прошу прощения у инициатора этой ветки, но испытывать комплексы по поводу неиспользования Лиспа я не буду. IMHO, Jack of Shadows просто должен был сказать, что ему очень нравится программировать на Лиспе и почему, а не что Лисп круче всех, а все остальное – плохо. В этом обсуждении не было приведено НИ ОДНОГО стоящего аргумента, доказывающего принципиальное превосходство ФП над ИП.
    Да, реализация рекурсивных алгоритмов в ИП несколько более многословна, однако она и более гибка. Мало того, здесь не упоминалось о чудесных возможностях ООП, в частности о наследовании и применении его к рекурсивным методам. На единственный аргумент Jack of Shadows о переполнении стека в Delphi при вызове какой либо функции 10000000 раз, на который по-моему не было приведено правильного контраргумента, я могу ответить, что размер стека в Delphi настраивается ( {$MAXSTACKSIZE number} ). Да,  и еще про аналог map функции в ИП забыли сказать. Его можно даже не реализовывать через наследование, а напрямую передавать в функцию процедурную переменную и применять ее к нужному объекту. (процедурный тип: TMyFunc=procedure(myObject:TMyType); …  – function MyFunc(a:MyArray; f:TMyFunc) ).

    IMHO, Jack of Shadows просто слишком увлекся необычность пограммирования на Лиспе и краткость записи некоторых алгоритмов (повторюсь, некоторых, но не всех). Если он решит сделать на Лиспе по-настоящему крупный проект (который можно продать), то вопросы навигации по проекту, отладки, модульности и полиморфизма испортят ему настроение. ;)
    ФП – это просто удобный и краткий способ записи рекурсивных алгоритмов. В нем нет тех уникальных качеств, которые дает логическое программирование и нет принципильных преимущества перед ИП (зато есть недостатки).
    Если кому-то очень хочется елементов ФП, подождите выхода C# 3.0 и будет вам счастье :) А за Лисп не садитесь – разочаруетесь.  Это очередной неудачный претендент на серебряную пулю. Увы, нет совершенства в этом мире…

    P.S. По-моему, данное обсуждение пора закрывать ;)



    № 426   17-07-2006 04:04 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 406« (Jack Of Shadows)
    ___________________________
    В одном из предыдущих пунктов Вы написали, что Лисп мощнее чем Java и .Net вместе взятые. Ну, это, извините, детский сад какой-то. Мама, кто сильнее, трактор или самолет? :)


    № 425   17-07-2006 03:42 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 424« (Jack Of Shadows)
    ___________________________
    Безусловно, Prolog должен использоваться в связке с другими языками (что я и делаю).
    Он обладает уникальными свойствами, которых нет ни в императивных, ни в функциональных языках. Поэтому давайте в этом обсуждении пропоём дифирамбы не только Лиспу, но и Прологу.  :)

    Теперь о Лиспе. При чтении этого обсуждения у меня сложилось впечатление, что Вы призываете всех перейти на Лисп. Что Лисп – это эдакий "Бог в машине", который может все и, при этом, на котором очень легко писать. Насчет "может все" я промолчу. А насчет "легко писать" – так Вы, по-моему, ошибаетесь. Первая шпилька насчет LISP – “Lost in Stupid Parenthesis”. :)  Как по мне, OCAML гораздо выразительнее. А этот безумный лисповый текст с кошмарным количеством скобок – жуть. Но даже в OCAML для записи какого-нибудь алгоритма мне приходилось тратить гораздо больше времени, чем в Delphi или C#. Да, в результате текст программы мог получиться гораздо меньше. В некоторых случаях - просто вершины лапидарности. Но вот усилий для написания – уйма. Что бы Вы не говорили, а человеческой психике свойственна именно императивность. Поэтому именно императивные языки и забили декларативные.
    Учтем еще, что за долгие годы для ООП реализованы мощнейшие средства, облегчающие разработку крупных проектов.
    Я считаю, что просто так переходить на функциональные языки не стоит. Повторяю, в отличие от Пролога, я не вижу в функциональных языках задач, которые я не могу решить с помощью императивного программирования.


    № 424   17-07-2006 02:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 422« (Артем)
    ___________________________
    А теперь попробуйте написать это же на функциональном языке.
    И не подумаю! :)) Зачем, если для этого есть такой прекрасный инструмент как Пролог.
    Кстати я использую Пролог в качестве backward chaining rule engine.
    Однако логические языки по моему не являются полноценными языками программирования.
    Скорее это специфические инструменты, идеально подходящие для решения определенного круга задач.

    Если помните в 80 годы был такой бум на Искусственный Интеллект. Многие предрекали что все языки вымрут, и останутся только логические языки типа Пролог (backward chaning) и OPS, CLIPS (forward chanining)
    У меня даже курсовой проект был на ОPS :))

    Однако время все расставило на свои места. Надежды на революцию в программировании развалились как песочный замок. Вместе с ними кануло в лету громкое название ИИ. И теперь все эти технологии называются скромно - rule engines. По русски "движки правил" будет конечно топорно звучать. Думаю наиболее близкий по значению термин - Базы Знаний. И также как sql никто не считает отдельным языком программирования, а только языком описания и манипулирования в Базах Данных, так и пролог является языком описания и манипулирования в Базах Знаний.

    Так вот как специфический инструмент, а не как отдельный самостоятельный язык, я думаю пролог должен присутствовать во всех языках общего назначения. Как например это сделано в лиспе.
    Например 2 наиболее известных коммерческих лиспах - ACL и lispworks поставляются с встроенным прологом.
    А для opensource лиспов реализация пролога дана в книге Питера Норвига "Paradigms of Artificial Intelligence Programming"

    Или в книге Пола Грехема "On Lisp"

    Вот кстати как будет выглядеть на лисповом прологе задача Энштейна:


    (deflogic %einstein "einstein/2")

    (prolog '(%assert (%-
                      (%einstein ?h ?f)
                      (%and
                        (%= ?h ((%house norwegian ?_ ?_ ?_ ?_)
                                ?_
                                (%house ?_ ?_ ?_ milk ?) ?_ ?_))
                        (%member (%house british ?_ ?_ ?_ red) ?h)
                        (%member (%house swedish dog ?_ ?_ ?_) ?h)
                        (%member (%house danish ?_ ?_ tea ?_) ?h)
                        (%iright (%house ?_ ?_ ?_ ?_ green)
                                (%house ?_ ?_ ?_ ?_ white) ?h)
                        (%member (%house ?_ ?_ ?_ coffee green) ?h)
                        (%member (%house ?_ bird pallmall ?_ ?_) ?h)
                        (%member (%house ?_ ?_ dunhill ?_ yellow) ?h)
                        (%nextto (%house ?_ ?_ dunhill ?_ ?_)
                                (%house ?_ horse ?_ ?_ ?_) ?h)
                        (%member (%house ?_ ?_ ?_ milk ?_) ?h)
                        (%nextto (%house ?_ ?_ marlboro ?_ ?_)   
                                (%house ?_ cat ?_ ?_ ?_) ?h)
                        (%nextto (%house ?_ ?_ marlboro ?_ ?_)
                                (%house ?_ ?_ ?_ water ?_) ?h)
                        (%member (%house ?_ ?_ winfield beer ?_) ?h)
                        (%member (%house german ?_ rothmans ?_ ?_) ?h)
                        (%nextto (%house norwegian ?_ ?_ ?_ ?_)
                                (%house ?_ ?_ ?_ ?_ blue) ?h)
                        (%member (%house ?f fish ?_ ?_ ?_) ?h)))))



    № 423   17-07-2006 02:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 421« (panda)
    ___________________________
    В индустрии игр уже давно продолжается застой.
    И в этом виновата процедурная генерация ? Которую до игры Spore никто не использовал ?

    Я всего лишь хотел сказать что "ацтой" игра или нет, не зависит от того какая техника используется для создания графики и звука.
    Более того заявлять не имея никаких данных о совершенно новой технологии что она мол приведет к отстойным играм, это ни на чем не обоснованное утверждение, то есть чушь.


    <<<... | 442—433 | 432—423 | 422—413 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 508


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

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

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

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

    Перейти на конкретную страницу по номеру
      
    Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

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