-*- Mode: Text; Fonts: Ct18b -*- 2.1 Key Goals Ada is a large language since it addresses many important issues relevant to the programming of practical systems in the real world. It is, for instance, much larger than Pascal which, unless extended in some way, is really only suitable for training purposes (for which it was designed) and for small personal programs. Some of the key issues in Ada are . Readability - it is recognized that professional programs are read much more often than they are written. It is important therefore to avoid an over terse notation such as in APL which although allowing a program to be written down quickly, makes it almost impossible to be read except perhaps by the original author soon after it was written. . Strong typing - this ensures that each object has a clearly defined set of values and prevents confusion between logically distinct concepts. As a consequence many errors are detected by the compiler which in other languages would have led to an executable but incorrect program. . Programming in the large - mechanisms for encapsulation, separate compilation and library management are necessary for the writing of portable and maintainable programs of any size. . Exception handling - it is a fact of life that programs of consequence are rarely correct. It is necessary to provide a means whereby a program can be constructed in a layered and partitioned way so that the consequences of errors in one part can be contained. . Data abstraction - as mentioned earlier, extra portability and maintainability can be obtained if the details of the representation of data can be kept separate from the specifications of the logical operations on the data. . Tasking - for many applications it is important that the program be conceived as a series of parallel activities rather than just a single sequence of actions. Building appropriate facilties into a language rather than adding them via calls to an operating system gives better portability and reliability. . Generic units - in many cases the logic of part of a program is independent of the types of the values being manipulated. A mechanism is therefore necessary for the creation of related pieces of program from a single template. This is particularly useful for the creation of libraries.