Article de reference

langage de programmation système

Un langage de programmation système est un langage de programmation utilisé pour la programmation système ; ces langages sont conçus pour écrire des logiciels système , ce qui n...

Un langage de programmation système est un langage de programmation utilisé pour la programmation système ; ces langages sont conçus pour écrire des logiciels système , ce qui nécessite généralement des approches de développement différentes de celles utilisées pour les logiciels d’application. Edsger Dijkstra désignait ces langages comme des langages de haut ordre orientés machine , ou mohol .

Les langages de programmation généralistes privilégient les fonctionnalités génériques afin de permettre aux programmes écrits dans ce langage d'utiliser le même code sur différentes plateformes informatiques . ALGOL et Pascal en sont des exemples . Cette généricité a généralement pour prix l'impossibilité d'accéder directement au fonctionnement interne de la machine, ce qui a souvent des répercussions négatives sur les performances.

Les langages système, à l'inverse, sont conçus non pas pour la compatibilité, mais pour la performance et la facilité d'accès au matériel informatique sous-jacent , tout en offrant des concepts de programmation de haut niveau comme la programmation structurée . On peut citer comme exemples ESPOL ( Executive Systems Problem Oriented Language ) et SPL ( Systems Programming Language ), dont la syntaxe est proche de celle d'ALGOL , mais adaptés à leurs plateformes respectives. D'autres sont des logiciels multiplateformes , mais conçus pour fonctionner au plus près du matériel, comme BLISS , JOVIAL et BCPL .

Certains langages font le lien entre les domaines système et applicatif, comblant ainsi le fossé entre ces deux usages. L'exemple classique est le C , largement utilisé pour la programmation système et applicative. PL/I en fut un exemple précoce. Certains langages modernes adoptent également cette approche, comme Rust et Swift .

Caractéristiques

Contrairement aux langages d'application, les langages de programmation système offrent généralement un accès plus direct au matériel physique de la machine : BCPL en est un exemple typique. Ces langages sont souvent dépourvus de fonctions d'entrée/sortie intégrées, car un projet de logiciel système développe généralement ses propres mécanismes d'E/S ou s'appuie sur des fonctions de gestion d'écran ou d'entrée/sortie de base. La distinction entre les langages de programmation système et les langages d'application s'est estompée avec la popularité croissante de PL/I , C et Pascal .

Histoire

Les premiers logiciels système étaient écrits en langage assembleur, principalement faute d'alternative, mais aussi pour des raisons d'efficacité du code objet , de rapidité de compilation et de facilité de débogage. Des langages d'application tels que FORTRAN étaient utilisés pour la programmation système, même s'ils nécessitaient généralement l'écriture de certaines routines en langage assembleur.

Langues de niveau intermédiaire

Les langages de niveau intermédiaire « possèdent une grande partie de la syntaxe et des fonctionnalités d'un langage de haut niveau, mais offrent également un accès direct, dans le langage (et souvent en langage assembleur), aux fonctions machine. » Le premier d'entre eux fut ESPOL sur les ordinateurs centraux Burroughs vers 1960, suivi par PL360 de Niklaus Wirth (initialement écrit sur un système Burroughs comme compilateur croisé ), qui reprenait la syntaxe générale d' ALGOL 60 mais dont les instructions manipulaient directement les registres du processeur et la mémoire. Parmi les autres langages de cette catégorie figurent MOL-360 et PL/S .

À titre d'exemple, une instruction PL360 typique est R9 := R8 and R7 shll 8 or R6, signifiant que les registres 8 et 7 doivent être combinés par un ET, le résultat décalé de 8 bits vers la gauche, le résultat de cela combiné par un OU avec le contenu du registre 6, et le résultat final placé dans le registre 9.

Langues de niveau supérieur

Alors que PL360 se situe au niveau sémantique du langage assembleur, un autre type de langage de programmation système opère à un niveau sémantique supérieur, mais possède des extensions spécifiques conçues pour le rendre adapté à la programmation système. Un exemple ancien de ce type de langage est LRLTRAN , qui étendait Fortran avec des fonctionnalités de manipulation de caractères et de bits, de pointeurs et de tables de branchement à adressage direct.

