System programming language
A system programming language usually refers to a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared to application software.
System software is computer software designed to operate and control the computer hardware, and to provide a platform for running application software. System software includes software categories such as operating systems, utility software, device drivers, compilers, and linkers.
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 facilities because a system-software project usually develops its own input/output or builds on basic monitor I/O or screen management services facilities. The distinction between languages for system programming and applications programming became blurred with widespread popularity of PL/I, C and Pascal.
The earliest system software was written in assembly language 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 "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." One of the earliest of these mid-level programming languages was PL360, which had the general syntax of ALGOL 60, but whose statements directly manipulated CPU registers and memory. Other languages in this category are 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 result placed into register 9.
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 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, 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.
|ESPOL||Burroughs Corporation||1961||Algol 60||MCP|
|PL360||Niklaus Wirth||1968||Algol 60||Algol W|
|BLISS||Carnegie Mellon University||1970||Algol-PL/I||VMS (portions)|
|SYMPL||CDC||197x||JOVIAL||NOS subsystems, most compilers, FSE editor|
|C++||Bjarne Stroustrup||1979||C, Simula||See C++ Applications|
|Go||2009||C, Pascal, CSP||Google minor systems|
|Rust||Mozilla Research||2012||C++, Haskell, Erlang, Ruby||Servo layout engine|
- Sammet, Jean (October 1971). "Brief Survey of Languages Used for Systems Implementation". SCM SIGPLAN Notices 6 (9): 1–19. doi:10.1145/942596.807055.
- Wirth, Niklaus. PL360, A Programming Language for the 360 Computers. Journal of the ACM, 15(1): 37-74.
- 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.
- 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.
- Wulf, W.A.; Russell, D.B., Haberman, A.N., (December 1971). "BLISS: A Language for Systems Programming". CACM 14 (12): 780-790. Retrieved January 11, 2014.
- "Go FAQ: Is Google using Go internally?". Retrieved 15 November 2013.
- "Mozilla Research". 1 January 2014.
- Corbató, Fernando (1969-05-06). "PL/I as a Tool for System Programming". Datamation: 68–76. Retrieved 2012-01-23.