GHC.Stable
| Авторские права | (c) The University of Glasgow 1992-2004 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающий | ffi@haskell.org |
| Стабильность | внутренний |
| Переносимость | непереносимый (расширения GHC) |
| Safe Haskell | Нет |
| Язык | Haskell2010 |
Описание
Стабильные указатели.
Стабильный указатель — это ссылка на выражение Haskell, которое гарантированно не затрагивается сборкой мусора, то есть оно не будет освобождено, а значение самого стабильного указателя не изменится во время сборки мусора (обычные ссылки могут перемещаться при сборке мусора). Следовательно, стабильные указатели можно передавать во внешний код, который может использовать их как непрозрачные ссылки на значения Haskell.
Значение StablePtr 0 зарезервировано для представления NULL во внешнем коде.
Значение типа StablePtr a — это стабильный указатель на выражение Haskell типа a.
Конструкторы
| StablePtr (StablePtr# a) |
Экземпляры
| Eq (StablePtr a) Источник | С версии: base-2.1 |
| 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 () Источник | |
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.14.1/docs/libraries/base-4.22.0.0-66f8/GHC-Stable.html