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