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