Spec-Zone.ru › Haskell 8

GHC.Stable

Авторские права (c) The University of Glasgow 1992-2004
Лицензия см. libraries/base/LICENSE
Поддерживающий ffi@haskell.org
Устойчивость внутренняя
Переносимость непереносимая (расширения GHC)
Безопасный Haskell Небезопасный
Язык Haskell2010

Описание

Устойчивые указатели.

data StablePtr a Источник

Устойчивый указатель — это ссылка на выражение Haskell, которое гарантированно не подвержено сбору мусора, т. е. оно не будет удалено и значение самого устойчивого указателя не изменится во время сбора мусора (обычные ссылки могут быть перемещены во время сбора мусора). Следовательно, устойчивые указатели могут передаваться внешнему коду, который может рассматривать их как неявную ссылку на значение Haskell.

Значение типа StablePtr a — это устойчивый указатель на выражение Haskell типа a.

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

StablePtr (StablePtr# a)
Примеры
Подробности примеров
Eq (StablePtr a)

С момента: base-2.1

Подробности примера

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

Методы

== :: StablePtr a -> StablePtr a -> Bool Исходный код

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

Storable (StablePtr a)

С момента: base-2.1

Подробности примера

Определено в Foreign.Storable

Методы

sizeOf :: StablePtr a -> Int Исходный код

alignment :: StablePtr a -> Int Исходный код

peekElemOff :: Ptr (StablePtr a) -> Int -> IO (StablePtr a) Исходный код

pokeElemOff :: Ptr (StablePtr a) -> Int -> StablePtr a -> IO () Исходный код

peekByteOff :: Ptr b -> Int -> IO (StablePtr a) Исходный код

pokeByteOff :: Ptr b -> Int -> StablePtr a -> IO () Исходный код

peek :: Ptr (StablePtr a) -> IO (StablePtr a) Исходный код

poke :: Ptr (StablePtr a) -> StablePtr a -> IO () Исходный код

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

Создайте стабильный указатель, ссылающийся на данное значение Haskell.

deRefStablePtr :: StablePtr a -> IO a Источник

Получите значение Haskell, на которое указывает стабильный указатель, т. е. то же значение, которое было передано соответствующему вызову newStablePtr. Если аргумент функции deRefStablePtr уже был освобожден с помощью freeStablePtr, поведение deRefStablePtr не определено.

freeStablePtr :: StablePtr a -> IO () Источник

Разорвите связь между стабильным указателем и значением Haskell. После этого, если стабильный указатель будет передан в deRefStablePtr или freeStablePtr, поведение не определено. Однако стабильный указатель может быть передан в castStablePtrToPtr, но значение Ptr (), возвращаемое castStablePtrToPtr, в этом случае не определено (в частности, оно может быть nullPtr). Тем не менее, вызов castStablePtrToPtr гарантированно не будет завершаться бесконечно.

castStablePtrToPtr :: StablePtr a -> Ptr () Источник

Преобразовать стабильный указатель в адрес. Никаких гарантий относительно полученного значения не дается, за исключением того, что исходный стабильный указатель можно восстановить с помощью castPtrToStablePtr. В частности, адрес может не ссылаться на доступный фрагмент памяти, и любая попытка передать его в члены класса Storable приводит к неопределенному поведению.

castPtrToStablePtr :: Ptr () -> StablePtr a Источник

Обратное преобразование castStablePtrToPtr, т.е. у нас есть тождество

sp == castPtrToStablePtr (castStablePtrToPtr sp)

для любого стабильного указателя sp, для которого freeStablePtr еще не выполнено. Кроме того, castPtrToStablePtr может применяться только к указателям, полученным с помощью castStablePtrToPtr.

© 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-Stable.html

Spec-Zone.ru

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