-
Notifications
You must be signed in to change notification settings - Fork 2
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
, т.к. вычисление списка в большинстве случаев приведёт к менее эффективному использованию памяти.
Функция | Forceable | Добавлен | ForceableM | Добавлен |
---|---|---|---|---|
Создать копию | force | 0.3 | copied | 0.3 |