langage de programmation

Code source d'un programme en langage de programmation C++ .
Code source d'un programme dans le langage de programmation Scratch .

Un langage de programmation est un langage formel pour la formulation de structures de données et d' algorithmes , i. H. de règles de calcul pouvant être effectuées par un ordinateur . Ils consistent généralement en des instructions étape par étape à partir de modèles (textes) autorisés, la soi-disant syntaxe .

Alors que les premiers langages de programmation étaient encore directement adaptés aux propriétés de l'ordinateur respectif, aujourd'hui, on utilise principalement des langages de programmation orientés problèmes ou (plus généralement) de niveau supérieur qui permettent une forme de programmation plus indépendante de la machine et donc plus facile à comprendre. expression pour les humains. Les programmes écrits dans ces langages peuvent être traduits automatiquement en langage machine , qui peut être exécuté directement par un processeur . Les langages de programmation visuels , qui facilitent l'accès aux langages de programmation, sont également de plus en plus utilisés.

Avec les langages de programmation déclaratifs , l'algorithme d'exécution est déjà défini à l'avance et n'est pas formulé/décrit dans le texte source, mais seules ses valeurs et conditions initiales sont définies, ainsi que les règles que le résultat doit respecter.

Aperçu

Contextes conceptuels "langage de programmation"

Les instructions d'un programme sont pour la plupart générées à l' aide de simples éditeurs de texte ; ils sont appelés le code source (ou code source). Pour fonctionner sur un ordinateur, le texte source doit être traduit dans le langage machine de cet ordinateur (type). Contrairement aux langages de programmation de haut niveau et au langage assembleur, il s'agit d' un code binaire difficile à lire pour les humains. Lorsque l'on parle de programmation en langage machine, on entend généralement aujourd'hui le langage assembleur.

La traduction en langage machine peut être effectuée soit avant l'exécution par un compilateur, soit - à l' exécution - par un interpréteur ou un compilateur JIT . Une combinaison des deux variantes est souvent choisie, dans laquelle le texte source du programme est d'abord traduit en un code intermédiaire , qui est ensuite converti en code machine au moment de l'exécution dans un environnement d'exécution . Ce principe présente l'avantage qu'un même code intermédiaire peut être exécuté sur différentes plateformes. Des exemples d'un tel code intermédiaire sont le bytecode Java et le Common Intermediate Language .

Les langages de programmation offrent généralement au moins

Il est généralement possible de créer des fonctions de niveau supérieur à partir de ces fonctions de base et de les encapsuler sous forme de bibliothèque réutilisable. Passer de là à un niveau supérieur ou à un langage axé sur les problèmes n'est plus un grand pas. Il y eut donc bientôt un grand nombre de langages spéciaux pour une grande variété de domaines d'application. Cela augmente l' efficacité du programmeur et la portabilité des programmes, généralement la vitesse de traitement des programmes générés diminue et la puissance du langage diminue : plus le langage est haut et confortable, plus le programmeur est lié aux chemins prévus dans il à marcher.

Les langues ont du succès de différentes manières - certaines « se développent » et sont de plus en plus utilisées ; Encore et encore, les langues ont été conçues avec la prétention d'être des langues polyvalentes et à large bande, souvent avec un succès modeste ( PL/1 , Ada , Algol 68 ). Différents services tentent de mesurer la diffusion des différentes langues ; On connaît par exemple l' indice TIOBE , le PYPL et les analyses de RedMonk.

panorama

L'importance des langages de programmation pour l'informatique s'exprime également dans la variété des formes et l'étendue des applications.

Familièrement, les langages de programmation sont également utilisés dans d'autres domaines. Cependant, les langages suivants ne sont pas conçus pour la description d'algorithmes et le traitement général des données, c'est-à-dire pas de langages à usage général :

Ces langues relèvent des langues spécifiques au domaine .

Catégories d'instructions

