An Efficient and
Parallel Abstract
Interpreter
in Scala
—
First Algorithm
The context:
Abstract
Interpretation for
Static Analysis
The problematic:
Too heavy for
real programs
First parallel
algorithm
Implementation
First results
Done and todo
References
Scala implementation – main loop
Algorithm 6: The main loop, until the worklist todo is empty
s c a l a . an n otati on . t a i l r e c
l oop ( todo : L i s t [ S tate ] , v i s i t e d : VS [ S tate ] , h a l t e d : Set [ S tate ] , graph : Graph ) :
ParAAMOutput todo Ñ Ø
{
× N i l { // f i n i s h e d , the w o r k l i s t todo i s empty
actorSystem . te rmi n ate
ParAAMOutput( h al te d , V i s i t e d S e t [VS ] . s i z e ( v i s i t e d ) , timeout . time , graph , Ð× , s t a t s )
}
×
( timeout . re ac h e d ) // exceeded the maximal time allowed , stop
ParAAMOutput( h al te d , V i s i t e d S e t [VS ] . s i z e ( v i s i t e d ) , timeout . time , graph , ØÖÙ , s t a t s )
Ð× { // w i l l send each s t a t e from w o r k l i s t todo to Ac torS tate
Ú Ð f u t u r e a c t o r S t a r t e r ? A c t o r S t a r t e r . I n i t ( todo , v i s i t e d , h al te d , graph )
Ú Ð ( newTodo , n e wVi si te d , newHalted , newGraph )
Await . r e s u l t ( fu tu re , Timeout( "some" se c on d s ) . d u r a t i o n )
. asIn stan c e O f [ ( L i s t [ S tate ] , VS [ S tate ] , Set [ S tate ] , Graph ) ]
l oop ( newTodo , n e wVi si te d , newHalted , newGraph )
}
}
An Efficient and Parallel Abstract Interpreter in Scala — First Algorithm 20 / 32