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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 3012—3003 | 3002—2993 | 2992—2983 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 251


    № 3002   15-09-2007 16:50 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2998« (Geniepro)
    ___________________________
    Раз уж речь зашла о проникновении ФП в mainstream языки.
    Анонимные функции в java 5


    new FunctionIII()
    {
        public int invoke(int x,int y)
        {
            return x+y;
        }

    }



    Анонимные функции в java 7


    {int x,int y => x+y}



    Прогресс однако. Вопрос только уложатся ли в пятилетку ? :))


    № 3001   15-09-2007 16:43 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 3000« (Илья Ермаков)
    ___________________________
    Свойство ФП, позволяющее легко и даже автоматически распараллеливать алгоритм, это чистота функции.
    Да но как же писать программы при помощи только чистых функций ? Ведь как то же состоянием надо оперировать ?
    Задумавшись над необходимым для этого механизмом, вы рано или поздно приходите к идее higher order functions (HOF). То есть создавать на лету функции, передавая их как параметры в другие функции, возвращая их как результат, чтобы передать дальше итд, создавая таким образом цепочку действий, цепочку превращений данных.
    Для того чтобы этот механиз был удобным и практичным, очень важно иметь легкий синтаксис создания функций на лету, то есть анонимных функций. Ведь если HOF (higher order functions) это единственный фундаментальный механизм на который вы будете опираться, то есть использовать его практически в каждой строчке программы, то наверное важно чтобы это по крайней мере было легко делать.

    Сравните синтаксис анонимных функций лиспа (scheme), haskell и java:


    Scheme: (lambda (x y) (+ x y))

    Haskell: \x y -> x+y

    Java 5:
    new FunctionIII()
    {
        public int invoke(int x,int y)
        {
            return x+y;
        }

    }



    Сразу видно какой язык приспособлен для такой методики, а какой нет.

    Идем дальше. Ну хорошо, получили вы свой механизм "нанизывания бусинок" то есть HOF, начинаете строить программу.
    И тут очень быстро выясняется что подавляющее большинство операций укладывается в три станлартных действия.
    map - прогон одной функции по списку значений с возвращением списка результатов.
    fold - прогон одной функции по списку значений с возвращением конечного (одного) результата
    filter - прогон одной функции по списку значений с возвращением другого, отфильтрованного списка результатов.

    Все остальное это различные комбинации этих трех кирпичиков.

    То есть к "функционально-математическим абстракциям" вы приходите сами. Их вам никто не навязывает.
    Это естественное и логическое развитие практики ФП.


    № 3000   15-09-2007 16:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    А вот если подумать...

    Насколько связаны ли между собой две стороны ФП - функциональное описание вычислений (и все сопутствующие абстракции) - и идея локализации и контроля над изменением состояния системы (т.е. то, что позволяет говорить о лёгком распараллеливании)?
    Т.е. возможно ли "ФП без доминирования функционально-математических абстракций". Такой вот провокационный вопрос к господам функциональщикам :-)


    № 2999   Удалено модератором


    № 2998   15-09-2007 14:33 Ответить на это сообщение Ответить на это сообщение с цитированием
    Исследования в области ФП всё больше и больше проникают в мейнстримные языки!

    Вот, например, в Майкрософте три группы исследователей и разработчиков (из Microsoft Research, команды CLR и команды платформы параллельных вычислений) разработали библиотеку распараллеливания заданий TPL для C# и прочих языков платформы .NET. Эта библиотека, главный компонент библиотеки Parallel FX, позволяет с очень небольшими модификациями кода хорошо распараллеливать циклы и заметно ускорять работу программ на многоядерных системах.

    Очень показательный пример - трассировка лучей (Ray Tracing). Путём небольшой модификации одного цикла:

    void Render(Scene scene, Color[,] rgb)
    {
      for (int y = 0; y < screenHeight; y++)
      {
        for (int x = 0; x < screenWidth; x++) {
          rgb[x,y] = TraceRay(new Ray(scene,x,y));
        }

      }
    }

    заменяя этот цикл на вызов процедуры с передачей ей тела цикла в качестве делегата:

    void Render(Scene scene, Color[,] rgb)

      Parallel.For(0, screenHeight, delegate(int y)
      {
        for (int x = 0; x < screenWidth; x++) {
          rgb[x,y] = TraceRay(new Ray(scene,x,y));
        }

      });
    }

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

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

    Подробнее об этой библиотеке можно прочесть в статье известного хаскеллера Даана Лейжена (Daan Leijen) из Microsoft Research и Джада Холла (Judd Hall) из Microsoft:
    Параллельная производительность: Оптимизация управляемого кода для многоядерных компьютеров


    № 2997   14-09-2007 14:15 Ответить на это сообщение Ответить на это сообщение с цитированием
    Группа энтузиастов (пока из двух человек: IvanVeselov aka dying_sphynx и я, и вроде ещё двое желающих есть) решили открыть свой вики-сайтик, посвящённый решению задачек из культового учебника по программированию "Структура и интерпретация компьютерных программ" (SICP).
    Решения задач будут на языках Scheme, Haskell, Oberon/Component Pascal (на их общем подмножестве), возможно ещё на каких-нибудь...

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


    № 2996   Удалено модератором


    № 2995   14-09-2007 11:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2994« (Marduk)
    ___________________________
    Господин хороший. Хаскель и лисп это для очень и очень немногих. Для большинства это delphi или vb. Ну или java csharp в лучшем случае.
    Вас никто на этот поезд не зовет. Здесь мест очень мало, и они все заняты.
    Идите на другой перон.


    № 2994   14-09-2007 10:25 Ответить на это сообщение Ответить на это сообщение с цитированием

    Потрясающее сообщение от администратора тестов Great Language Shootout.
    http://www.haskell.org//pipermail/haskell/2006-June/018127.html
    Он сообщает что хаскель, появившись в линейке тестируемых языков, из за свое ленивой природы настолько стал обгонять все остальные языки по скорости в тестах, что ему пришлось многие тесты переделать, чтобы обмануть черезчур умный компилятор хаскеля. Но даже переделки тестов, НАМЕРЕННО ставящие хаскель в невыгодное по отношению к обычным языкам положение, отбросили хаскель ненадолго. Последние изменения в компиляторе (версия 6.6) а также в библиотеках (ByteString) опять вывели хаскель на лидирующие позиции во многих тестах.

    Подумать только, на какие ухищрения приходится идти для поддержания слабеющего реноме императивных языков :))

    Ну дак я сейчас тоже скажу потрясающее сообщение:
    Оказывается в результате моих тестов VisualBasic  настолько стал обгонять все остальные языки по скорости в тестах, что мне пришлось  многие тесты переделать, чтобы обмануть череcчур умный интерпетатор VB.
    А теперь докажите обратное :)))


    № 2993   14-09-2007 10:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    Я конечно извиняюсь, но интересно- это что за железнодорожный вокзал у нас? Постоянно какие-то поезда уходят.
    То на .NET, то все едут на Visual Studio, теперь вот Haskell надо срочно учить, а то поезд опять отправляется. Ну что за бред. Может хватит уже пропаганды?


    <<<... | 3012—3003 | 3002—2993 | 2992—2983 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 251


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

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

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

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

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

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