The earliest system software was written in
assembly language mostly because no alternative existed, but also for reasons including efficiency of
object code,
compiling 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 Mid-level languages "have much of the
syntax and facilities of a higher level language, but also provide direct access in the language (and often an assembly language) to machine features."
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, 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 statement, is often used for this purpose. Although many such languages were developed, C and
C++ are the ones which survived. == Major languages ==