|Page 223 of 800||Search internet|
A cluster is an array of caches which maps references of pages to the caches of the pages. A compiler typically has to build up a cluster of caches when it loads transitively referenced pages. Furthermore, the rack of each page contains the cluster of all transitively referenced pages.
The eval function can compute the value of a term, given the term as a parse tree t and a suitable cache c. Whenever the eval function evaluates a page construct, it returns the cache of the given page. That cache may be the cache c itself, or it may be a cache found in the cluster of a rack of the cache c.
The purpose of including clusters in racks is to make the eval function efficient.
Racks of referenced pages are both included directly in the cache and in clusters of racks or referencing pages. For that reason, the rack of a page may occur many places in the cache or rack of another page. This does not cause problems with memory usage because of sharing. Sharing is preserved when writing rack files to disk.
Caches are tagged data structures and the eval function is an eager function which operates on tagged data. As a design choice, tagged data is non-circular.
Logiweb pages can only reference previously published pages and, thus, Logiweb pages reference each other in a non-circular way. For that reason, caches as described above are non-circular data structures which allows them to be tagged data structures.
The relations between racks, caches, and clusters are:
Note that the resulting structure is non-circular because the cluster of a rack never includes caches which include the rack itself.
|Page 223 of 800||Search logiweb.eu|