Главная » Haskell » Для чегонужен модуль Storable

0

содержит описание специального типа изменяемых массивов, которые используются при работе с внешними программами, написанными на языках программирования типа C (с аналогичной методикой работы с кучей). Использование модуля:

import Data.Array.Storable

Массив данного типа хранится в монаде IO, которая располагает его в последовательных блоках памяти в куче. Элементы массива хранятся в соответствии с правилами, описываемыми классом Storable (см. стр. 468). Такими массивами можно манипулировать из внешних программ, написанных на языках типа C.

Массивы описываемого типа являются более медленными,  чем массивы типа IOUArray (см. стр. 235), однако они используются именно для связи с внешними программами.

Тип: StorableArray

Описание: массив описываемого типа.

Определение:

data  StorableArray i  e  = …

Тип определён в виде примитива.

Для этого типа данных определён экземпляр класса Storeable.

Функция: withStorableArray

Описание: возвращает указатель на массив. Этот указатель должен  использоваться только внутри действия монады IO, которое передаётся вторым аргументом в эту функцию.

Определение:

withStorableArray :: StorableArray i e ->  (Ptr e ->  IO  a)  ->  IO a

Функция определена в виде примитива.

Функция: touchStorableArray

Описание: используется для  того,  чтобы  гарантировать наличие  указателя на массив до осуществления последней операции с ним.  Эта функция должна вызываться последней в наборе операций.

Определение:

touchStorableArray :: StorableArray  i  e ->  IO ()

Функция определена в виде примитива.

Функция: unsafeForeignPtrToStorableArray

Описание:  создаёт массив описываемого типа  из  произвольного   указателя на внешнюю память. Ответственность за логическую целостность выполняемой операции полностью ложится на разработчика программного обеспечения, который использует эту небезопасную функцию.

Определение:

unsafeForeignPtrToStorableArray :: ForeignPtr e ->  (i, i) ->  IO  (StorableArray i e)

Функция определена в виде примитива.

8.1.8.    Модуль Unboxed

Модуль  Unboxed описывает  примитивный  алгебраический тип   данных для представления неизменяемых неограниченных  массивов. Использование модуля:

import  Data.Array.Unboxed

В этом модуле описывается единственный алгебраический  тип данных и экземпляры необходимых классов для создания интерфейсов к массивам.

Тип: UArray

Описание: алгебраический тип данных для представления неизменяемых неограниченных строгих массивов.

Определение:

data  UArray  i e = …

Тип определён в виде примитива.

Этот тип массивов обычно более эффективен (с точки  зрения  времени исполнения и с точки  зрения используемой памяти), чем  массивы типа Array (см. стр. 227). Это связано с тем, что такие массивы строги.

Для этого типа массивов  определено более пятнадцати экземпляров  класса IArray, которые покрывают собой все основные типы (примитивные в том числе). Кроме того, определены экземпляры для следующих классов: Typeable2, Eq, Ord и Show.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии