Функциональные языки с параллельными сборщиками мусора?
Новый язык программирования Microsoft F# обеспечивает мощную комбинацию функционального программирования (первоклассные лексические замыкания и хвостовые вызовы) с эффективным параллельным сборщиком мусора, который позволяет легко использовать многоядерные.
OCaml, Haskell, Erlang и все бесплатные реализации Lisp и Scheme, о которых я знаю, не имеют одновременных GC. У Scala и Clojure есть параллельный GC, но нет хвостовых вызовов.
Так что, похоже, не существует языков программирования с открытым исходным кодом, которые бы объединяли эти функции. Это верно?
5 ответов
У Erlang есть модель без общего доступа, где у каждого процесса есть свой сборщик мусора. Считаете ли вы, что это не параллелизм или нет, решать вам. Но это, конечно, очень хорошо масштабируется, так как количество процессов растет.
Последняя версия GHC поддерживает параллельный GC. Смотрите примечания к выпуску.
Scala имеет некоторую оптимизацию хвостовой рекурсии. Но получите схему SISC для полной вещи.
Не совсем ответ на ваш вопрос, но, насколько мне известно, F# использует стандартный сборщик мусора.NET, который не является параллельным; все потоки останавливаются во время GC.
Редактировать: моя ошибка, есть одновременный сборщик мусора в многопроцессорном режиме.
Java предположительно добавляет хвостовые вызовы. Когда это произойдет, clojure получит их. А пока вы можете получить их вручную с помощью механизма loop/recur.