TL;DR: Orca, a procedural language whose sequential constructs are roughly similar to languages like C or Modula 2 but which also supports parallel processes and shared objects and has been used to develop applications for the prototype system, is described.
Abstract: The two major design approaches taken to build distributed and parallel computer systems, multiprocessing and multicomputing, are discussed. A model that combines the best properties of both multiprocessor and multicomputer systems, easy-to-build hardware, and a conceptually simple programming model is presented. Using this model, a programmer defines and invokes operations on shared objects, the runtime system handles reads and writes on these objects, and the reliable broadcast layer implements indivisible updates to objects using the sequencing protocol. The resulting system is easy to program, easy to build, and has acceptable performance on problems with a moderate grain size in which reads are much more common than writes. Orca, a procedural language whose sequential constructs are roughly similar to languages like C or Modula 2 but which also supports parallel processes and shared objects and has been used to develop applications for the prototype system, is described. >
TL;DR: The programming language Oberon is the result of a concentrated effort to increase the power of Modula‐2 and simultaneously to reduce its complexity.
Abstract: The programming language Oberon is the result of a concentrated effort to increase the power of Modula-2 and simultaneously to reduce its complexity. Several features were eliminated, and a few were added in order to increase the expressive power and flexibility of the language. This paper describes and motivates the changes. The language is defined in a concise report1.
TL;DR: It is concluded that a well defined sub-language is essential for use in safety-critical projects, and a guide is provided for project managers and designers on the characteristics which such a subset should possess.
Abstract: The paper reviews the choice of computer language for use in safety-critical systems. The advice given reflects both civil and military requirements. A comparison is made between assembly-level languages, the language C, CORAL 66, Pascal, Modula-2 and Ada. It is concluded that a well defined sub-language is essential for use in safety-critical projects, and a guide is provided for project managers and designers on the characteristics which such a subset should possess. >
TL;DR: In this article, the authors present an informal description of the Mini-language core and its semantics, including the notion of scope and the concept of scope-based data structures, as well as some context-free syntactic definitions.
Abstract: Preface.- Acknowledgements.- 1. Introduction.- 1.1 The Building of the Tower of Babel.- 1.2 What Is a Programming Language?.- 1.3 Why Study Programming Languages?.- 1.4 What Should We Look for in a Language?.- 1.5 Language Design Issues.- 1.6 The Study of Programming Languages.- Further Reading.- 2. Elements of a Programming Language.- 2.1 Informal Description of Mini-language Core.- 2.2 Informal Semantics of Mini-language Core.- 2.3 Language Design and the Programming Process.- 2.4 The Definition of Programming Languages.- 2.5 The Formal Description of Syntax.- 2.6 Other Context-free Syntax Definitions.- Further Reading.- 3. Names, Locations, and Values.- 3.1 Mini-language Ref.- 3.2 Declarations.- 3.3 Assignment.- 3.4 Statements as Expressions.- 3.5 Where to Look: Algol 68, Smalltalk.- Further Reading.- 4. Control Structures.- 4.1 Mini-language Control.- 4.2 Basic Control Structures and Flowgraphs.- 4.3 Theorems on Control Structures.- 4.4 Other One-in, One-out Control Structures.- 4.5 The Goto Statement and Label Values.- 4.6 Conclusions.- 4.7 Where to Look: Pascal, Ada.- Further Reading.- 5. Data Types.- 5.1 Mini-language Type.- 5.2 The Meaning of Type.- 5.3 Primitive Types.- 5.4 Array Types.- 5.5 Record Types.- 5.6 Type Checking.- 5.7 Where to Look: Fortran, PL/I.- Further Reading.- 6. Input and Output.- 6.1 Mini-language Format.- 6.2 Varieties of Input-output Specifications.- 6.3 Communication with the Outside World.- 6.4 Where to Look: Fortran, Cobol, Ada.- Further Reading.- 7. Procedures and Parameters.- 7.1 Mini-language Procedures.- 7.2 Procedures as Abstractions.- 7.3 Arguments and Parameters.- 7.4 Value-returning Procedures.- 7.5 Coroutines.- 7.6 Where to Look: PL/I, Ada.- Further Reading.- 8. Nesting and Scope.- 8.1 Mini-language Scope.- 8.2 The Idea of Scope.- 8.3 Storage Allocation.- 8.4 Dynamic Scope.- 8.5 Where to Look: Pascal, PL/I, APL.- Further Reading.- 9. Definition of New Data Types.- 9.1 Mini-language Typedef.- 9.2 Type Definitions.- 9.3 Definition of Structured Types.- 9.4 User Defined Operators.- 9.5 Where to Look: Pascal, Algol 68.- Further Reading.- 10. Dynamically Varying Structures.- 10.1 Mini-language Structures.- 10.2 Dynamically Varying Data Structures.- 10.3 Pointers.- 10.4 Design Criteria for Data Structures.- 10.5 Dynamic Allocation of Storage.- 10.6 Where to Look: PL/I, Pascal, Ada.- Further Reading.- 11. Exception Handling.- 11.1 Mini-language Exceptions.- 11.2 Exceptions.- 11.3 Issues in Exception Handling.- 11.4 Where to Look: PL/I, Ada.- Further Reading.- 12. Parallel Processing.- 12.1 Mini-language Parallel.- 12.2 A First Solution to the Decoding Problem.- 12.3 Putting a Buffer in a Task.- 12.4 Interrupting.- 12.5 Issues in Parallel Processing.- 12.6 Where to Look: Concurrent Pascal, Modula-2, Ada.- Further Reading.- 13. Separately Compiled Modules.- 13.1 Mini-language Modules.- 13.2 Packaging Subprograms.- 13.3 Abstract Data Types.- 13.4 Where to Look: PL/I, Modula 2, Ada, Smalltalk.- Further Reading.- 14. The Swamp of Complexity.- 14.1 The Forms of Complexity.- 14.2 Escaping from the Swamp.- References.