A Principled Approach to Developing New Languages for Live Coding