This article needs additional citations for verification. (April 2022) |
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.[1]
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 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. 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. Some modern languages also do this such as Rust and Swift.
Features
editIn 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 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
editThe 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
editMid-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 (first 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
editWhile 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 abilities; inline assembly code, such as C's asm
statement, is often used for this purpose. Although many such languages were developed,[1] C and C++ are the ones which survived.
Major languages
editLanguage | Originator | Birth date | Influenced by | Used for | |
---|---|---|---|---|---|
JOVIAL | System Development Corporation | 1960 | ALGOL 58 | Many systems, mostly military | |
ESPOL | Burroughs Corporation | 1961 | ALGOL 60 | MCP | |
PL/I | IBM, SHARE | 1964 | ALGOL, FORTRAN, some COBOL | Multics | |
PL/S | IBM | 1960's | PL/I | OS/360 and successors | |
PL360 | Niklaus Wirth | 1968 | ALGOL 60 | ALGOL W | |
Pascal | Niklaus Wirth | 1970 | ALGOL W | Apollo Computer Aegis, Apple MacApp, UCSD p-System | |
BLISS | Carnegie Mellon University | 1970 | ALGOL-PL/I[5] | VMS (portions) | |
Language for Systems Development (LSD) | R. Daniel Bergeron, et al. (Brown University) | 1971 | PL/I | ||
C | Dennis Ritchie | 1972 | BCPL, B | Most operating system kernels, including Unix-like systems | |
System Programming Language (SPL) | Hewlett-Packard | 1972 | ALGOL 60, ESPOL | HP 3000 system software, including MPE | |
NEWP | Burroughs | 1970's | ESPOL, ALGOL | MCP | |
PL.8 | IBM | 1970's | PL/I | compiler development, AIX (versions 1 and 2 only), IBM mainframe firmware | |
PL-6 | Honeywell, Inc. | 1970's | PL/I | CP-6 | |
SYMPL | CDC | 1970's | JOVIAL | NOS subsystems, most compilers, FSE editor | |
C++ | Bjarne Stroustrup | 1979 | C, Simula | GUI applications (Qt, Windows, etc.), games (Unreal Engine) | |
S3 | ICL | 1980s | ALGOL 68 | ICL VME | |
Ada | Jean Ichbiah, S. Tucker Taft | 1983 | ALGOL 68, Pascal, C++, Eiffel | Military,[6] aerospace[7] mass transportation,[8] high-integrity computation, and operating system kernels[9][10][11] | |
D | Digital Mars | 2001 | C++ | ||
Nim | Andreas Rumpf | 2008 | Python, Ada, Lisp, Oberon, C++, Modula-3, Object Pascal | ||
Go | 2009 | Oberon, C, Pascal | Kubernetes, Docker | ||
Mojo | Modular Inc.[12] | 2023 | C, C++, Python, Rust, Swift, Zig | ||
Rust | Mozilla Research[13] | 2010 | C++, Haskell, Erlang, Ruby | Servo, Redox OS, Linux kernel | |
Swift | Apple Inc. | 2014 | C, Objective-C, D, Rust | macOS, iOS, watchOS, and tvOS app development [a] | |
Zig | Andrew Kelley | 2016 | C, C++, LLVM IR, Go, Rust |
See also
editNotes
edit- ^ Swift uses Automatic Reference Counting
References
edit- ^ a b van der Poel, W. L.; Maarssen, L. A., eds. (27–31 August 1973). Machine oriented higher level languages. IFIP Working Conference on Machine Oriented Higher Level Languages (MOHL). Trondheim, Norway: International Federation for Information Processing. Proceedings published 1974.
- ^ 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.
- ^ Wirth, Niklaus (1968). "PL360, A Programming Language for the 360 Computers". Journal of the ACM. 15 (1): 37–74. doi:10.1145/321439.321442.
- ^ Mendicino, Sam F.; Hughes, Robert A.; Martin, Jeanne T.; McMahon, Frank H.; Ranelletti, John E.; Zwakenberg, Richard G. (1968). "The LRLTRAN Compiler". Communications of the ACM. 11 (11): 747–755. doi:10.1145/364139.364154.
- ^ 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.
- ^ "Case Study, BAE Systems Eurofighter Typhoon" (PDF).
- ^ "What programming languages are used for equipment onboard aircraft?".
- ^ "TGVweb - the TGV Signaling System".
- ^ "Ironclad".
- ^ "M2OS. RTOS with simple tasking support for small microcontrollers".
- ^ "Jgrivera67/HiRTOS". GitHub.
- ^ "Modular Inc." www.modular.com. Retrieved 2024-03-25.
- ^ "Mozilla Research Projects". Archived from the original on 2014-01-04.
External links
edit- Corbató, Fernando (1969-05-06). "PL/I as a Tool for System Programming". Datamation: 68–76. Archived from the original on 2012-09-21. Retrieved 2012-01-23.