В чем разница между Core_kernel.Heap и Core_kernel.FHeap?

В библиотеке Core_kernel Джейн Стрит есть две реализации кучи, основанные на связке кучи:

Модуль Core_kernel.Heap

Реализация кучи на основе спаривания-кучи.

( документы)

Модуль Core_kernel.Fheap

Функциональные кучи (реализованы как кучи сопряжения).

( документы)

Из описаний мне не понятно, в чем разница между ними. Когда я буду использовать один или другой?

1 ответ

Решение

Разница заключается в слове "функционал" во второй цитате: Heap является императивной реализацией, что также можно увидеть по подписи, например, add функция:

val add : 'a t ‑> 'a ‑> Core_kernel__.Import.unit

который возвращается unitи модифицирует на месте существующую кучу.

С другой стороны FHeap является функциональным, это означает, что такие операции, как добавление, будут создавать новые объекты, оставляя исходный без изменений: в этом случае подпись для добавления

val add : 'a t ‑> 'a ‑> 'a t
Другие вопросы по тегам