Este artículo necesita citas adicionales para su verificación . ( abril de 2022 ) |
Un lenguaje de programación de sistemas es un lenguaje de programación utilizado para la programación de sistemas ; dichos lenguajes están diseñados para escribir software de sistemas , que generalmente requiere enfoques de desarrollo diferentes en comparación con el software de aplicación. Edsger Dijkstra se refirió a estos lenguajes como lenguajes de orden superior orientados a máquinas o mohol . [1]
Los lenguajes de programación de propósito general tienden a centrarse en características genéricas para permitir que los programas escritos en el lenguaje utilicen el mismo código en diferentes plataformas. Algunos ejemplos de estos lenguajes son ALGOL y Pascal . Esta cualidad genérica suele tener como consecuencia la negación del acceso directo al funcionamiento interno de la máquina, lo que suele tener efectos negativos en el rendimiento.
Los lenguajes de sistema, por el contrario, no están diseñados para la compatibilidad, sino para el rendimiento y la facilidad de acceso al hardware subyacente, al mismo tiempo que ofrecen conceptos de programación de alto nivel como la programación estructurada . Algunos ejemplos son ESPOL y SPL , ambos similares a ALGOL en sintaxis, pero adaptados a sus respectivas plataformas. Otros son multiplataforma, pero están diseñados para funcionar cerca del hardware, como BLISS , JOVIAL y BCPL .
Algunos lenguajes abarcan los dominios de sistemas y aplicaciones, y cubren la brecha entre estos usos. El ejemplo canónico es C , que se utiliza ampliamente tanto para la programación de sistemas como para la de aplicaciones. Algunos lenguajes modernos también hacen esto, como Rust y Swift .
A diferencia de los lenguajes de aplicación, los lenguajes de programación de sistemas suelen ofrecer un acceso más directo al hardware físico de la máquina: un lenguaje de programación de sistemas arquetípico en este sentido fue BCPL . Los lenguajes de programación de sistemas a menudo carecen de funciones de entrada/salida (E/S) integradas porque un proyecto de software de sistema generalmente desarrolla sus propios mecanismos de E/S o se basa en funciones básicas de E/S de monitor o de gestión de pantalla. La distinción entre los lenguajes utilizados para la programación de sistemas y la programación de aplicaciones se volvió borrosa con el tiempo con la popularidad generalizada de PL/I , C y Pascal .
El primer software de sistemas se escribió en lenguaje ensamblador, principalmente porque no había otra alternativa, pero también por razones como la eficiencia del código objeto, el tiempo de compilación y la facilidad de depuración. Se utilizaron lenguajes de aplicación como FORTRAN para la programación de sistemas, aunque por lo general todavía requerían que algunas rutinas se escribieran en lenguaje ensamblador. [2]
Los lenguajes de nivel medio "poseen gran parte de la sintaxis y las facilidades de un lenguaje de nivel superior, pero también proporcionan acceso directo en el lenguaje (además de proporcionar lenguaje ensamblador) a las características de la máquina". [2] El primero de ellos fue ESPOL en mainframes Burroughs en 1960 aproximadamente, seguido por PL360 de Niklaus Wirth (escrito por primera vez en un sistema Burroughs como compilador cruzado ), que tenía la sintaxis general de ALGOL 60 pero cuyas declaraciones manipulaban directamente los registros y la memoria de la CPU. Otros lenguajes de esta categoría incluyen MOL-360 y PL/S .
Como ejemplo, una declaración PL360 típica es R9 := R8 and R7 shll 8 or R6
, lo que significa que los registros 8 y 7 deben ser unidos mediante la operación AND, el resultado desplazado 8 bits a la izquierda, el resultado de esa operación OR con el contenido del registro 6 y el resultado final colocado en el registro 9. [3]
Si bien PL360 se encuentra en el nivel semántico del lenguaje ensamblador, otro tipo de lenguaje de programación de sistemas opera en un nivel semántico más alto, pero tiene extensiones específicas diseñadas para que el lenguaje sea adecuado para la programación de sistemas. Un ejemplo temprano de este tipo de lenguaje es LRLTRAN, [4] que amplió Fortran con funciones para manipulación de caracteres y bits, punteros y tablas de saltos direccionadas directamente.
Posteriormente, se desarrollaron lenguajes como C, donde la combinación de características era suficiente para escribir software de sistema, y se podía desarrollar un compilador que generaba programas de objetos eficientes en hardware modesto. Este tipo de lenguaje generalmente omite características que no se pueden implementar de manera eficiente, y agrega una pequeña cantidad de características dependientes de la máquina necesarias para acceder a capacidades específicas del hardware; el código ensamblador en línea , como asm
la declaración de C, se usa a menudo para este propósito. Aunque se desarrollaron muchos de estos lenguajes, [1] C y C++ son los que sobrevivieron.