Ответ 1
Это (длинное, но очень хорошее) видео дает как ввод F #, так и убедительную демонстрацию того, насколько легко распараллелить код на языке:
Мне немного надоело писать код для многоядерности, если я хочу больше скорости, особенно когда я просто пишу одноразовый script. У моего dev-бокса уже есть 8 ядер, и это число растет намного быстрее, чем тактовая частота. Функциональные языки, похоже, предлагают потенциальный выходной люк, но я еще не предпринял попыток освоить один из них.
Мне бы хотелось увидеть некоторые фрагменты кода реального мира, которые намного лучше и/или более параллельны, чем нефункциональные альтернативы. Я не придирчивый к языку - меня больше интересуют понятия.
Спасибо!
Это (длинное, но очень хорошее) видео дает как ввод F #, так и убедительную демонстрацию того, насколько легко распараллелить код на языке:
Как насчет MapReduce? Он невероятно параллелизуется и даже несмотря на то, что он не реализован на функциональных языках, насколько это касается бумаги, она вдохновлена Lisp map
и reduce
.
Ваш вопрос требует материального права на уровне техники. Я думаю, что ваше лучшее введение в эту область, с примерами, - это книга Неявное параллельное программирование в pH от Nikhil и Arvind.
В расширенном примере текстового индексатора/искателя, использующего mapreduce в главе 20 ( "Программирование многоядерных процессоров" ) Программирование Erlang, Я не знаю, насколько впечатляюще это, но похоже, что смертные кода могут писать.
LINQ - хороший пример функционального программирования на основных языках. Обоснованный код и монады? В MY С#?:) В любом случае, w.r.t. threading, там упоминается Parallel LINQ. Используя функции неизменности и более высокого порядка (и, возможно, выражение), библиотеки могут распараллелить нам вещи.
И еще одна ссылка на F # с асинхронные рабочие процессы. Какая впечатляющая возможность использовать код синхронизации, и с помощью нескольких небольших аннотаций превращает его в асинхронный код. Код сохраняет много необходимых качеств. Вам не нужно полностью менять вещи, чтобы воспользоваться этим; компилятор через все обрабатывает.
Чисто функциональные структуры данных (длинный PDF), Крис Окасаки.
Мой учитель шутил, что самым большим примером функционального кода является код, который не написан.