Search papers, labs, and topics across Lattice.
This paper explores the integration of run-time semantics of assertion properties into a multivariant, top-down, goal-directed abstract interpretation algorithm for dynamically typed languages. By leveraging multiple inferred calling patterns, the authors successfully reduce the number of properties requiring run-time checks, thereby minimizing overhead while maintaining expressiveness. The implementation in the Ciao system demonstrates superior performance compared to existing techniques, highlighting the effectiveness of their approach in optimizing run-time checks.
Reducing run-time checks by exploiting calling patterns can significantly enhance performance in dynamically typed languages without sacrificing expressiveness.
In strongly-typed languages, types are verified at compile time, while dynamically typed languages, such as Prolog, perform type consistency checks entirely at run-time. Extending dynamic languages with assertions allows expressing both classical types and more general properties, providing high expressiveness, but at the cost of run-time overhead. Abstract interpretation allows safely approximating such program properties at compile time, which has been used to reduce the number of properties that require run-time checks, while still reporting unverified properties that can guide further static analyses, testing, or domain refinement. In this work, we first study how to selectively integrate the run-time semantics of assertion properties into a multivariant, top-down, goal-directed abstract interpretation algorithm. We then show how multiple inferred calling patterns can be exploited to reduce the number of properties that must be checked at run-time, thus minimizing the overhead. Finally, we report on an implementation of our approach in the Ciao system and provide performance results supporting that better results can be obtained than with the previously reported techniques.