Spec-Zone.ru › Haskell 7

System.Mem.StableName

Авторские права (c) Университет Глазго 2001
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддержка libraries@haskell.org
Стабильность экспериментальная
Переносимость непереносимая
Безопасный Haskell Надёжный
Язык Haskell2010

Содержание

  • Стабильные имена

Описание

Стабильные имена — это способ выполнения быстрого (O(1)), не совсем точного сравнения объектов.

Стабильные имена решают следующую проблему: предположим, вы хотите создать хеш-таблицу с объектами Haskell в качестве ключей, но хотите использовать равенство указателей для сравнения; возможно, потому что ключи большие, а хеширование медленное, или, может быть, потому что ключи бесконечны по размеру. Мы не можем создать хеш-таблицу, используя адрес объекта в качестве ключа, потому что объекты перемещаются сборщиком мусора, что означает необходимость перехеширования после каждого сбора мусора.

Стабильные имена

data StableName a Источник

Абстрактное имя объекта, поддерживающее равенство и хеширование.

Стабильные имена обладают следующим свойством:

  • Если sn1 :: StableName и sn2 :: StableName и sn1 == sn2 , то sn1 и sn2 были созданы вызовами makeStableName над одним и тем же объектом.

Обратное не обязательно верно: если два стабильных имени не равны, то объекты, которые они обозначают, все равно могут быть равны. Обратите особое внимание на то, что mkStableName может вернуть другое StableName после оценки объекта.

Стабильные имена похожи на стабильные указатели (Foreign.StablePtr), но отличаются следующим образом:

  • Нет операции freeStableName, в отличие от Foreign.StablePtr. Стабильные имена освобождаются системой выполнения, когда они больше не нужны.
  • Нет операции deRefStableName. Вы не можете получить обратно исходный объект Haskell из стабильного имени. Причина в том, что существование стабильного имени для объекта не гарантирует существование самого объекта; он все еще может быть удален сборщиком мусора.

Примеры

Eq (StableName a)

makeStableName :: a -> IO (StableName a) Источник

Создаёт стабильное имя для произвольного объекта. Объект, переданный в качестве первого аргумента, не оценивается при создании стабильного имени.

hashStableName :: StableName a -> Int Источник

Преобразует стабильное имя в целое число. Возвращаемое целое число не обязательно уникально; несколько стабильных имён могут соответствовать одному целому числу (на практике, однако, вероятность этого невелика, поэтому результат преобразования в целое число хорошо подходит в качестве хеш-ключа).

eqStableName :: StableName a -> StableName b -> Bool Источник

Операция равенства для стабильных имён, которая не требует, чтобы типы аргументов совпадали.

С версии: 4.7.0.0

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/System-Mem-StableName.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API