Par la suite, des langages comme le C ont été développés, dont la combinaison de fonctionnalités permettait d'écrire des logiciels système et de concevoir un compilateur capable de générer des programmes objets efficaces sur du matériel modeste. Ces langages omettent généralement les fonctionnalités difficiles à implémenter et ajoutent un petit nombre de fonctionnalités spécifiques à la machine, nécessaires pour accéder aux capacités matérielles ; le code assembleur en ligne , comme l'instruction `inline` du C asm est souvent utilisé à cette fin. Bien que de nombreux langages de ce type aient été développés, et le C++ ont perduré.

Langues principales

LangueAuteurdate de naissanceInfluencé parUtilisé pour
JOVIALSociété de développement de systèmes1960ALGOL 58De nombreux systèmes, principalement militaires
ESPOLSociété Burroughs1961ALGOL 60MCP
PL/IIBM , PARTAGE1964ALGOL, FORTRAN, un peu de COBOLMultics , Stratus VOS . Dialectes utilisés dans PRIMOS , IBM CPF , IBM OS/400 .
PL/SIBMannées 1960PL/IOS/360 et ses successeurs
Édimbourg IMPUniversité d'Édimbourg1966ALGOL 60 , Atlas AutocodeSystème d'accès multiple d'Édimbourg
BCPLMartin Richards1967CPLXerox Alto Executive, TRIPOS
PL360Niklaus Wirth1968ALGOL 60ALGOL W
PascalNiklaus Wirth1970ALGOL WApollo AEGIS , MacApp , système p UCSD , VAXELN , Lisa OS , PERQ OS
BONHEURUniversité Carnegie Mellon1970ALGOL, PL/I OpenVMS (partielles), Hydra
Langage pour le développement de systèmes (LSD ou LSyD)R. Daniel Bergeron, et al. ( Université Brown )1971PL/I
CDennis Ritchie1972BCPL , BDe nombreux noyaux de systèmes d'exploitation , notamment la plupart des systèmes de type Unix ; SQLite
Langage de programmation système (SPL)Hewlett-Packard1972ALGOL 60 , ESPOLLogiciel système HP 3000 , y compris MPE
PL/MGary Kildall1973PL/I , XPLCP/M , ISIS , iRMX
NEWPBurroughsannées 1970ESPOL, ALGOLMCP
PL.8IBMannées 1970PL/IDéveloppement de compilateurs, AIX (versions 1 et 2 uniquement), micrologiciel pour mainframe IBM
PL-6Honeywell, Inc.années 1970PL/ICP-6
SYMPLCDCannées 1970JOVIALSous-systèmes NOS , la plupart des compilateurs, éditeur FSE
Langage d'application transactionnelle (TAL)Ordinateurs en tandemannées 1970SPL , C , PascalSystème d'exploitation NonStop
MesaXerox PARC1976Pascal , ALGOL 68Pilote , GlobalView
Module-2Niklaus Wirth1978Pascal , MesaMedos-2 , certaines parties d' IBM OS/400 et de PRIMOS . Variante Modula-2+ utilisée dans ARX et Topaz .
C++Bjarne Stroustrup1979C , SimulaBeOS , Haiku , Serenity OS , Symbian . Parties d' IBM i , macOS , Microsoft Windows .
S3ICLannées 1980ALGOL 68ICL VME
AdaJean Ichbiah , S. Tucker Taft1983ALGOL 68 , Pascal , C++ , EiffelMilitaire, aérospatiale, transport en commun, calcul haute intégrité, noyaux de systèmes d'exploitation, iMAX 432 , BiiN/OS
OberonNiklaus Wirth1987Module-2Système Oberon
Module-3DEC SRC , Olivetti1988Modula-2+ROTATION
DMars numérique2001C++
NimAndreas Rumpf2008Python , Ada , Lisp , Oberon , C++ , Modula-3 , Object Pascal
AllerGoogle2009Obéron , C. , PascalKubernetes , Docker
RouillerRecherche Mozilla 2010C++ , Haskell , Erlang , RubyServo , RedoxOS . Des portions du noyau Linux et de Microsoft Windows .
RapideApple Inc.2014C , Objective-C , D , RustDéveloppement d'applications macOS , iOS , watchOS et tvOS
ZigAndrew Kelley 2016 C , C++ , LLVM IR , Go , RustBun , TigerBeetle, Mach engine, Ghostty
MojoModular Inc. 2023 C , C++ , Python , Rust , Swift , Zig