# Langage de programmation de bas niveau

Un langage de programmation de bas niveau ne fournit que peu d'abstraction par rapport au jeu d'instructions du processeur de la machine. Les langages de bas niveau sont à opposer aux langages de haut niveau, qui permettent de créer un programme sans tenir compte des caractéristiques particulières (registres, etc) de l'ordinateur censé exécuter le programme.
Le langage machine et le langage d'assemblage sont les archétypes de langages de bas niveau, puisqu'ils permettent de manipuler explicitement des registres, des adresses mémoires, des instructions machines.
Hors ces cas extrêmes, la distinction entre bas niveau et haut niveau n'est pas binaire. Les discussions pour savoir si des langages comme C et C++, qui ont à la fois des aspects de bas niveau (possibilités d'accès à la mémoire en utilisant des adresses explicites, "bitfields" dans les structures) et de haut niveau, méritent ou pas le nom de langage de haut ou bas niveau ont toujours cours.
Une citation attribuée à Alan Perlis dit : « A programming language is low level when its programs require attention to the irrelevant. » ; ce qui pourrait être traduit par : « Un langage de programmation est de bas niveau lorsque ses programmes nécessitent de faire attention aux éléments non pertinents ». Néanmoins, cette citation doit être nuancée : dans cette citation, ce qui est considéré non-pertinent est la gestion du matériel et ses contraintes. Dans certains cas, la gestion du matériel est un impératif, et est loin d'être non pertinente. Il est donc souvent nécessaire d'utiliser un langage de bas niveau, un langage de haut niveau ne pouvant permettre de coder le programme désiré.

## Utilisation

Les langages de bas niveau sont utilisés dans : l'informatique embarquée, industrielle, la création de pilotes, de systèmes d'exploitation, voire le développement de jeux vidéo. Dans tous les autres domaines, l'utilisation des langages de bas niveau est contre-productive, parce qu'elle demande au programmeur de consacrer beaucoup plus d'attention, de temps de programmation, et entraîne donc des coûts de production plus élevés, pour réaliser un code équivalent.
Les langages de bas niveau sont donc aujourd'hui de moins en moins utilisés pour développer les applications courantes.
Dans certains domaines, comme l'informatique embarquée ou en informatique industrielle, les langages de bas niveau sont majoritairement utilisés (typiquement le C ou plus rarement le C++), en complément d'un langage de « haut niveau », et certaines portions très limitées sont programmées en assembleur. Ceci peut être justifié par les contraintes techniques du matériel sur lequel doit fonctionner le programme (taille mémoire réduite et processeur lent), et aussi expliqué par l'investissement que représente la formation des programmeurs à un autre langage que celui qu'ils pratiquent depuis des années.

## Performances

Contrairement aux idées reçues, programmer une application dans un langage de bas niveau comme l'assembleur ne permet pas forcément d'obtenir une application plus rapide. En effet, les compilateurs modernes des langages de haut niveau produisent généralement un code bien plus optimisé que ce qu'un programmeur peut faire quand il a des contraintes de délais à respecter pour livrer.