Функциональные языки с параллельными сборщиками мусора? - PullRequest
4 голосов
/ 10 ноября 2008

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

OCaml, Haskell, Erlang и все бесплатные реализации Lisp и Scheme, о которых я знаю, не имеют одновременных сборщиков мусора. У Scala и Clojure есть параллельный GC, но нет хвостовых вызовов.

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

Ответы [ 5 ]

7 голосов
/ 03 декабря 2009

У Erlang есть модель без общего доступа, где каждый процесс имеет свой собственный сборщик мусора . Считаете ли вы, что это не параллелизм или нет, решать вам. Но он, безусловно, очень хорошо масштабируется, так как число процессов увеличивается.

4 голосов
/ 10 ноября 2008

Последняя версия GHC поддерживает параллельный GC. См. заметки о выпуске .

3 голосов
/ 11 ноября 2008

Scala имеет некоторую оптимизацию хвостовой рекурсии. Но получите полную схему SISC .

0 голосов
/ 10 ноября 2008

Java предположительно добавляет хвостовые вызовы. Когда это произойдет, clojure получит их. А пока вы можете получить их вручную с помощью механизма loop / recur.

0 голосов
/ 10 ноября 2008

Не совсем ответ на ваш вопрос, но, насколько мне известно, F # использует стандартный сборщик мусора .NET, который не является параллельным; все потоки останавливаются во время GC.

Редактировать: моя ошибка, есть одновременный сборщик мусора в многопроцессорном режиме.

...