All the fields in the editor state (and sub-records, eg. buffer state)
should be strict.

Every time the user presses a key, the editor state is updated.
If a field is lazy in a record, setting it creates a thunk that contains the
whole old record. So, there is a risk of accumulating a whole history of
changes (until the field is "forced"). The easy solution to avoid this is
to mark all fields in the editor state as strict. (We do not take advantage
of laziness there anyway).

Hope this helps!

Cheers,
JP.

On Sat, May 14, 2011 at 7:06 AM, Reiner Pope <reiner.p...@gmail.com> wrote:
> Hi all,
>
> Is there a policy for strictness of datatypes in Yi, and what is it?
> Specifically:
>
> When I write a datatype, which fields should I make strict? For instance,
> all fields in Editor are strict, and all fields except 'height' and
> 'winRegion' in Window are strict. Is there some reasoning underlying this?
> What should I do to ensure strictness of lazy datatypes like [a]? For
> instance, the 'bufAccessList :: ![BufferRef]' field of 'Window' is marked
> strict, but is a list. Is it the client's duty to ensure that this list is
> fully evaluated?
>
> Would there be any objections to using the 'deepseq' package to ensure
> evaluation? The 'NFData' class is supported by Derive, so it might be
> possible to generate many instances automatically.
>
> Cheers,
> Reiner
>
> --
> Yi development mailing list
> yi-devel@googlegroups.com
> http://groups.google.com/group/yi-devel

-- 
Yi development mailing list
yi-devel@googlegroups.com
http://groups.google.com/group/yi-devel

Reply via email to