Programmers resort to design patterns, micro-architectures, and other idioms when their design ideas can?t be expressed directly in the programming language. The crosscutting code that appears as a result makes it harder to ensure a correct implementation of the idiom, and complicates software evolution when the idiom?s implementation cannot be modularly substituted or extended like a method or class.
We propose Concepts, an IDE-based mechanism for declaring, checking, and evolving crosscutting design idioms. Programmers code their design idioms as before, but also declare their fundamental properties in supplemental files. A concept?s behavior and implementation are described separately. This separation permits describing a new implementation for a concept and then having the concept tool mechanically transform the concept?s current implementation into the new one. As a result we aim to get many of the same benefits for concepts that we get for classes: checking of key behaviors and substitutability.