Les instructions des langages de programmation (voir exemples ici ) peuvent être classées dans les groupes suivants :

  • Commandes d' entrée et de sortie - lire les données du clavier, d'un fichier ou d'autres sources ou les sortir vers / via un périphérique de sortie spécifique (écran, fichier, imprimante, ...).
  • Devoirs et calculs - modifiez ou créez du contenu de données.
  • Instructions de flux de contrôle : les instructions de décision (également les instructions de branchement), les instructions d'itération, les instructions de saut décident sur la base des données disponibles quelles instructions doivent être exécutées ensuite.
  • Déclarations - réservez un espace de stockage pour les variables ou les structures de données sous un nom presque librement sélectionnable. Vous pouvez utiliser ce nom pour les adresser plus tard.
  • Appels de sous-routines / modules "externes au programme" tels que des fonctions système (par exemple "Lire") ou des modules fonctionnels, également à partir d'autres langages de programmation.

traducteur

Afin de pouvoir exécuter un programme créé dans un certain langage de programmation, une séquence équivalente d'instructions machine doit être exécutée à la place de son code source . Ceci est nécessaire car le code source est constitué de chaînes de caractères (par exemple "A = B + 100 * C") que le processeur ne "comprend".

Les sauts de développement qui se sont produits dans l'histoire de la technologie informatique et de la technologie logicielle ont également apporté avec eux différents outils pour générer du code machine, éventuellement en plusieurs étapes. Ceux-ci sont appelés compilateurs , interpréteurs , précompilateurs , éditeurs de liens, etc., par exemple .

En ce qui concerne la manière et le moment où l'ordinateur propose un code machine équivalent, deux principes peuvent être distingués :

  • Si un texte de programme est "traduit" dans son ensemble , c'est-à-dire qu'un programme machine est créé à partir du texte source, le mécanisme de traduction est appelé compilateur. Le compilateur lui-même est un programme qui lit le code source du programme en tant qu'entrée de données et fournit le code machine (par exemple, code objet, fichier EXE, « exécutable ») ou un code intermédiaire en tant que sortie de données.
  • Si, selon le texte du programme , des blocs de code machine correspondants sont exécutés lors de l'exécution , on parle de langage interprété. Le programme est interprété dans un environnement d'exécution (par exemple, JVM obsolète ) et un bloc de commande machine correspondant est exécuté en fonction de la commande du programme.

