Optimizing data structures in high-level programs: New directions for extensible compilers based on staging