Масштабирование в функциональном программировании - PullRequest
3 голосов
/ 10 июля 2011

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

Ответы [ 3 ]

3 голосов
/ 10 июля 2011

От кого вы слышали это, скорее всего, ссылался на тот факт, что «Запрещение побочных эффектов обеспечивает прозрачность ссылок, что упрощает проверку, оптимизацию и распараллеливание программ и упрощает написание автоматических инструментов». выполнить эти задачи. "

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

int a;
void increment_a() {
    a++;
}

и

int increment(int a) {
    return a+1;
}

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

2 голосов
/ 10 июля 2011

Выбор языка программирования не влияет на то, насколько хорошо программа масштабируется.Это функция дизайна программы.Хорошо разработанная C-программа может хорошо масштабироваться (при условии, что это цель проектирования), а плохо спроектированный Erlang может очень плохо масштабироваться.

Если это правда, я бы предположил, что на работе могут быть три фактора:

  1. Функциональные программы имеют функции, облегчающие разработку программ с учетом масштабируемости.Возможно, но я не работал над масштабным проектом, поэтому не могу сказать точно.По крайней мере, в Haskell чистота лежит в основе большинства функций, которые люди используют для разработки крупномасштабных программ, таких как Software Transactional Memory .Но большинство функциональных языков не являются чистыми.

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

  3. Функциональные языки, как правило, являются полигоном для тестирования новых языковых структур, моделей программирования и т. Д.у них может быть больше встроенных вещей для решения проблем масштаба.Я, конечно, думаю, что это является частью успеха Erlang: основной язык и библиотеки имеют отличную поддержку отказоустойчивой распределенной обработки, потому что это является частью цели языка.Таким образом, написание отказоустойчивого распределенного кода может быть относительно простым.Но опять же, это частично относится к Erlang.Те же цели дизайна не были бы верны для Haskell или SML.

0 голосов
/ 10 июля 2011

Учитывая, что пример быстрой сортировки в Haskell не оптимален, у меня есть сомнения.

Конечно, не все розы. C быстрая сортировка использует чрезвычайно гениальный техника, изобретенная Хоаром, посредством чего сортирует массив на месте; то есть, без использования дополнительного хранилища. Как В результате он работает быстро, и в небольшое количество памяти. По сравнению, программа Haskell выделяет довольно много дополнительной памяти за кулисами, и работает довольно медленно, чем С программа.

Эти гениальные методы обычно определяют, насколько хорошо масштабируется приложение. Вот еще одна интересная статья о функциональном программировании .

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