Language evaluation criteria c

The actual users of languages (businesses, engineers, scientists, students, managers, secretaries, etc.) have certain demands on the languages they use. One legitimate way to evaluate languages is to ask whether a given language meets the needs of a given user community. Rapid development Programmers are more expensive than machines, so they'd better be able to make fast progress. (We should consider both the language and its environment in making this evaluaiton.) Easy maintenance Maintenance is expensive. Reliability and safety When computers go down, planes crash, phone systems break, nuclear reactors melt down, cash machines close. We'd like to avoid this. Portability I'd like my program to run on many different platforms, with minimal rewriting. Efficiency The compiler should be fast. The code itself should be fast. Low training time (learnability) The language should be easy to learn. Training is expensive. Reusability Writing software components once is cheaper than writing them twice. Pedagogical value The language should support and enforce the concepts you want to teach.

Internal Evaluation Criteria

Although the above demands are all important, we should still ask what makes a good language, independent of the demands of its users. This is a little like the question "What makes a good artwork?" as opposed to "What makes a good Hollywood movie?" Here are some qualities of a good language. Readability Understand what you, or someone else has written. Writeability Say what you mean, without excessive verbiage. Simplicity The language should have a minimal number of primitive concepts/features. Orthogonality The language should support the combination of its concepts/features in a meaningful way. Consistency The language should not include needless inconsistencies. (But remember Ralph Waldo Emerson: "A foolish consistency is the hobgoblin of small minds.") Expressiveness The programmer should be able to express their algorithm naturally. Abstraction The language should support a high level of data and control abstraction.

We will generally make use of these and other internal evaluation criteria when comparing languages.