Purity analysis for JavaScript through abstract interpretation

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 si...

Celý popis

Uloženo v:
Podrobná bibliografie
Vydáno v:Journal of software : evolution and process Ročník 29; číslo 12
Hlavní autoři: Nicolay, Jens, Stiévenart, Quentin, De Meuter, Wolfgang, De Roover, Coen
Médium: Journal Article
Jazyk:angličtina
Vydáno: Chichester Wiley Subscription Services, Inc 01.12.2017
Témata:
ISSN:2047-7473, 2047-7481
On-line přístup:Získat plný text
Tagy: Přidat tag
Žádné tagy, Buďte první, kdo vytvoří štítek k tomuto záznamu!
Popis
Shrnutí: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. We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. 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. When compared to existing purity analyses, we find that our approach is as precise as or more precise than the existing analyses.
Bibliografie:ObjectType-Article-1
SourceType-Scholarly Journals-1
ObjectType-Feature-2
content type line 14
ISSN:2047-7473
2047-7481
DOI:10.1002/smr.1889