Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
System programming language
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Class of computer programming languages}} {{hatnote|For the HP language of the same name, see [[Systems Programming Language]].}} {{bots|deny=FrescoBot}} {{More citations needed|date=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 W. Dijkstra|Edsger Dijkstra]] referred to these languages as '''machine oriented high order languages''', or '''mohol'''.<ref name="MOHLconfer">{{cite conference |editor-last=van der Poel |editor-first=W. L. |editor-last2=Maarssen |editor-first2=L. A. |title=Machine oriented higher level languages |conference=IFIP Working Conference on Machine Oriented Higher Level Languages (MOHL) |publisher=International Federation for Information Processing |location=Trondheim, Norway |date=27β31 August 1973}} Proceedings published 1974.</ref> 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 (programming language)|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 [[Executive Systems Problem Oriented Language|ESPOL]] and [[Systems Programming Language|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 (programming language)|C]], which is used widely for both system and application programming. [[PL/I]] was an early example. Some modern languages also do this such as [[Rust (programming language)|Rust]] and [[Swift (programming language)|Swift]]. == 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]] (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 (programming language)|C]] and [[Pascal (programming language)|Pascal]]. == History == 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.<ref name=Sammet>{{cite journal |last=Sammet |first=Jean |title=Brief Survey of Languages Used for Systems Implementation |journal=ACM SIGPLAN Notices |date=October 1971 |volume=6 |issue=9 |pages=1β19 |doi=10.1145/942596.807055|doi-access=free }}</ref> ===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."<ref name=Sammet /> The earliest of these was [[Executive Systems Problem Oriented Language|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 <code>R9 := R8 and R7 shll 8 or R6</code>, 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.<ref>{{Cite journal |last=Wirth |first=Niklaus |author-link=Niklaus Wirth |title=PL360, A Programming Language for the 360 Computers |journal=Journal of the ACM |date=1968 |volume=15 |issue=1 |pages=37β74|doi=10.1145/321439.321442 }}</ref> ===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,<ref>{{Cite journal |last1=Mendicino |first1=Sam F. |last2=Hughes |first2=Robert A. |last3=Martin |first3=Jeanne T. |last4=McMahon |first4=Frank H. |last5=Ranelletti |first5=John E. |last6=Zwakenberg |first6=Richard G. |title=The LRLTRAN Compiler |journal=Communications of the ACM |date=1968 |volume=11 |issue=11 |pages=747β755|doi=10.1145/364139.364154 }}</ref> 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 {{code|lang=c|asm}} statement, is often used for this purpose. Although many such languages were developed,<ref name="MOHLconfer"/> C and [[C++]] are the ones which survived. == Major languages == {| class="wikitable sortable collapsible" |- ! Language !! Originator !! Birth date !! Influenced by !! Used for |- | [[JOVIAL]] || [[System Development Corporation]] || 1960 || [[ALGOL 58]] || Many systems, mostly military |- | [[Executive Systems Problem Oriented Language|ESPOL]] || [[Burroughs Corporation]] || 1961 || [[ALGOL 60]] || [[MCP (Burroughs Large Systems)|MCP]] |- | [[PL/I]] || [[IBM]], [[SHARE (computing)|SHARE]] || 1964 || ALGOL, FORTRAN, some COBOL || [[Multics]], [[Stratus VOS]]. Dialects used in [[PRIMOS]], [[Control Program Facility|IBM CPF]], [[IBM OS/400]]. |- | [[PL/S]] || [[IBM]] || 1960s || [[PL/I]] || [[OS/360 and successors]] |- | [[Edinburgh IMP]] || [[University of Edinburgh]] || 1966 || [[ALGOL 60]], [[Atlas Autocode]] || [[Edinburgh Multiple Access System]] |- | [[BCPL]] || [[Martin Richards (computer scientist)|Martin Richards]] || 1967 || [[CPL (programming language)|CPL]] || [[Xerox Alto]] Executive, [[TRIPOS]] |- | [[PL360]] || [[Niklaus Wirth]] || 1968 || ALGOL 60 || [[ALGOL W]] |- | [[Pascal (programming language)|Pascal]] || [[Niklaus Wirth]] || 1970 || [[ALGOL W]] || [[Domain/OS|Apollo AEGIS]], [[MacApp]], [[UCSD Pascal|UCSD p-System]], [[VAXELN]], [[Apple Lisa#Lisa OS|Lisa OS]] |- | [[BLISS]] || [[Carnegie Mellon University]] || 1970 || ALGOL, PL/I<ref>{{cite journal |last1=Wulf |first1=W. A. |last2=Russell |first2=D. B. |last3=Haberman |first3=A. N. |title=BLISS: A Language for Systems Programming |journal=Communications of the ACM |date=December 1971 |volume=14 |issue=12 |pages=780β790 |doi=10.1145/362919.362936 |citeseerx=10.1.1.691.9765}}</ref> || [[OpenVMS]] (portions), [[Hydra (operating system)|Hydra]] |- | [[Language for Systems Development]] (LSD) || R. Daniel Bergeron, et al. (Brown University) || 1971 || [[PL/I]] || |- | [[C (programming language)|C]] || [[Dennis Ritchie]] || 1972 || [[BCPL]], [[B (programming language)|B]] || Many [[Kernel (operating system)|operating system kernels]], including most [[Unix-like]] systems |- | [[System Programming Language]] (SPL) || [[Hewlett-Packard]] || 1972 || [[ALGOL 60]], [[Executive Systems Problem Oriented Language|ESPOL]] || [[HP 3000]] system software, including [[HP Multi-Programming Executive|MPE]] |- | [[PL/M]] || [[Gary Kildall]] || 1973 || [[PL/I]], [[XPL]] || [[CP/M]], [[ISIS (operating system)|ISIS]], [[iRMX]] |- | [[NEWP]] || Burroughs || 1970s || ESPOL, ALGOL || MCP |- | [[PL.8]] || [[IBM]] || 1970s || [[PL/I]] || compiler development, [[IBM AIX|AIX]] (versions 1 and 2 only), IBM mainframe firmware |- | [[PL-6]] || [[Honeywell, Inc.]] || 1970s || [[PL/I]] || [[Honeywell CP-6|CP-6]] |- | [[SYMPL]] || [[Control Data Corporation|CDC]] || 1970s || [[JOVIAL]] || [[NOS (operating system)|NOS]] subsystems, most compilers, FSE editor |- | [[Transaction Application Language]] (TAL) || [[Tandem Computers]] || 1970s || [[System Programming Language|SPL]], [[C (programming language)|C]], [[Pascal (programming language)|Pascal]] || [[NonStop OS]] |- | [[Mesa (programming language)|Mesa]] || [[Xerox PARC]] || 1976 || [[Pascal (programming language)|Pascal]], [[ALGOL 68]] || [[Pilot (operating system)|Pilot]], [[GlobalView]] |- | [[Modula-2]] || [[Niklaus Wirth]] || 1978 || [[Pascal (programming language)|Pascal]], [[Mesa (programming language)|Mesa]] || [[Lilith (computer)#Operating_system|Medos-2]], portions of [[IBM OS/400]] and [[PRIMOS]]. [[Modula-2+]] variant used in [[ARX (operating system)|ARX]], [[DEC Firefly#Software|Topaz]]. |- | [[C++]] |[[Bjarne Stroustrup]] || 1979 || [[C (programming language)|C]], [[Simula]] || [[BeOS]], [[Haiku (operating system)|Haiku]], [[Serenity OS]], [[Symbian]]. Portions of [[IBM i]], [[macOS]], [[Microsoft Windows]]. |- | [[S3 (programming language)|S3]] || [[International Computers Limited|ICL]] || 1980s|| [[ALGOL 68]] || [[ICL VME]] || |- | [[Ada (programming language)|Ada]] || [[Jean Ichbiah]], S. Tucker Taft || 1983 || [[ALGOL 68]], [[Pascal (programming language)|Pascal]], [[C++]], [[Eiffel (programming language)|Eiffel]] || Military,<ref>{{cite web |url=https://www.adacore.com/uploads/customers/CaseStudy_Eurofighter.pdf|title=Case Study, BAE Systems Eurofighter Typhoon}}</ref> aerospace<ref>{{cite web | url=https://aviation.stackexchange.com/questions/3608/what-programming-languages-are-used-for-equipment-onboard-aircraft#15486 | title=What programming languages are used for equipment onboard aircraft? }}</ref> mass transportation,<ref>{{cite web | url=http://www.railfaneurope.net/tgv/signals.html | title=TGVweb - the TGV Signaling System }}</ref> high-integrity computation, operating system kernels,<ref>{{cite web|url=https://ironclad.nongnu.org/|title=Ironclad}}</ref><ref>{{cite web|url=https://m2os.unican.es/|title=M2OS. RTOS with simple tasking support for small microcontrollers}}</ref><ref>{{cite web | url=https://github.com/jgrivera67/HiRTOS | title=Jgrivera67/HiRTOS | website=[[GitHub]] }}</ref> [[iMAX 432]], [[BiiN#Description|BiiN/OS]] |- | [[Oberon (programming language)|Oberon]] || [[Niklaus Wirth]] || 1987 || [[Modula-2]] || [[Oberon (operating system)]]. |- | [[Modula-3]] || [[DEC Systems Research Center|DEC SRC]], [[Olivetti]] || 1988 || [[Modula-2+]] || [[SPIN (operating system)|SPIN]] |- | [[D (programming language)|D]] || [[Digital Mars]] || 2001 || [[C++]] || |- | [[Nim (programming language)|Nim]] || Andreas Rumpf || 2008 || [[Python (programming language)|Python]], [[Ada (programming language)|Ada]], [[Lisp (programming language)|Lisp]], [[Oberon (programming language)|Oberon]], [[C++]], [[Modula-3]], [[Object Pascal]] || |- | [[Go (programming language)|Go]] || [[Google]] || 2009 || [[Oberon (programming language)|Oberon]], [[C (programming language)|C]], [[Pascal (programming language)|Pascal]] || [[Kubernetes]], [[Docker (software)|Docker]] |- | [[Rust (programming language)|Rust]] || [[Mozilla Research]]<ref>{{cite web |url=https://www.mozilla.org/en-US/research/projects/ |title=Mozilla Research Projects |archive-url=https://web.archive.org/web/20140104070627/https://www.mozilla.org/en-US/research/projects/ |archive-date=2014-01-04 |url-status=dead}}</ref> || 2010 || [[C++]], [[Haskell (programming language)|Haskell]], [[Erlang (programming language)|Erlang]], [[Ruby (programming language)|Ruby]] || [[Servo (software)|Servo]], [[Redox OS]]. Portions of the [[Linux kernel]] and of [[Microsoft Windows]]. |- | [[Swift (programming language)|Swift]] || [[Apple Inc.]] || 2014 || [[C (programming language)|C]], [[Objective-C]], [[D (programming language)|D]], [[Rust (programming language)|Rust]] || [[macOS]], [[iOS]], [[watchOS]], and [[tvOS]] app development {{Efn|Swift uses [[Automatic Reference Counting]]}} |- |[[Zig (programming language)|Zig]] |Andrew Kelley |2016 |[[C (programming language)|C]], [[C++]], [[LLVM IR]], [[Go (programming language)|Go]], [[Rust (programming language)|Rust]] | |- |[[Mojo (programming language)|Mojo]] |Modular Inc.<ref>{{Cite web |title=Modular Inc.. |url=https://www.modular.com/ |access-date=2024-03-25 |website=www.modular.com |language=en}}</ref> |2023 |[[C (programming language)|C]], [[C++]], [[Python (programming language)|Python]], [[Rust (programming language)|Rust]], [[Swift (programming language)|Swift]], [[Zig (programming language)|Zig]] | |} == See also == {{Portal|Computer programming}} * [[Ousterhout's dichotomy]] * [[PreScheme]] == Notes == {{Notelist}} == References == {{Reflist|30em}} == 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}} [[Category:Programming language topics]] [[Category:System software]] [[Category:Systems programming languages]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Bots
(
edit
)
Template:Cite conference
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Code
(
edit
)
Template:Efn
(
edit
)
Template:Hatnote
(
edit
)
Template:More citations needed
(
edit
)
Template:Notelist
(
edit
)
Template:Portal
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)