Paradigms | Multi-paradigm: procedural, imperative, structured |
---|---|
Family | ALGOL |
Developer | Burroughs Corporation Unisys |
Stable release | ClearPath MCP 21.0 / June 2023 |
Typing discipline | Static, strong |
Scope | Lexical (static) |
Platform | Burroughs large systems |
OS | Unisys MCP |
Influenced by | |
ALGOL, Executive Systems Problem Oriented Language |
The New Executive Programming Language (NEWP) is an internal structured-syntax system language for Unisys Master Control Program (MCP) systems. The language is used for writing the MCP operating system and other system utility software, though it can also be used to write user system software with the restriction to not use UNSAFE mode.
Several constructs separate it from the extended ALGOL on which it is based. Language operators such as MEMORY
, which allows direct memory access, are strictly used only by the MCP. [1] NEWP replaced Burroughs Executive Systems Problem Oriented Language (ESPOL) in the 1970s.
NEWP is closely tied to the features and semantics of the platform and MCP itself. Since this is the case, there has never been a need for assembly language on these systems since ESPOL in 1961, and no assembler is provided, even for internal Burroughs/Unisys use. NEWP (and ESPOL) programmers are familiar with the way the machine works as a stack machine and the instruction set, since each source statement relates closely to the generated machine instructions. This contributes to the platform as a secure multiprocessing system, since general programmers cannot use any assembler and NEWP is itself limited mostly to writing an operating system, particularly the MCP.
System programming is not just done in a single system language, but in a suite of system languages including Extended ALGOL, [2] DCALGOL, [3] DMALGOL, [4] each suited to different levels of system programming, ensuring Separation of Concerns.
Customers may use NEWP to make site-specific patches to the MCP as well as their own system utilities. While NEWP can generate executable programs, such programs cannot use UNSAFE mode intended only for internal MCP operation.
NEWP is a block-structured language very similar to Extended ALGOL. Although a lower-level system language than Extended ALGOL, NEWP includes stricter type checking. Thus programs compilable with ALGOL might not compile with NEWP. NEWP includes several system features not available in ALGOL, and ALGOL variants DMALGOL and DCALGOL have extensions not in NEWP specifically for Data Management in Databases such as DMSII and Semantic Information Manager (SIM) and DCALGOL for higher-level transaction and server processing with request queues as in COMS (Communications Management System).
NEWP includes several features borrowed from other programming languages which help in software engineering. These include modules (and later, super-modules), which group together functions and their data, with defined import and export interfaces. This allows for data encapsulation and module integrity.
Since NEWP is designed for use as an operating system language, it permits the use of several unsafe constructs. While the facilities are of very limited use, they are critical to the operation of the system and thus limited to specific areas of the operating system. Unsafe mode is for hardware specific operations. Any block containing unsafe instructions must be annotated with the specific kind of unsafe elements used.
Unsafe elements are only permitted within the operating system. Executable programs generated by NEWP may not use unsafe elements (no unsafe blocks). A block (a unit beginning with 'BEGIN' and ending with 'END') may include block directives in brackets. UNSAFE is one directive and includes various unsafe settings. For example:
BEGIN [UNSAFE (DESCRIPTOR, WORD)] … END;
Unsafe elements are extra declarations and statements. Extra unsafe declarations include DESCRIPTOR, WORD, HARDLOCK.
DESCRIPTOR: Descriptors are memory block descriptors including address and other block metadata including block length, machine data type (byte or word), and presence bit for virtual memory operation. Descriptors provide a high level of memory block protection with no possibility for memory (buffer) overflow or underflow. As control words, descriptors may not be directly manipulated by any software element other than in the MCP operating system itself, thus ensuring memory safety and security.
HARDLOCK allows low-level locking on low-level shared resources.
WORD allows arbitrary bit access to any word, including machine control words (those with odd tags) and to the tag bits themselves. Any other software cannot arbitrarily modify control words or tags.
UNSAFE annotations include: DESCRIPTOR, MACHINEOPS, MEMORY, MISC, REFERENCE, REGISTERS, UPLEVEL, WORD.
MEMORY: At very low levels of an operating system, it must be able treat the machine as a single entity with a single physical memory. UNSAFE (MEMORY) allows the MCP to view the entire memory as a large one-dimensional array declared globally as M at lexical level 0 (D[0]). The scope of M is restricted to blocks annotated with UNSAFE [MEMORY]. Each array index of M is the address of a word in memory. The use of M is restricted to very low-levels of the MCP operating system.
REGISTERS: Being a stack machine, processor registers are generally hidden from software (not seen by programmers), including the top of stack registers. Register details may vary between hardware implementations, so it is desirable for software to not have any dependencies on register details. Some registers control specific operation of the hardware. Any software outside of specific sections of the MCP should not see registers. Thus most software is independent of many hardware details, these being isolated to sections of the MCP OS itself.
MACHINEOPS: Since there is no assembly language or assembler, NEWP provides intrinsics (certain NEWP instructions) to generate specific critical machine operations. With no assembler, general programmers cannot write programs to undermine system safety and security. The machine operators are enabled by the UNSAFE (MACHINEOPS) block annotation.
Two such notable intrinsics are STOP, that generates the machine instruction STOP instruction, and MOVESTACK which generates the MVST instruction that results in a process swap (a process being represented by a stack) flushing process-specific state to the current stack and restoring state from the target process (stack). Despite the importance of this intrinsic instruction to the multiprocessing operation of the system, the intrinsic itself only occurs in one place in the whole of the MCP.
Note that MCP calls execute on the stack of the current process. However, there are some MCP processes that are 'independent runners'.
If a NEWP program does not make use of any unsafe elements, it can be compiled and executed as a user-level program. If any unsafe elements are used (in blocks annotated as UNSAFE), the compiler marks the code as non-executable. Such a program can still be executed if blessed (specifically enabled) by a security administrator, with the appropriate console command.
The exact origin of the language name 'NEWP' is clouded in history and mystery. NEWP is rumored to really stand for "Nearly Every Word Pascal" after a West Coast engineering initiative to move Burroughs languages such as ALGOL over to a more Pascal-like syntax.
Stories were also told that it stands for "No Executive Washroom Privileges," supposedly after its designers fell out of favor with management. Some engineers thought “Nothing Ever Works Perfectly” was a more fitting moniker.
Alternatively, NEWP was chosen as the name of the compiler/language at the spur of the moment by the designer when pressed for a name under which the compiler code would be managed. It stood for "NEW Programming Language", an essentially dull name with the unhappy property that the "new" part of the name would quickly become incorrect.
The original designer of the project was a Texan and soon started to describe the name as the answer to the question, "Is it done yet?". NEWP sounded like a West Texas version of "nope". Once the project was released, the name was "redefined" to stand for "No Executive Washroom Privileges" - a description of the type of person who would likely use the language.
For a while, a contest ran to come up with a better name for the compiler and language, but by that time, the name NEWP had sunk its roots too deeply.
In computer programming, assembly language, often referred to simply as assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence between the instructions in the language and the architecture's machine code instructions. Assembly language usually has one statement per machine instruction (1:1), but constants, comments, assembler directives, symbolic labels of, e.g., memory locations, registers, and macros are generally also supported.
The Burroughs Corporation was a major American manufacturer of business equipment. The company was founded in 1886 as the American Arithmometer Company by William Seward Burroughs. In 1986, it merged with Sperry UNIVAC to form Unisys. The company's history paralleled many of the major developments in computing. At its start, it produced mechanical adding machines, and later moved into programmable ledgers and then computers. It was one of the largest producers of mainframe computers in the world, also producing related equipment including typewriters and printers.
A computer program is a sequence or set of instructions in a programming language for a computer to execute. It is one component of software, which also includes documentation and other intangible components.
In computing, virtual memory, or virtual storage, is a memory management technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a very large (main) memory".
Memory management is a form of resource management applied to computer memory. The essential requirement of memory management is to provide ways to dynamically allocate portions of memory to programs at their request, and free it for reuse when no longer needed. This is critical to any advanced computer system where more than a single process might be underway at any time.
A memory management unit (MMU), sometimes called paged memory management unit (PMMU), is a computer hardware unit that examines all memory references on the memory bus, translating these requests, known as virtual memory addresses, into physical addresses in main memory.
In computer science, a high-level programming language is a programming language with strong abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language elements, be easier to use, or may automate significant areas of computing systems, making the process of developing a program simpler and more understandable than when using a lower-level language. The amount of abstraction provided defines how "high-level" a programming language is.
A low-level programming language is a programming language that provides little or no abstraction from a computer's instruction set architecture; commands or functions in the language are structurally similar to a processor's instructions. Generally, this refers to either machine code or assembly language. Because of the low abstraction between the language and machine language, low-level languages are sometimes described as being "close to the hardware". Programs written in low-level languages tend to be relatively non-portable, due to being optimized for a certain type of system architecture.
The Burroughs Large Systems Group produced a family of large 48-bit mainframes using stack machine instruction sets with dense syllables. The first machine in the family was the B5000 in 1961, which was optimized for compiling ALGOL 60 programs extremely well, using single-pass compilers. The B5000 evolved into the B5500 and the B5700. Subsequent major redesigns include the B6500/B6700 line and its successors, as well as the separate B8500 line.
Execution in computer and software engineering is the process by which a computer or virtual machine interprets and acts on the instructions of a computer program. Each instruction of a program is a description of a particular action which must be carried out, in order for a specific problem to be solved. Execution involves repeatedly following a "fetch–decode–execute" cycle for each instruction done by the control unit. As the executing machine follows the instructions, specific effects are produced in accordance with the semantics of those instructions.
A system programming language is a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared with application software. Edsger Dijkstra referred to these languages as machine oriented high order languages, or mohol.
The Executive Systems Problem Oriented Language (ESPOL) is a programming language, a superset of ALGOL 60, that provides abilities of what would later be termed a system programming language or machine oriented high order language (mohol), such as interrupting a processor on a multiprocessing system. ESPOL was used to write the Master Control Program (MCP) on Burroughs computer systems from the B5000 to the B6700. The single-pass compiler for ESPOL could compile over 250 lines per second.
The MCP is the operating system of the Burroughs B5000/B5500/B5700 and the B6500 and successors, including the Unisys Clearpath/MCP systems.
Memory segmentation is an operating system memory management technique of dividing a computer's primary memory into segments or sections. In a computer system using segmentation, a reference to a memory location includes a value that identifies a segment and an offset within that segment. Segments or sections are also used in object files of compiled programs when they are linked together into a program image and when the image is loaded into memory.
The Burroughs B6x00-7x00 instruction set includes the set of valid operations for the Burroughs B6500, B7500 and later Burroughs large systems, including the current Unisys Clearpath/MCP systems; it does not include the instruction for other Burroughs large systems including the B5000, B5500, B5700 and the B8500. These unique machines have a distinctive design and instruction set. Each word of data is associated with a type, and the effect of an operation on that word can depend on the type. Further, the machines are stack based to the point that they had no user-addressable registers.
Work Flow Language, or WFL ("wiffle") is the process control language for the Burroughs large systems, including the Unisys ClearPath/MCP series, and their operating system Master Control Program. Developed soon after the B5000 in 1961, WFL is the ClearPath equivalent of the Job Control Language (JCL) on IBM mainframes and the shell scripts of Unix-like operating systems. Unlike JCL, WFL is a high-level structured language complete with subroutines with arguments and high-level program control flow instructions. WFL programs are compiled to binary executables like any other MCP subject.
Descriptors are an architectural feature of Burroughs large systems, including the current Unisys Clearpath/MCP systems. Apart from being stack- and tag-based, a notable architectural feature of these systems is that they are descriptor-based. Descriptors are the means of having data that does not reside on the stack such as arrays and objects. Descriptors are also used for string data as in compilers and commercial applications.
The Burroughs B2500 through Burroughs B4900 was a series of mainframe computers developed and manufactured by Burroughs Corporation in Pasadena, California, United States, from 1966 to 1991. They were aimed at the business world with an instruction set optimized for the COBOL programming language. They were also known as Burroughs Medium Systems, by contrast with the Burroughs Large Systems and Burroughs Small Systems.
Systems Programming Language, often shortened to SPL but sometimes known as SPL/3000, was a procedurally-oriented programming language written by Hewlett-Packard for the HP 3000 minicomputer line and first introduced in 1972. SPL was used to write the HP 3000's primary operating system, Multi-Programming Executive (MPE). Similar languages on other platforms were generically referred to as system programming languages, confusing matters.
The figure shows a high-level architecture of the OS 2200 system identifying major hardware and software components. The majority of the Unisys software is included in the subsystems and applications area of the model. For example, the database managers are subsystems and the compilers are applications.