Il existe également diverses variantes mixtes :

  • Avec la "compilation juste à temps", le texte du programme est recompilé directement avant chaque exécution du programme ; Si nécessaire, des sections de programme individuelles ne sont compilées que pendant l'exécution (interprétée) du programme.
  • Dans certains cas, les compilateurs génèrent un code de programme qui ne peut pas encore être exécuté, qui est converti en code machine exécutable par les programmes système suivants . Une distinction doit être faite ici entre les concepts de « code intermédiaire indépendant de la plate-forme » (par exemple dans le contexte de la distribution de logiciels ) et de « code objet lié à la plate-forme » (est combiné avec d'autres modules pour former du code exécutable, parfois appelé module de chargement ).
  • Avec les précompilateurs , des constructions syntaxiques spéciales (par exemple des tables de décision ) non prévues dans le langage de programmation lui-même peuvent être traitées et, prétraduites dans le langage de programmation sélectionné, insérées dans le code source.

Pour contrôler la traduction, le texte source peut contenir des instructions de compilation spéciales supplémentaires en plus des instructions du langage de programmation . Les processus de traduction complexes sont contrôlés par un processus de création de projet et les paramètres qui y sont définis lorsque certains langages de programmation/ environnements de développement sont utilisés .

histoire

Grace Hopper a développé le premier compilateur et est connue sous le nom de " Grandma COBOL "

D'un point de vue pratique, la préhistoire des langages de programmation comprend les nombreuses notations qui ont été développées à la fois dans la technologie des télécommunications ( code Morse ) et pour le contrôle des machines ( métier jacquard ) ; puis les langages d'assemblage des premiers ordinateurs, qui n'étaient que leur développement ultérieur. D'un point de vue théorique, cela inclut les nombreux raffinements du concept d' algorithme , dont le λ-calcul est de loin le plus important. Aussi Zuse Plankalkül appartient ici, car il est l' approche minimaliste des théoriciens engagés (un peu comme c'est essentiel).

Dans une première phase, d'innombrables langages ont été développés à partir du milieu des années 1950 qui étaient pratiquement orientés vers des tâches et des ressources données. Depuis le développement d' Algol 60 (1958-1963), la tâche de construction du traducteur a été établie dans l'informatique pratique et est initialement travaillée de manière intensive en mettant l'accent sur la syntaxe (reconnaissance, analyseur syntaxique ). Sur le plan pratique, des types de données étendus tels que des composés , des chaînes de caractères et des pointeurs ont été introduits (de manière cohérente, par exemple dans Algol 68 ).

Dans les années 1950, les trois premiers langages de programmation pratiques de haut niveau les plus largement utilisés ont été développés aux États-Unis . Ils ont poursuivi des approches à la fois impératives et déclaratives - fonctionnelles .

Le développement d' Algol 60 a inauguré une phase fructueuse pour de nombreux nouveaux concepts, comme celui de la programmation procédurale . Le besoin de nouveaux langages de programmation s'est accru avec les progrès rapides de la technologie informatique . Au cours de cette phase, les langages de programmation BASIC et C , qui sont encore utilisés aujourd'hui, ont été créés .

Dans la période de suivi à partir de 1980, les langages de programmation logique nouvellement développés ne pouvaient pas prévaloir contre le développement ultérieur des concepts traditionnels sous la forme de programmation orientée objet . Internet , qui a connu une croissance de plus en plus rapide dans les années 1990 , a fait des ravages, par exemple sous la forme de nouveaux langages de script pour le développement d' applications de serveur Web.

L'intégration des concepts des dernières décennies progresse actuellement. Par exemple, l'aspect de la sécurité du code sous forme de machines virtuelles fait l'objet d' une plus grande attention . Les environnements de développement visuels plus récents et intégrés nécessitent beaucoup moins de temps et d'argent. Les interfaces utilisateur peuvent généralement être conçues visuellement, les fragments de code peuvent être atteints directement en un clic. La documentation sur d'autres parties du programme et bibliothèques peut être consultée directement ; il y a généralement même une fonctionnalité de recherche qui découvre pendant que vous écrivez quels symboles sont autorisés à ce stade et fait des suggestions appropriées ( auto-complétion ).

En plus de la programmation orientée objet désormais établie , l' architecture pilotée par modèle est une autre approche pour améliorer le développement logiciel , dans laquelle les programmes sont générés à partir de modèles syntaxiquement et sémantiquement spécifiés formellement. Dans le même temps, ces techniques marquent la transition d'un art individuel plus artisanal à un processus organisé de manière industrielle.

Générations de langues

Les langages de programmation machine, assembleur et de haut niveau ont également été appelés langages de première à troisième génération ; également par analogie avec les générations matérielles simultanées. En tant que quatrième génération , une grande variété de systèmes a été annoncée, avec des générateurs de programmes et des programmes auxiliaires z. B. pour la conception de masques d'écran ( screen painter ) ont été équipés. Le langage de la cinquième génération devrait finalement être dans les années 1980 en termes de Fifth Generation Computing Concurrent Prolog .

Paradigmes de programmation

Paradigmes dans les langages de programmation (sélection)
Nom de famille fonctionnel impératif orienté objet déclaratif logique concurrent
Ada X X X
C. X
prologue X X
Schème X X (X) X (X)
Haskell X (X) X (X)
Scala X (X) X (X) X

Les langages de programmation peuvent être divisés en catégories qui se sont formées au cours de l'évolution du développement des langages de programmation en tant que soi-disant paradigmes de programmation . Les paradigmes de la programmation structurée , impérative , déclarative et orientée objet sont fondamentaux - chacun avec d'autres subdivisions. Cependant, un langage de programmation peut également obéir à plusieurs paradigmes, c'est-à-dire prendre en charge les caractéristiques de définition de concept de plusieurs paradigmes.

Langages de programmation structurés

La programmation structurée est également devenue populaire au début des années 1970 en raison de la crise des logiciels . Il comprend la décomposition d'un programme en sous-programmes ( programmation procédurale ) et la restriction aux trois structures de contrôle élémentaires : séquence d' instructions , branchement et répétition .

Langages de programmation impératifs

Un programme écrit dans un langage de programmation impératif est constitué d'instructions (latin : imperare = commande) qui décrivent comment le programme génère ses résultats (par exemple des séquences si-alors, des boucles, des multiplications, etc.).

Langages de programmation déclaratifs

Les langages de programmation déclaratifs suivent exactement l'approche inverse . Le programmeur décrit les conditions que la sortie du programme (le quoi ) doit remplir. La manière dont les résultats sont réellement générés est déterminée lors de la traduction , par exemple par un interprète. Un exemple est le langage de requête de base de données SQL .

Un programme n'a pas besoin de contenir une liste d'instructions. Au lieu de cela, des approches de programmation graphique , par exemple comme avec la plate-forme STEP 7 utilisée dans l'automatisation , peuvent être utilisées.

Les types de conditions formulées sont divisés par les langages de programmation déclaratifs en langages de programmation logique qui utilisent la logique mathématique et les langages de programmation fonctionnels qui utilisent des fonctions mathématiques à cette fin .

Langages de programmation orientés objet

Contrairement à la programmation procédurale, où l'accent est d'abord mis sur les procédures de traitement (« Qu'est-ce que je veux calculer ? ») et où les données sont « en quelque sorte transmises », la programmation orientée objet se concentre d'abord sur les données : « Avec quelles choses (le monde réel/extérieur) doit être travaillé ? Quels attributs/données les décrivent (→ classes d'objets) ? "Ce n'est qu'alors que la manipulation des objets est conçue (→ méthodes," Que pouvez-vous faire avec cet objet ? Que peut faire cet objet pour le programme ? "). Les méthodes sont affectées aux données et, ensemble, les deux sont combinées dans des objets / classes d'objets. L'orientation objet réduit la complexité des programmes résultants, les rend plus réutilisables et représente généralement la réalité plus précisément que ce n'est le cas avec la programmation purement procédurale.

L'orientation objet propose les paradigmes suivants :

Encapsulation de données
Cacher les détails de mise en œuvre : Un objet offre à l'utilisateur un nombre fixe de possibilités (méthodes) pour le modifier, l'influencer, calculer quelque chose ou obtenir des informations. Toutes les routines auxiliaires ou mémoires d'état qui vont au-delà sont cachées et ne sont pas accessibles (directement).
Héritage , spécialisation et généralisation
L'héritage signifie, en termes simplifiés, qu'une classe dérivée possède également les méthodes et les attributs de la classe de base, c'est-à - dire hérite de . De plus, elle peut avoir des attributs et des propriétés supplémentaires et offrir des options d'action supplémentaires - une classe dérivée est un "cas spécial" de la classe de base.
A l'inverse, la même fonctionnalité de plusieurs classes peut être "externalisée" vers une classe de base commune, où elle n'est programmée qu'une seule fois, ce qui économise du code, est plus facile à maintenir et, si nécessaire, peut être réutilisée pour d'autres classes spéciales - elles héritent simplement à partir de cette classe de base ; la classe de base décrit le comportement général de toutes les classes dérivées (spéciales).
Polymorphisme
Un objet d'une classe spéciale peut toujours être considéré comme un membre de la classe de base. Cela signifie qu'un objet d'une classe dérivée peut également être stocké dans une variable pouvant accueillir un objet de la classe de base, car en raison de l'héritage, il offre les méthodes et les attributs de la classe de base.

Système de types

Les variables sont des emplacements nommés en mémoire qui peuvent contenir une valeur. Afin de déterminer le type de valeur stockée, un type de données doit être affecté à la variable dans de nombreux langages de programmation . Les types de données fréquents sont des entiers et des nombres à virgule flottante ou des chaînes.

Une distinction est faite entre les langages typés et sans type. Dans les langages typés (par exemple C++ ou Java ) le contenu de la variable est déterminé par un type de données. Il existe différents types de données pour les entiers et les nombres à virgule flottante qui diffèrent par leur plage de valeurs. Ils peuvent être non signés ou signés. Dans l'ordre croissant des valeurs, ce sont par exemple : Short, Integer ou Long. Les types de données pour les nombres à virgule flottante sont, par exemple, float ou double. Les caractères individuels peuvent être enregistrés dans le type de données Char . Le type de données String est disponible pour les chaînes de caractères .

Les langages typés peuvent être différenciés en fonction du moment de la vérification de type. Si la vérification de type a déjà lieu lors de la compilation du programme, on parle de typage statique . Si la vérification de type a lieu à l'exécution, on parle de typage dynamique . Si un langage de programmation détecte des erreurs de type au plus tard lors de l'exécution, il est appelé type-safe .

Avec la vérification de type statique, le programmeur est tenté de contourner cela, ou ce n'est pas complètement appliqué (dans l'état actuel de l'art, il doit y avoir un moyen dans chaque langage statique de générer des données sans type ou de basculer entre les types - par exemple lorsque la lecture des données du périphérique de stockage de masse le fera). Dans les langages avec vérification de type dynamique, certaines erreurs de type ne sont détectées que lorsqu'il est trop tard. Si le type de données d'une variable doit être modifié, une commande de conversion explicite est requise.

Contrairement aux langages typés, les langages sans type (par exemple JavaScript ou Prolog ) n'ont pas de types de données différenciés. Le type de données d'une variable n'est déterminé qu'au moment de l'exécution. Si une valeur d'un type différent est affectée à une variable, la variable est convertie dans le nouveau type. Les langages sans type traitent souvent toutes les unités comme des chaînes de caractères et connaissent une liste générale de données composées.

La définition du type de données a deux objectifs principaux :

  • Les spécifications de type descriptives facilitent la programmation et soulagent la notation. Lors de l'accès à un champ avec un index, l'emplacement mémoire où se trouve la valeur interrogée peut être calculé en fonction du type de données utilisé.
  • Les spécifications de type prescriptives excluent certaines opérations. Par exemple, le respect des limites du champ peut être vérifié afin d'empêcher l'accès au-delà des limites du champ.

Le système de type sécurisé du langage de programmation ML constitue la base de l'exactitude des systèmes de preuves qui y sont programmés (LCF, HOL, Isabelle ); De même, des tentatives sont maintenant faites pour assurer la sécurité des systèmes d'exploitation . Après tout, ce ne sont que des spécifications de type différentes qui permettent la surcharge populaire des identifiants. Selon Strachey , le système de types devrait être au centre de la définition d'un langage de programmation.

La définition des données est généralement effectuée en spécifiant une spécification spécifique pour le stockage des données et des opérations nécessaires. Cette spécification spécifique définit le comportement général des opérations et fait donc abstraction de l'implémentation spécifique de la structure de données (voir aussi déclaration ).

Souvent , les citoyens de première classe ( citoyens de première classe sont donc les formes de données qui peuvent être utilisées directement détectées, qui obéit à la langue - paradigme - FCCS) un langage de programmation. En Java, par ex. B. Les objets sont des FCC, en Lisp chaque morceau de programme est FCC, en Perl ce sont des chaînes, des tableaux et des hachages. La structure des données suit également des règles syntaxiques. Avec les variables, vous pouvez facilement accéder aux données et utiliser le double caractère de la référence et de la date d'une variable. Afin de pouvoir utiliser les chaînes de caractères des données avec leur signification (sémantique), cette signification doit être précisée en spécifiant un type de données . Habituellement, il existe également la possibilité de convenir de nouveaux types dans le cadre du système de types . LISP utilise des listes comme structure conceptuelle principale. Le programme est aussi une liste de commandes qui modifient d'autres listes. Forth utilise des piles et des opérations de pile comme structure conceptuelle principale ainsi qu'un dictionnaire de définitions qui peut être étendu au moment de l'exécution, et dans la plupart des implémentations, il n'effectue aucune vérification de type.

divers

Une entrée populaire dans un langage de programmation consiste à l'utiliser pour afficher le texte Hello World (ou "Hallo Welt" en allemand) sur l'écran ou sur un autre périphérique de sortie (voir le programme Hello World ). En conséquence, il existe des listes de programmes hello world et leurs propres sites Web qui comparent des implémentations exemplaires dans divers langages de programmation.

Voir également

Littérature

  • Friedrich L. Bauer , Hans Wössner : Langage algorithmique et développement de programmes . 2e édition améliorée. Springer, Berlin et autres 1984, ISBN 3-540-12962-6 .
  • Peter A. Henning, Holger Vogelsang : Manuel des langages de programmation. Développement de logiciels pour l'apprentissage et la référence . Hanser, Munich 2007, ISBN 978-3-446-40558-5 .
  • Kenneth C. Louden : Langages de programmation : fondamentaux, concepts, conception . Internat Thomson Publ., Bonn/Albany et al., 1994, ISBN 3-929821-03-6 .
  • John C. Reynolds : Théories des langages de programmation . Université de Cambridge. Presse, Cambridge 1998, ISBN 0-521-59414-6 .
  • Robert Harper : fondements pratiques des langages de programmation . Université de Cambridge. Presse, Cambridge 2016, ISBN 978-1-107-15030-0 .
  • Peter van Roy, Seif Haridi : concepts, techniques et modèles de programmation informatique . MIT Press, Cambridge 2004, ISBN 0-262-22069-5 .
  • Michael L. Scott : Langage de programmation pragmatique . 2e édition. Elsevier, Morgan Kaufmann, Amsterdam 2006, ISBN 0-12-633951-1 .

liens web

Wiktionnaire : langage de programmation  - explications de sens, origines des mots, synonymes, traductions
Wikibooks : Programmation  - Matériel d'apprentissage et d'enseignement
Commons : langages de programmation  - collection d'images, de vidéos et de fichiers audio
  • 99 Bottles of Beer : Un programme dans des centaines de langages de programmation ou dialectes (anglais)

Preuve individuelle

  1. Langage de programmation - Duden , 2019; là littéralement avec « système de mots et de symboles qui sont utilisés pour formuler des programmes (4) pour le traitement électronique des données » ; voir aussi Duden Informatik , ISBN 3-411-05232-5
  2. ... voir aussi indépendance de plate-forme (notamment au sens d' indépendance du constructeur vis- à-vis des unités arithmétiques ) et abstraction (IT) ...
  3. PYPL
  4. RedMonk
  5. Vers 1965 on en comptait 1700, voir ISWIM .
  6. Peter A. Henning, Holger Vogelsang : Langages de programmation de poche . Éditeur de livres spécialisé chez Carl Hanser Verlag, Leipzig 2007, ISBN 978-3-446-40744-2 .
  7. Voir système basé sur la voix - par ex. B. Singularité basée sur le langage de programmation Sing # , JX pour Java , Coyotos avec le langage BitC .
  8. Liste des programmes Hello World selon les langages de programmation