System programming language

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

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 refers to these language as Machine Oriented High Order Languages, or mohol.[1]

General-purpose programming languages tend to focus on generic features in order to allow programs written in the language to use the same code on different platforms. Examples of such languages include ALGOL and Pascal. This generic quality typically comes at the cost of denying direct access to the machine's internal workings, and this often has negative impacts on performance.

System languages, in contrast, are designed not for compatibility but performance and ease of access to the underlying hardware while still providing high-level programming concepts like structured programming. Examples include JOVIAL and BCPL, both of which are similar to ALGOL in syntax but tuned to their respective platforms.

Some languages straddle the two domains, the canonical example being the C programming language, which is widely used as both a systems and application programming language. Modern languages such as Rust and Swift also bridge the gap between these spaces.

Features[edit]

In contrast with application languages, system programming languages typically offer more-direct access to the physical hardware of the machine: an archetypical system programming language in this sense was BCPL. System programming languages often lack built-in input/output (I/O) facilities because a system-software project usually develops its own I/O mechanisms or builds on top of basic monitor I/O or screen management facilities. The distinction between languages used for system programming and application programming became blurred over time with the widespread popularity of PL/I, C and Pascal.

History[edit]

The earliest system software was written in assembly language primarily because there was no alternative, but also for reasons including efficiency of object code, compilation time, and ease of debugging. Application languages such as FORTRAN were used for system programming, although they usually still required some routines to be written in assembly language.[2]

Mid-level languages[edit]

Mid-level languages "have much of the syntax and facilities of a higher level language, but also provide direct access in the language (as well as providing assembly language) to machine features."[2] The earliest of these was ESPOL on Burroughs mainframes in about 1960, followed by Niklaus Wirth's PL360 (initially written on a Burroughs system as a cross compiler), which had the general syntax of ALGOL 60 but whose statements directly manipulated CPU registers and memory. Other languages in this category include MOL-360 and PL/S.

As an example, a typical PL360 statement is R9 := R8 and R7 shll 8 or R6, signifying that registers 8 and 7 should be and'ed together, the result shifted left 8 bits, the result of that or'ed with the contents of register 6, and the final result placed into register 9.[3]

Higher-level languages[edit]

While PL360 is at the semantic level of assembly language, another kind of system programming language operates at a higher semantic level, but has specific extensions designed to make the language suitable for system programming. An early example of this kind of language is LRLTRAN,[4] which extended Fortran with features for character and bit manipulation, pointers, and directly addressed jump tables.

Subsequently, languages such as C were developed, where the combination of features was sufficient to write system software, and a compiler could be developed that generated efficient object programs on modest hardware. Such a language generally omits features that cannot be implemented efficiently, and adds a small number of machine-dependent features needed to access specific hardware capabilities; inline assembly code, such as C's asm statement, is often used for this purpose. Although many such languages were developed,[5] C and C++ are the ones that have survived.

System Programming Language (SPL) is also the name of a specific language on the HP 3000 computer series, used for its operating system HP Multi-Programming Executive, and other parts of its system software.

Major languages[edit]

Language Originator Birth date Influenced by Used for
ESPOL Burroughs Corporation 1961 Algol 60 MCP
PL/I IBM, SHARE 1964 Algol, FORTRAN, some COBOL Multics
PL360 Niklaus Wirth 1968 Algol 60 Algol W
C Dennis Ritchie 1969 BCPL Most operating system kernels, including Unix-like systems.
PL/S IBM 196x PL/I OS/360
BLISS Carnegie Mellon University 1970 Algol-PL/I[6] VMS (portions)
PL/8 IBM 197x PL/I AIX
PL-6 Honeywell, Inc. 197x PL/I CP-6
SYMPL CDC 197x JOVIAL NOS subsystems, most compilers, FSE editor
C++ Bjarne Stroustrup 1979 C, Simula See C++ Applications[7]
Ada Jean Ichbiah, S. Tucker Taft 1983 Algol 68, Pascal, C++, Java, Eiffel Embedded systems, OS kernels, compilers, games, simulations, CubeSat, air traffic control, and avionics
D Digital Mars 2001 C++ Multiple domains
Rust Mozilla Research[8] 2010 C++, Haskell, Erlang, Ruby Servo layout engine, Redox OS
Swift Apple Inc. 2014 C, Objective-C, D, Rust macOS, iOS app development [a]

See also[edit]

Notes[edit]

References[edit]

  1. ^ van der Poel and, W.L.; Maarssen, L.A., eds. (1973). Machine Oriented Higher Level Languages (MOHL). Trondheim (Norway). Missing or empty |title= (help)
  2. ^ a b Sammet, Jean (October 1971). "Brief Survey of Languages Used for Systems Implementation". ACM SIGPLAN Notices. 6 (9): 1–19. doi:10.1145/942596.807055.
  3. ^ Wirth, Niklaus. PL360, A Programming Language for the 360 Computers. Journal of the ACM, 15(1): 37-74.
  4. ^ Mendicino, Sam F., Robert A. Hughes, Jeanne T. Martin, Frank H. McMahon, John E. Ranelletti, and Richard G. Zwakenberg. The LRLTRAN Compiler. C. ACM 11(11): 747-755.
  5. ^ Poel, W. L. van der, and Maarssen, L. A. Machine oriented higher level languages: proceedings of the IFIP Working Conference on Machine Oriented Higher Level Languages, Trondheim, Norway, August 27–31, 1973. International Federation for Information Processing, 1974.
  6. ^ Wulf, W.A.; Russell, D.B.; Haberman, A.N. (December 1971). "BLISS: A Language for Systems Programming". Communications of the ACM. 14 (12): 780–790. CiteSeerX 10.1.1.691.9765. doi:10.1145/362919.362936.
  7. ^ "C++ Applications".
  8. ^ "Mozilla Research". 1 January 2014.

External links[edit]

This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.