Language Design Precepts

While working on my most recent language design I felt the need to delineate what I belive to be the fundamental precepts which lead to a good language design. That is the purpose of this document which is written independent of any specific language or paradigm,.

Simplicity and Completeness

These are the two core precepts which lead to good language design. Simplicity brings the benefit of ease in use because no extraneous features are provided. Simpler languages are easier to learn and use. At the same time a language must be complete to be usable. The lack of completeness usually leads to toy and amateur languages. If a feature is necessary then it must be included in some form or else programmers will constantly find themselves wishing the language had some feature and spending time and energy working around the lack of it. These two concepts come together in a phrase which I find very useful in describing such systems minimally complete which is used to indicate that something has everything that is necessary and no more. Determining what comprises a minimally complete feature set can often be challenging. There are however some precepts which can help, they are:


When an experienced programmer fully understands the system he is attempting to model it should be easy to express that system in the language. Completeness can go a long way toward expressivity. However, there are two principles which can help a language be more expressive, they are:


Today programmers are increasingly required to rework code written either long ago or by someone else. Making the code readable makes that job easier as well as helping others trying to learn the language by reading it.