< Terug naar vorige pagina

Publicatie

Purity analysis for JavaScript through abstract interpretation

Tijdschriftbijdrage - Tijdschriftartikel

We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable side effects. A function is an observer as soon as one of its executions depends on an external side effect, but none of its executions generate observable side effects. Otherwise, the function is classified as a procedure. Function executions and associated callers are found by traversing all reachable function execution contexts on the call stack at the point where an effect occurs. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. To increase the precision of our purity analysis, we combine it with an intraprocedural analysis that determines freshness of variables and objects. We formalize the core aspects of our technique and discuss its implementation and results on common JavaScript benchmarks. Results show that our approach is capable of determining function purity in the presence of higher-order functions, dynamic property expressions, and prototypal inheritance. When compared with existing purity analyses, we find that our approach is as precise or more precise than the existing analyses.
Tijdschrift: Journal of Software: Evolution and Process
ISSN: 2047-7473
Issue: 12
Volume: 29
Jaar van publicatie:2017
Trefwoorden:abstract interpretation, freshness analysis, JavaScript, purity analysis, side effect analysis
BOF-keylabel:ja
CSS-citation score:1
Authors from:Higher Education
Toegankelijkheid:Open