Modern computers typically have a memory map and a Translation Lookaside Buffer that in a few levels of logic translates virtual addresses into physical addresses. The memory map in RAM is the ultimate authority but the TLB holds adapted data to usually translate quicker. Change notification is required from the software that builds and updates the slowly varying memory map from which the TLB information is derived. There are many good programming tricks to be learned from the detailed hardware designs of TLB’s.
The caches for computer RAM and web caches duplicate data close to the user. Web caches are typically lax about ensuring currency.
Memoizing can be done automatically. It requires comparing argument values for each evaluation, a cost that may be avoided when change notification can be arranged. Memo functions in languages and scratchpad functions in database contexts are related ideas, I think. I have in mind more custom designs.
Partial Evaluation is another general technique. In computer science partial evaluation is usually presumed to occur before compilation. Partial evaluation is a generalization of constant folding, an old compiler optimization where sub-expresions such as “3+2” are replaced by 5 and the add instruction is omitted. In 1951 Alfred Tarski used a technique equivalent to partial evaluation in providing A Decision Method for Elementary Algebra and Geometry.
This idea is very near to adaptive formats where the same space is formatted according to recent use. The two ideas are closely connected in kernel code.
The Keykos kernel goes further and modifies node state indirectly by modifying adapted data. This is a bit like a store into cache, but of course the data formats are different.
The real reason for this note is to introduce several instances of adapted data that are employed in the Keykos kernel. The slowly changing data structures are in each case a network of nodes connected together with keys. Three such structures are the three main primitive kernel objects, domains, segments and meters. For meters and domains, program actions are not only effected indirectly by node state, but also such actions effect node state.
It is first necessary to understand special tricks for handling keys. Keys may be prepared if they designate an object. This logic is otherwise oblivious to the meaning of the key. Depending on what sort of kernel implemented object some key helps to define, a key may be involved.
Meters are much more efficient than their external specs suggest.
Domains are adapted for quick starts and stops.
The prepared segment is the most complex of the data adaptations.