<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Systems_programming</id>
	<title>Systems programming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Systems_programming"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Systems_programming&amp;action=history"/>
	<updated>2026-04-18T15:54:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Systems_programming&amp;diff=231273&amp;oldid=prev</id>
		<title>213.31.164.104: Replace &#039;refimprove&#039; template with &#039;more citations needed&#039; template. Place template at the top of the page rather than near the bottom.</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Systems_programming&amp;diff=231273&amp;oldid=prev"/>
		<updated>2024-11-21T06:27:10Z</updated>

		<summary type="html">&lt;p&gt;Replace &amp;#039;refimprove&amp;#039; template with &amp;#039;more citations needed&amp;#039; template. Place template at the top of the page rather than near the bottom.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Developing programs for computer systems}}&lt;br /&gt;
{{More citations needed|date=November 2024}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Systems programming&amp;#039;&amp;#039;&amp;#039;, or &amp;#039;&amp;#039;&amp;#039;system programming&amp;#039;&amp;#039;&amp;#039;, is the activity of programming&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt; [[computer]] [[system software]]. The primary distinguishing characteristic of systems programming when compared to [[application programming]] is that application programming aims to produce software which provides services to the user directly (e.g. [[word processor]]), whereas systems programming aims to produce software and [[software platform]]s which provide services to other software, are performance constrained, or both (e.g. [[operating system]]s, [[computational science]] applications, [[game engine]]s, [[Automation#Industrial automation|industrial automation]], and [[software as a service]] applications).&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{cite web|title=Panel: Systems Programming in 2014 and Beyond|url=https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/Panel-Systems-Programming-Languages-in-2014-and-Beyond|publisher=Microsoft|access-date=4 December 2015}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Systems programming requires a great degree of hardware awareness. Its goal is to achieve efficient use of available resources, either because the software itself is performance-critical or because even small efficiency improvements directly transform into significant savings of time or money.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The following attributes characterize systems programming:&lt;br /&gt;
* The [[programmer]] can make assumptions about the hardware and other properties of the system that the program runs on, and will often exploit those properties, for example by using an [[algorithm]] that is known to be efficient when used with specific hardware.&lt;br /&gt;
* Usually a [[low-level programming language]] or programming language dialect is used so that:&lt;br /&gt;
** Programs can operate in resource-constrained environments&lt;br /&gt;
** Programs can be efficient with little [[Run-time system|runtime]] overhead, possibly having either a small [[runtime library]] or none at all&lt;br /&gt;
** Programs may use direct and &amp;quot;raw&amp;quot; control over memory access and [[control flow]]&lt;br /&gt;
** The programmer may write parts of the program directly in [[assembly language]]&lt;br /&gt;
* Often systems programs cannot be run in a [[debugger]]. Running the program in a [[computer simulation|simulated environment]] can sometimes be used to reduce this problem.{{Dubious|date=April 2024|reason=Most software built using contemporary programming languages can be run in a debugger, but it may not be acceptable to debug software in production or embedded systems.}}&lt;br /&gt;
&lt;br /&gt;
In systems programming, often limited programming facilities are available. The use of [[garbage collection (computer science)|automatic garbage collection]] is not common and [[debugging]] is sometimes hard to do. The [[runtime library]], if available at all, is usually far less powerful, and does less error checking. Because of those limitations, [[System monitoring|monitoring]] and [[data logging|logging]] are often used; [[operating system]]s may have extremely elaborate logging subsystems.&lt;br /&gt;
&lt;br /&gt;
Implementing certain parts in operating systems and networking requires systems programming, for example implementing paging ([[virtual memory]]) or a [[device driver]] for an operating system.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
Originally systems programmers invariably wrote in [[assembly language]]. Experiments with hardware support in [[high level languages]] in the late 1960s led to such languages as [[IBM PL/S|PL/S]], [[BLISS]], [[BCPL]], and extended [[ALGOL]] for [[Burroughs large systems]]. [[Forth (programming language)|Forth]] also has applications as a systems language. &lt;br /&gt;
In the 1970s, [[C (programming language)|C]] became widespread, aided by the growth of [[Unix]].&lt;br /&gt;
More recently a subset of [[C++]] called [[Embedded C++]] has seen some use, for instance it is used in the I/O Kit drivers of [[macOS]].&amp;lt;ref&amp;gt;{{cite web|author1=Apple Inc|title=I/O Kit Device Driver Design Guidelines|url=https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/WritingDeviceDriver/CPluPlusRuntime/CPlusPlusRuntime.html#//apple_ref/doc/uid/TP30000695-BAJIBFDE|website=developer.apple.com|publisher=Apple Inc|access-date=16 September 2014|date=14 August 2009}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
Engineers working at [[Google]] created [[Go (programming language)|Go]] in 2007 to address developer productivity in large [[Distributed computing|distributed systems]], with developer-focused features such as [[Concurrency (computer science)|Concurrency]], [[Garbage collection (computer science)|Garbage Collection]], and faster program [[Compilation (computing)|compilation]] than C and C++.&amp;lt;ref&amp;gt;{{Cite web |title=Go at Google: Language Design in the Service of Software Engineering - The Go Programming Language |url=https://go.dev/talks/2012/splash.article |access-date=2024-04-11 |website=go.dev |language=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
In 2015 [[Rust (programming language)|Rust]] came out, a general-purpose programming language often used in systems programming. Rust was designed with memory safety in mind and to be as performant as C and C++.&lt;br /&gt;
&lt;br /&gt;
== Alternative meaning ==&lt;br /&gt;
For historical reasons, some organizations use the term &amp;#039;&amp;#039;systems programmer&amp;#039;&amp;#039; to describe a job function which would be more accurately termed [[systems administrator]].  This is particularly true in organizations whose computer resources have historically been dominated by [[Mainframe computer|mainframe]]s, although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration of [[IBM mainframes]] often involved the writing of custom [[assembler code]] ([[IBM Basic assembly language and successors|IBM&amp;#039;s Basic Assembly Language]]  (BAL)), which integrated with the [[operating system]] such as [[OS/MVS]], [[DOS/VSE]] or [[VM/CMS]].  Indeed, some [[IBM]] software products had substantial code contributions from customer programming staff. This type of programming is progressively less common, and increasingly done in C rather than Assembly, but the term &amp;#039;&amp;#039;systems programmer&amp;#039;&amp;#039; is still used as the de-facto job title for staff administering IBM mainframes even in cases where they do not regularly engage in systems programming activities.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Ousterhout&amp;#039;s dichotomy]]&lt;br /&gt;
* [[System programming language]]&lt;br /&gt;
* [[Scripting language]]&lt;br /&gt;
* [[Interrupt handler]]&lt;br /&gt;
* [[Computer programming|Computer Programming]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
* [https://catalog.loc.gov/vwebv/holdingsInfo?&amp;amp;bibId=4177732 Systems Programming] by [[John J. Donovan]]&lt;br /&gt;
&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Systems Programming}}&lt;br /&gt;
[[Category:Computer programming]]&lt;br /&gt;
[[Category:System software]]&lt;/div&gt;</summary>
		<author><name>213.31.164.104</name></author>
	</entry>
</feed>