Skip to content

Forceable и ForceableM

Андрей Мулик edited this page Sep 21, 2023 · 2 revisions

Forceable и ForceableM

Forceable - класс типов, которые могут быть приведены к наиболее эффективной форме (по памяти) при помощи функции.

ForceableM - класс типов, которые могут быть приведены к наиболее эффективной форме (по памяти) при помощи процедуры.

Использование

Многие операции могут быть реализованы в двух вариантах: с созданием новой структуры и с переиспользованием существующей. Пример: должна ли функция take создать новый массив или вернуть ссылку на подмассив существующего? Или нужно сделать две функции?

sdp старается по возможности переиспользовать структуры, а для создания новых предлагает функцию force и процедуру copied. Таким образом, функции и процедуры в sdp реализуют оба варианта поведения не создавая дублей.

Внимание: force и copied не заменяют (!$), seq и deepseq. Их задача - не вычислить структуру, а привести её к эффективному представлению в памяти. Например, force (filter f xs) не создаст полностью вычисленную копию списка filter f xs, состоящего из элементов xs удовлетворяющих условию f. Более того, для списка force = id, а copied = return, т.к. вычисление списка в большинстве случаев приведёт к менее эффективному использованию памяти.

API

Функция Forceable Добавлен ForceableM Добавлен
Создать копию force 0.3 copied 0.3