DOI: 10.1017/s1471068426100672 ISSN: 1471-0684

Exploiting Multiple Abstract Call Patterns for Optimizing Run-Time Checks

DANIELA FERREIRO, DANIEL JURJO-RIVAS, MARCO CICCALÈ, JOSE F. MORALES, PEDRO LOPEZ-GARCIA, MANUEL V. HERMENEGILDO

Abstract

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 showing improvements over previously reported techniques.

More from our Archive