Я думаю, что дерьмо, окружающее функциональные языки, является самой большой проблемой в функциональном программировании.Когда я начал использовать функциональное программирование в гневе, для меня было большим препятствием понять, почему многие из высокоразвитых аргументов, выдвинутых сообществом Lisp (например, о макросах и гомо-синоническом синтаксисе), были неправильными. Сегодня я вижу, что многие люди обманываются сообществом Хаскелла в отношении параллельного программирования.
В самом деле, вы не должны смотреть дальше, чем это очень нитку, чтобы увидеть некоторые из них:
«В целом эксперты не имеют никаких трудностей писать быстро функциональные программы, а на самом деле некоторые из лучших -переходящие параллельные программы на 8- и 16-ядерные процессоры теперь написаны в Haskell ».
заявление, как это может дать вам впечатление, что экспертам выбрать Haskell, потому что это может быть так хорошо для параллельности, но истина заключается в том, что производительность в Haskell сосет и миф, что Haskell хорош для многожильной параллельности увековечен исследователями Haskell с мало что знают о параллелизме, которые избегают реального обзора коллег, публикуя только в зоне комфорта журналов и конференций под контролем своей собственной клики. Haskell невидим в реальном параллельном/многоядерном/HPC в реальном мире именно потому, что он сосет при параллельном программировании.
В частности, реальная проблема в многоядерном программировании использует преимущества кэшей CPU, чтобы убедиться, что ядра не являются голодными данными, проблема, которая никогда не рассматривалась в контексте Haskell. Группа Чарльза Лейзерсона в MIT отлично справилась с этой проблемой и решила эту проблему, используя собственный язык Cilk, который стал основой параллельного программирования в реальном мире для мультикодов как в Intel TBB, так и в Microsoft TPL в .NET 4. Существует превосходное описание того, как этот метод можно использовать для написания элегантного высокого уровня императивного кода, который компилируется для масштабируемого высокопроизводительного кода в бумаге 2008 года The cache complexity of multithreaded cache oblivious algorithms. Я объяснил это в my review некоторых из современных исследований Parallel Haskell.
Это оставляет большой знак вопроса над чисто функциональной парадигмой программирования. Это цена, которую вы платите за абстрагирование времени и пространства, что всегда было главной мотивацией этой декларативной парадигмы.
EDIT: Texas Multicore Technologies have also recently found Haskell to be underwhelming in the context of multicore parallelism.
Сообщество wiki. –
«Ловушки объектно-ориентированного программирования» - это не CW после 1800 просмотров. (не пытайтесь быть грубым, просто сравнивая вопросы. Может быть, оба должны быть CW.: D) –
У этого есть субъективный тег, но ответы, которые я видел до сих пор, были довольно объективными. Я могу удалить субъективный тег. – Brian