A system programming language is a
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
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.
[ Proceedings published 1974.]
General-purpose programming languages tend to focus on generic features to allow programs written in the language to use the same code on different platforms. Examples of such languages include
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
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 effects on performance.
System languages, in contrast, are designed not for compatibility, but for performance and ease of access to the underlying hardware while still providing high-level programming concepts like
structured programming Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making specific disciplined use of the structured control flow constructs of selection ( if/then/else) and repet ...
. Examples include
ESPOL and
SPL, both of which are similar to ALGOL in syntax but tuned to their respective platforms. Others are cross-platform but designed to work close to the hardware, like
BLISS,
JOVIAL and
BCPL.
Some languages straddle the system and application domains, bridging the gap between these uses. The canonical example is
C, which is used widely for both system and application programming.
PL/I
PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language initially developed by IBM. It is designed for scientific, engineering, business and system programming. It has b ...
was an early example. Some modern languages also do this such as
Rust and
Swift
Swift or SWIFT most commonly refers to:
* SWIFT, an international organization facilitating transactions between banks
** SWIFT code
* Swift (programming language)
* Swift (bird), a family of birds
It may also refer to:
Organizations
* SWIF ...
.
Features
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
In computing, input/output (I/O, i/o, or informally io or IO) is the communication between an information processing system, such as a computer, and the outside world, such as another computer system, peripherals, or a human operator. Inputs a ...
(I/O) facilities because a system-software project usually develops its own I/O mechanisms or builds on 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
PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language initially developed by IBM. It is designed for scientific, engineering, business and system programming. It has b ...
,
C and
Pascal.
History
The earliest system software was written in
assembly language
In computing, assembly language (alternatively assembler language or symbolic machine code), often referred to simply as assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence bet ...
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.
Mid-level languages
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."
The earliest of these was
ESPOL on Burroughs mainframes in about 1960, followed by
Niklaus Wirth
Niklaus Emil Wirth ( IPA: ) (15 February 1934 – 1 January 2024) was a Swiss computer scientist. He designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Tu ...
's
PL360 (first written on a Burroughs system as a
cross compiler), which had the general syntax of
ALGOL 60
ALGOL 60 (short for ''Algorithmic Language 1960'') is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a ...
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.
Higher-level languages
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,
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
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
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 abilities;
inline assembly code, such as C's statement, is often used for this purpose. Although many such languages were developed,
C and
C++ are the ones which survived.
Major languages
See also
*
Ousterhout's dichotomy
*
PreScheme
Notes
References
External links
* {{cite journal , title=PL/I as a Tool for System Programming , journal=Datamation , date=1969-05-06 , first=Fernando , last=Corbató , pages=68–76 , url=http://home.roadrunner.com/~pflass/PLI/plisprg.html , access-date=2012-01-23 , archive-url=https://web.archive.org/web/20120921035455/http://home.roadrunner.com/~pflass/PLI/plisprg.html , archive-date=2012-09-21 , url-status=dead
Programming language topics
System software
Systems programming languages