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
Systems programming
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|Developing programs for computer systems}} {{More citations needed|date=November 2024}} '''Systems programming''', or '''system programming''', is the activity of programming<ref name=":0" /> [[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).<ref name=":0">{{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}}</ref> 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. == Overview == The following attributes characterize systems programming: * 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. * Usually a [[low-level programming language]] or programming language dialect is used so that: ** Programs can operate in resource-constrained environments ** Programs can be efficient with little [[Run-time system|runtime]] overhead, possibly having either a small [[runtime library]] or none at all ** Programs may use direct and "raw" control over memory access and [[control flow]] ** The programmer may write parts of the program directly in [[assembly language]] * 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.}} 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. 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. == History == 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. In the 1970s, [[C (programming language)|C]] became widespread, aided by the growth of [[Unix]]. 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]].<ref>{{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}}</ref> 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++.<ref>{{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}}</ref> 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++. == Alternative meaning == For historical reasons, some organizations use the term ''systems programmer'' 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'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 ''systems programmer'' 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. == See also == * [[Ousterhout's dichotomy]] * [[System programming language]] * [[Scripting language]] * [[Interrupt handler]] * [[Computer programming|Computer Programming]] == References == {{Reflist}} ==Further reading== * [https://catalog.loc.gov/vwebv/holdingsInfo?&bibId=4177732 Systems Programming] by [[John J. Donovan]] {{Authority control}} {{DEFAULTSORT:Systems Programming}} [[Category:Computer programming]] [[Category:System software]]
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:Authority control
(
edit
)
Template:Cite web
(
edit
)
Template:Dubious
(
edit
)
Template:Fix
(
edit
)
Template:More citations needed
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)