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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 4222—4213 | 4212—4203 | 4202—4193 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 130


    № 4212   01-04-2008 14:08 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4210« (Lisp Hobbyist)
    ___________________________

    В том-то и дело, что я, например, как раз не одиночка, и единственным шансом для меня применять ФП в работе может стать лишь достаточно широкое его распространение "в массы". Думаю, среди интересующихся ФП таких большинство.
    +1.
    Пока ближайшая возможность заинтересовать коллег проглядывается через .NET (F#, а если сильно повезет, то еще и IronScheme).


    № 4211   01-04-2008 12:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4209« (Сергей Осколков)
    ___________________________
    Я довольно часто использую closures в web программировании.
    Например:


    (dolist (file-name file-list)
      (htm (:tr (:td :align "right" title))
                (:td (:a :href (web-action (log-and-serve file-name access-type)) file-name)
                (:td (fie-size file-name)))))



    Здесь генерируется кусок html, табличка с ссылками на файлы.
    Линк на файл генерирует функция web-action которая принимает функцию, записывает ее в сессию под каким нибудь случайным неповторяющимся набором букв-цифр, и возвращает это название чтобы прописать его в ссылке.
    При этом функция как вы видите оперирует локальными переменными file-name и access-type.
    Вот это и есть closure.



    № 4210   01-04-2008 09:24 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4204« (Jack Of Shadows)
    ___________________________

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

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

    Кстати вчера прикрутил таки clojure к моему java web приложению. Оказалось довольно легко.

    Поздравляю. Но, опять-же, если говорить не о freelance, такая возможность выбора инструмента скорее исключение из правила. Некоторым разработчикам на C++ (к счастью, не мне) корпоративные правила предписывают не использовать boost, который уже является стандартом де-факто. Даже такая открытая к инновациям корпорация, как Google, избегает того же Лиспа (об этом, кажется, писал Erann Gat), хоть при этом не боится создавать новые языки типа MapReduce.



    № 4209   01-04-2008 03:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4208« (Jack Of Shadows)
    ___________________________
    Вообще-то это мой пример только в том отношении, что я его привел, а так  это пример из статьи про Closures в английской Википедии. Но вы правы, я обратил внимание и написал "хорошая штучка" про сочетание array.Filter и анонимной функции в javasript.

    Хотя, авторы статьи, разъясняя этот же пример, написанный на Scheme (а потом замечая, что на javascript - аналогично), пишут, что Closure все равно в этом случае создается и состоит из кода лямбды (в Scheme, а в примере на javascript значит - анонимной функции) и ссылки на переменную threshold, которая является свободной переменной внутри лямбды (анонимной функции в примере javascript).

    Действительно, здесь Closure (замыкание) не покидает пределов области видимости функции, в которой оно создано и не "уносит" переменную с собой, поэтому пример наверное не показывает выгоду использования Closure.

    Я так это понял. ))


    № 4208   30-03-2008 13:00 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4206« (Сергей Осколков)
    ___________________________
    Ну это не closure а просто анонимная функция.
    Closure это когда функция "закрывает" (close) в себе какую то локальную переменную и уносит с собой, запоминает в себе.
    Например если бы в в вашем примере описали в функции bestSellingBooks некую локальную переменную, записали бы в нее некое значение, после чего создали функцию, которая орбащается к этой переменной, и вернули бы эту функцию в качестве результата, то произошла бы интересная вешь.
    Как вы знаете локальные переменные живут только внутри scope в которых они созданы. Функция кончилась, и все локальные переменные уничтожаются.
    Но в нашем случае, локальная переменная, созданная внутри функции bestSellingBooks не уничтожится, а останется внутри closure функции, которую вы вернете в качестве результата.
    Отсюда и название таких функций - closures.

    А тот пример который вы привели его и в обычных языках типа паскаля написать можно.




    № 4207   30-03-2008 05:24 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4206« (Сергей Осколков)
    ___________________________

    Хорошая штучка. ))
    http://habrahabr.ru/blog/javascript/38250.html


    № 4206   30-03-2008 03:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4205« (Geniepro)
    ___________________________
    Почитал после вашего сообщения, что такое closure (замыкание) и с удивлением обнаружил, что оно есть в javascript, на котором я от случая к случаю пишу.
    http://en.wikipedia.org/wiki/Closure_(computer_science)
    (скрипт неправильно обрезает ссылку на скобке, правильный адрес - до конца)


    // Return a list of all books with at least 'threshold' copies sold.
    function bestSellingBooks(threshold) {
      return bookList.filter(
          function(book) { return book.sales >= threshold; }
        );
    }

    Хорошая штучка. ))


    № 4205   30-03-2008 01:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    ФП всё больше проникает в такой мэйнстримище, как С++.
    В С++0x появятся лямбда-функции и замыкания (closures).
    Интересно, что пишет Херб Саттер (отрывок):


    Пример: Печать коллекции в консоль.

    Например, допустим, вы хотите распечатать в консоль всю коллекцию виджетов.

    // Печать коллекции в cout, сегодняшний С++, вариант 1

    for( vector<Widget>::iterator i = w.begin(); i != w.end(); ++i )
      cout << *i << " ";

    Или мы можем воспользоваться тем, что в С++ уже есть специальный тип ostream_iterator, который умеет делать то, что мы хотим:

    // Печать коллекции в cout, сегодняшний С++, вариант 2

    copy( w.begin(), w.end(),
              ostream_iterator<const Widget>( cout, " " ) );

    В С++0х можно просто использовать лямбда-функцию, создаваемую на лету:

    // Печать коллекции в cout, в C++0x:

    for_each( w.begin(), w.end(),
                    []( const Widget& w ) { cout << w << " "; } );


    Примечание. Вариант с лямбдой был единственным, который получился правильным с первой попытки написания!


    Ну вот, скоро на С++ можно будет создавать значительно более надёжный софт, благодаря функциональным возможностям! ;о)


    № 4204   28-03-2008 12:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4203« (Lisp Hobbyist)
    ___________________________
    Все верно. Мы уже говорили о причинах, влияющих на спрос на программистов.
    Индустрии нужна армия программистов-резервистов, а не горстка функциональщиков-ниндзей.
    Поэтому ФП и останутся уделом либо одиночек, либо групп профессионалов, специализирующихся в определенных узких высокотехнологичных нишах (например финансовая система).

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

    Кстати вчера прикрутил таки clojure к моему java web приложению. Оказалось довольно легко.
    Крррасота! Мой java код и clojure работают в единой сессии. Так что я могу добавлять новые модули к уже существуюей программе, на clojure

    Вот вам еще шажок, еще проникновение в самый мейнстрим из мейстримов - web программирование на java.
    А clojure между прочим это всего один jar файл в 350 кб.
    Так что те кому надо могут пропихгуть его в проект как еще одну open source библиотеку :))
    Способы есть, и их становится все больше с каждым днем.




    № 4203   28-03-2008 05:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 4198« (Jack Of Shadows)
    ___________________________

    Почему к сожалению ? ФП никогда не выйдет за пределы 10-15% рынка, по вполне обьективным причинам. Это надо воспринимать нормально, без драматизьму.
    А время сожалений уже прошло. 10% рынка это огого! Это означает что всем кому надо, могут свободно перейти на ФП. Причем на практически всех мейнстрим программных платформах.


    Если говорить о разработчиках-одиночках и стартапах --- может быть, а если о компаниях с устоявшейся технологией и клиентурой --- сомневаюсь. Риски перехода остались, хоть и снижены, а разумный менеджер их наверняка посчитает. Раньше самой весомой причиной было отсутствие инструментов, а теперь ней становится отсутствие подготовленных специалистов. Если начинать проект на ФЯ или на Лиспе, нужно для начала найти компетентных исполнителей. Если на 9 программистов на Java имеется один знаток Haskell, каких специалистов проще найти? Пока владеющих ФЯ будет мало, предпочтение при найме будут отдавать тем, кому легче найти подмогу (или замену, будем реалистами). А отсутствие спроса, в свою очередь, будет тормозить рост количества владеющих ФЯ, и дальше по кругу... И что важнее --- знание ФЯ или знание предметной области? Семеро одного не ждут, писать начнут на том языке, на котором уже может продуктивно работать большинство исполнителей. А опытные исполнители свой опыт приобретать начали лет 10 назад, причем отнюдь не на ФЯ.

    Еще одна причина --- legacy code. Никто не откажется от вложенных десятков человеко-лет.


    <<<... | 4222—4213 | 4212—4203 | 4202—4193 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 130


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

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

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

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

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

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