Criteria for a Good Language
To begin the language selection process, it is important to establish some criteria for what makes a language good. A good language choice should provide a path into the future in a number of important ways:
- Its definition should be independent of any particular hardware or operating system.
- Its definition should be standardized, and compiler implementations should comply with this standard.
- It should support software engineering technology, discouraging or prohibiting poor practices, and promoting or supporting maintenance activities.
- It should effectively support the application domain(s) of interest.
- It should support the required level of system reliability and safety.
- Its compiler implementations should be commensurate with the current state of technology.
- Appropriate software engineering-based supporting tools and environments should be available.
Effectively satisfying the above criteria is not easy, and it may require using different languages in different situations. However, as these points are violated, additional risk is involved with near-term development, as well as future technology changes. Key risks encountered as each of these criteria is violated are:
- If a language is not independent of a particular platform, portability is severely compromised. Hardware and software options are also limited, both for the original system and for future upgrades.
- If compiler implementations do not comply with a standard language definition, compiler-unique solutions are created. This also severely compromises portability, as well as options for future upgrades.
- To the extent that poor practices are used in software development, both development and debugging times will be extended, and poor code characteristics will make both testing and maintenance a nightmare.
- Poor support for the application domain will compromise the ease of development, as well as performance and readability characteristics of the code.
- If reliability is compromised, the system will not only perform below expectations, but it will also become much more costly across its lifetime. If safety is compromised, life and property will be endangered.
- An out-of-date compiler is inferior and difficult to use, producing substandard code which is difficult to create and maintain. It can also prohibit the use of key language features.
- The lack of appropriate automated development support compromises developer productivity and system quality.
In Appendix H through Appendix R, the above criteria are discussed with respect to each of the languages considered in the section on Choosing a Language.