The efficient implementation of generic abstract interpretation algorithms for Prolog is reconsidered after References 1 and 2. Two new optimization techniques are proposed and applied to the original algorithm of Reference 1: dependency on clause prefixes and caching of operations. The first improvement avoids re‐evaluating a clause prefix when no abstract value which it depends on has been updated. The second improvement consists of caching all operations on substitutions and reusing the results whenever possible. The algorithm and the two optimization techniques have been implemented in C (about 8000 lines of code each), tested on a large number of Prolog programs, and compared with the original implementation on an abstract domain containing modes, types and sharing. In conjunction with refinements of the domain algorithms, they produce an average reduction of more than 58 per cent is computation time. Extensive experimental results on the programs are given, including computation times, memory consumption, hit ratios for the caches, the number of operations performed, and the time distribution. As a main result, the improved algorithms exhibit the same efficiency as the specific tools of References 3 and 4, despite the fact that our abstract domain is more sophisticated and accurate. The abstract operations also take 90 per cent of the computation time, indicating that the overhead of the control is very limited. Results on a simpler domain are also given and show that even extremely basic domains can benefit from the optimizations. The general‐purpose character of the optimizations is also discussed.
The design of a software component, such as a database, is the trace of all the processes, products and reasonings that have led to the production of this artifact. Such a document is the very basis of system maintenance and evolution processes. Unfortunately, it does not exist in most situations. The paper describes how the design of a database or of a collection of files can be recovered through reverse engineering techniques. Recording the reverse engineering activities provides a history of this process. By normalizing and reversing this history, then by conforming it according to a reference design methodology, one can bbtain a tentative design of the source database. The paper describes the baselines of the approach, such as a wide spectrum specification model, semantics-preserving transformational techniques, and a design process model. It describes a general procedure to build a possible DB design, then states the requirements for CASE support, and describes DB-MAIN, a prototype CASE tool which includes a history processor. Finally it illustrates the proposals through an example.
scite is a Brooklyn-based organization that helps researchers better discover and understand research articles through Smart Citations–citations that display the context of the citation and describe whether the article provides supporting or contrasting evidence. scite is used by students and researchers from around the world and is funded in part by the National Science Foundation and the National Institute on Drug Abuse of the National Institutes of Health.