language programming parallel Matroshka language programming parallel Natasha abstraction control parallel abstraction control closure programming parallel portable programming parallel independence architecture architecture independence