В чем разница между 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