Какие впечатляющие примеры функционального кода? - PullRequest
10 голосов
/ 08 февраля 2009

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

Мне бы хотелось увидеть некоторые примеры кода реального мира, которые намного лучше и / или более распараллеливаемы, чем нефункциональные альтернативы. Я не придирчив к языку - меня больше интересуют концепции.

Спасибо!

Ответы [ 7 ]

6 голосов
/ 08 февраля 2009

Как насчет MapReduce ? Он невероятно распараллелен и, несмотря на то, что он не реализован в функциональных языках, как говорится в статье, он вдохновлен Lisp map и reduce.

4 голосов
/ 08 февраля 2009

Это (длинное, но очень хорошее) видео дает как введение к F # , так и убедительную демонстрацию того, как легко распараллелить код на языке:

http://channel9.msdn.com/pdc2008/TL11/

2 голосов
/ 08 февраля 2009

Ваш вопрос требует материального права на современном уровне техники. Я думаю, что вашим лучшим введением в эту область, с примерами, является книга Nikhil and Arvind Неявное параллельное программирование при pH .

1 голос
/ 09 февраля 2009

LINQ - хороший пример функционального программирования на основных языках. Уточненный код и монады? В МОЕМ С #? :) В любом случае, w.r.t. есть упоминание о Parallel LINQ . Используя неизменяемость и функции более высокого порядка (и, возможно, Expression), библиотеки могут распараллеливать вещи для нас.

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

1 голос
/ 08 февраля 2009

Расширенный пример текстового индексатора / поисковика, использующего mapreduce в главе 20 («Программирование многоядерных процессоров») Программирование Erlang . Я не знаю, насколько это впечатляюще, но похоже, что смертные могут писать код.

0 голосов
/ 09 февраля 2009

Мой учитель шутил, что лучший пример функционального кода - это код, который не написан.

0 голосов
/ 09 февраля 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...