Lenguaje de programación de sistemas

Clase de lenguajes de programación informática

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 .

Características

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 .

Historia

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]

Idiomas de nivel medio

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]

Lenguajes de nivel superior

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 asmla 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.

Idiomas principales

IdiomaAutorFecha de nacimientoInfluenciado porUtilizado para
JOVIALCorporación de desarrollo de sistemas1960ALGOL 58Muchos sistemas, en su mayoría militares.
ESPOLCorporación Burroughs1961ALGOL 60PCM
PL/YoIBM , COMPARTIR1964ALGOL, FORTRAN, algo de COBOLMultics
PL/SIBMAños 1960PL/YoOS/360 y sucesores
PL360Niklaus Wirth1968ALGOL 60ALGOL W
PascalNiklaus Wirth1970ALGOL WComputadora Apollo Aegis, Apple MacApp , sistema UCSD p
DICHAUniversidad Carnegie Mellon1970ALGOL-PL/I [5]VMS (porciones)
Lenguaje para el desarrollo de sistemas (LSD)R. Daniel Bergeron y otros (Universidad de Brown)1971PL/Yo
doDennis Ritchie1972BCP , BLa mayoría de los núcleos de sistemas operativos , incluidos los sistemas tipo Unix
Lenguaje de programación de sistemas (SPL)Hewlett Packard1972ALGOL 60 , ESPOLSoftware del sistema HP 3000 , incluido MPE
NUEVOPBurroughsDécada de 1970ESPOL, ALGOLPCM
PL.8IBMDécada de 1970PL/YoDesarrollo de compiladores, AIX (solo versiones 1 y 2), firmware de mainframe IBM
PL-6Compañía: Honeywell, Inc.Década de 1970PL/YoCP-6
SIMPLEMENTECentros para el Control y la Prevención de EnfermedadesDécada de 1970JOVIALSubsistemas NOS , la mayoría de los compiladores, editor FSE
C++Bjarne Stroustrup1979C , SimulaAplicaciones GUI ( Qt , Windows, etc.), juegos ( Unreal Engine )
S3LCIDécada de 1980ALGOL 68VME de la CCI
AdaJean Ichbiah y S. Tucker Taft1983ALGOL 68 , Pascal , C++ , EiffelMilitares, [6] aeroespaciales , [7] transporte masivo, [8] computación de alta integridad y núcleos de sistemas operativos [9] [10] [11]
DMarte digital2001C++
NimAndreas Rumpf2008Python , Ada , Lisp , Oberon , C++ , Modula-3 , Object Pascal
IrGoogle2009Oberón , C , PascalKubernetes , Docker
MojoModular Inc. [12]2023C , C++ , Python , Rust , Swift , Zig
ÓxidoInvestigación de Mozilla [13]2010C++ , Haskell , Erlang , RubyServo , sistema operativo Redox , núcleo Linux
RápidoCompañía Inc. de Apple.2014C , Objetivo-C , D , ÓxidoDesarrollo de aplicaciones para macOS , iOS , watchOS y tvOS [a]
ZigAndrew Kelley2016C , C++ , LLVM IR , Go , Rust

Véase también

Notas

Referencias

  1. ^ ab van der Poel, WL; Maarssen, LA, eds. (27–31 de agosto de 1973). Lenguajes de alto nivel orientados a máquinas . Conferencia de trabajo de la IFIP sobre lenguajes de alto nivel orientados a máquinas (MOHL). Trondheim, Noruega: Federación Internacional para el Procesamiento de la Información.Actas publicadas en 1974.
  2. ^ ab Sammet, Jean (octubre de 1971). "Breve estudio de los lenguajes utilizados para la implementación de sistemas". ACM SIGPLAN Notices . 6 (9): 1–19. doi : 10.1145/942596.807055 .
  3. ^ Wirth, Niklaus (1968). "PL360, un lenguaje de programación para las computadoras 360". Revista de la ACM . 15 (1): 37–74. doi :10.1145/321439.321442.
  4. ^ Mendicino, Sam F.; Hughes, Robert A.; Martin, Jeanne T.; McMahon, Frank H.; Ranelletti, John E.; Zwakenberg, Richard G. (1968). "El compilador LRLTRAN". Comunicaciones de la ACM . 11 (11): 747–755. doi :10.1145/364139.364154.
  5. ^ Wulf, WA; Russell, DB; Haberman, AN (diciembre de 1971). "BLISS: Un lenguaje para la programación de sistemas". Comunicaciones de la ACM . 14 (12): 780–790. CiteSeerX 10.1.1.691.9765 . doi :10.1145/362919.362936. 
  6. ^ "Estudio de caso: BAE Systems Eurofighter Typhoon" (PDF) .
  7. ^ "¿Qué lenguajes de programación se utilizan para los equipos a bordo de los aviones?".
  8. ^ "TGVweb - el sistema de señalización TGV".
  9. ^ "Acorazado".
  10. ^ "M2OS. RTOS con soporte de tareas simples para pequeños microcontroladores".
  11. ^ "Jgrivera67/HiRTOS". GitHub .
  12. ^ "Modular Inc." www.modular.com . Consultado el 25 de marzo de 2024 .
  13. ^ "Proyectos de investigación de Mozilla". Archivado desde el original el 4 de enero de 2014.
  • Corbató, Fernando (1969-05-06). "PL/I como herramienta para la programación de sistemas". Datamation : 68–76. Archivado desde el original el 2012-09-21 . Consultado el 2012-01-23 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Lenguaje_de_programación_de_sistemas&oldid=1227005019"