The Separation Principle – A Principle For Programming Language Design