# Development Principles These define how we deal with code. ## Why we need principles? * They keep the project focused on the right direction. * They keep the project disciplined. * They make users' expectation for the project clear. ## Principles * **Enforcability** * Meta-principle. We enforce the principles in a systematic way. We use automated checks to enforce the principles as much as we possible. * **Performance** * Our goal is to build high performance memory management systems. * We need to have the tools (for measuring performance) that allow us to create high performance systems. * **Flexibility** * Flexibility is a prerequisite to creative, ambitious engineering, and is thus a key principle. * The design should maintain clear abstraction. * Flexibility should not be at odds with performance. Our motto (from Ken Kennedy): _abstraction without guilt_. * Encapsulation is our key weapon in ensuring flexibility. * **Clarity/Accessibility** * Our goal is to provide a toolkit that is widely used. Consequently: * The code should be clear and easy to understand. * A good programmer (with no GC expertise) should be able to understand the code and make changes. * Use standard coding styles, use standard license, support standard IDEs, etc. * Systems need to work 'out of the box'. * **Security** * Our system must be secure. * We should be a platform for research into memory management security.