Главная » Haskell » Модуль Char8

0

В модуле Char8 определены все те же  самые программные  сущности, что и в модуле ByteString. Все типы данных, все функции имеют абсолютно те же самые наименования, их  количество  такое же  (за исключением двух дополнительных функций, которые описываются ниже). Этот модуль полностью дублирует модуль ByteString, однако его предназначение несколько иное. В то время как в модуле ByteString для представления символов строки используется тип Word8, в рассматриваемом модуле  Char8 для тех же  целей используется  одноимённый тип Char8.

Так  же, как и с модулем ByteString, при использовании рассматриваемого модуля его необходимо импортировать квалифицированно для избежания коллизии с уже определёнными программными сущностями из стандартного модуля Prelude. Поэтому импорт модуля выглядит следующим образом (как пример):

import qualified  Data.ByteString.Char8 as C

В этом модуле также определены две дополнительные функции, используемые для создания восьмибитовых строк на низком уровне (на уровне физических адресов в памяти).

Функция: packAddress

Описание: создаёт восьмибитовую  строку при помощи заданной адресом последовательности  байт, оканчивающейся  нулевым символом.  Сложность —  O(n), где n — длина строки.

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

packAddress :: Addr# ->  ByteString

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

Функция: unsafePackAddress

Описание: небезопасный способ создания восьмибитовой строки при помощи указания адреса в памяти, откуда брать информацию для заполнения строки, а также количества символов, которые необходимо использовать. Сложность — O(1). Определение:

unsafePackAddress  :: Int ->  Addr# ->  ByteString

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

8.4.3.    Модуль Lazy

Модуль Lazy предоставляет эффективную  реализацию ленивых восьмибитовых строк при помощи массивов, содержащих символы типа Word8. Такие ленивые восьмибитовые строки помогают создавать высокопроизводительные приложения, которые эффективны как с точки зрения занимаемой памяти (большие строки хранятся и используются по мере необходимости),  так и с точки зрения скорости (в силу той же ленивости).

Некоторые функции работают несколько более эффективно,  чем их строгие варианты (например, функции concat, append, reverse  и cons). И другие функции из этого модуля работают на несколько процентов эффективнее, чем их строгие варианты. Но когда дело доходит до огромных массивов информации,  либо при разработке приложения имеются жёсткие ограничения по используемой памяти, функции рассматриваемого модуля дают несравненный результат.

Так  же, как и с другими модулями семейства ByteString, при  использовании рассматриваемого модуля его необходимо импортировать квалифицированно для избежания коллизии  с уже определёнными программными сущностями из стандартного модуля Prelude. Поэтому импорт модуля выглядит следующим образом (как пример):

import qualified  Data.ByteString.Lazy as B

Модуль  Char8

Наконец, последний модуль из семейства модулей для работы с  восьмибитовыми строками — это модуль Char8, который является подчинённым модулю Lazy из пакета Data. По его наименованию и  месту в иерархии модулей можно понять, что этот модуль предоставляет определения программных сущностей для работы с ленивыми восьмибитовыми строками, символы которых имеют тип Char8, а не Word8, как было в предыдущем модуле.

Естественно, что в этом модуле определены все те же  самые  программные сущности, что и в одноимённом  модуле Char8,  описанном в подразделе  8.4.2. (см. стр. 286). Это значит, что имена в этом модуле конфликтуют как с именами программных сущностей из стандартного модуля Prelude,  так и из других модулей для работы с восьмибитовыми строками. Поэтому использование модуля всегда должно быть квалифицировано:

import qualified  Data.ByteString.Lazy.Char8 as C

Для понимания того, какие типы данных и функции описаны в рассматриваемом модуле, необходимо ознакомиться с  соответствующими программными сущностями из модулей Char8 и Lazy.

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

По теме:

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