Spec-Zone.ru › Haskell 9

GHC.Stable

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

Описание

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

data StablePtr a Источник

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

Значение StablePtr зарезервировано для представления NULL во внешнем коде.

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

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

StablePtr (StablePtr# a)
Примеры реализации
Подробности примеров реализации
Storable (StablePtr a) Исходный код

С версии: base-2.1

Подробности реализации

Определено в GHC.Internal.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 () Исходный код

Eq (StablePtr a) Исходный код

С версии: base-2.1

Подробности экземпляра

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

Методы

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

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

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/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-Stable.html

Spec-Zone.ru

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