Dear All,
We
are happy to announce a new edition of the Dogelog Player:
- Frozen Terms:
We extended our garbage collector marking bits to Prolog compounds.
Unlike Prolog variables, where setting all bits is used to
indicate change set membership, we use it to indicate frozen
objects. This makes the garbage collector and certain built-ins
such as copy_term/2 etc.. aware of program sharing (PS).
- Marking Algorithms:
We now provide native implementations of (==)/2, copy_term/2,
etc.. with sharing and cycle detection. We didn't deploy additional
marking bits and/or pointers inside the Prolog terms, instead used
additional datastructures, leaving the Prolog terms untouched.
The compare/3 implementation is not a total order.
- Canonical Compare:
The library(lists) has experimental predicates term_decompose/3
and term_canonical/2, still written in 100% Prolog. We showcase
their usage in library(sequence) and library(aggregate). The
end-user gets by default a structure compare, but can also have
a canonical compare, both being total and natural orders.
Have Fun!