Spec-Zone.ru › Haskell 8

GHC.StableName

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

Содержание

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

Описание

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

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

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

data StableName a Исходный код

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

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

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

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

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

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

Конструкторы

StableName (StableName# a)
Типы
Детали типов
Eq (StableName a)

С версии: base-2.1

Детали типа

Определено в GHC.StableName

Методы

(==) :: StableName a -> StableName a -> Bool Исходный код

(/=) :: StableName a -> StableName a -> Bool Исходный код

makeStableName :: a -> IO (StableName a) Исходный код

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

hashStableName :: StableName a -> Int Исходный код

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

eqStableName :: StableName a -> StableName b -> Bool Исходный код

Равенство стабильных имён, не требующее соответствия типов аргументов.

С версии: base-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/8.10.2/docs/html/libraries/base-4.14.1.0/GHC-StableName.html

Spec-Zone.ru

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