Qu'est-ce qu'un Programme Informatique et un Langage de Programmation

Qu'est-ce qu'un Programme Informatique et un Langage de Programmation

  • 20 mai 2024
  • 13 mins de lecture
  • Concepts de programmation
Table des matières

À quoi peut-on comparer les programmes informatiques? Pour moi, ils sont comme des manuels d’instruction.

D’un point de vue fonctionnel, un manuel d’instruction fournit des instructions étape par étape, dans un langage naturel, pour effectuer une tâche particulière. De même, un programme informatique se compose d’instructions, dans un langage de programmation, qui décrivent comment un ordinateur peut résoudre un problème spécifique.

D’un point de vue structurel, un manuel d’instructions est simplement un ensemble de séquences de caractères qui respectent une syntaxe de langage naturel (bien formée). Par exemple, “Les programmes informatiques importants sont.” n’est pas une phrase syntaxiquement valide en français, mais “Les programmes informatiques sont importants.” l’est. De même, un programme informatique est un ensemble de séquences de caractères qui respectent une syntaxe (règles) de langage de programmation.

À l’instar des manuels d’instruction qui comportent plusieurs documents ou pages, les programmes informatiques peuvent s’étendre sur plusieurs fichiers, chacun contenant une séquence de caractères.

Tout comme les manuels d’instructions se référencent les uns aux autres, les programmes informatiques peuvent se référer à d’autres programmes informatiques, appelés dépendances. Les programmes informatiques spécifiquement écrits pour d’autres programmes sont appelés des bibliothèques.

Un manuel d’instruction peut être rédigé dans une langue naturelle, mais être utilisé par une personne parlant une autre langue, un traducteur faisant le lien entre les deux. De même, les programmes informatiques sont souvent écrits dans une langue lisible par l’homme, puis traduits en code executable. Cette traduction, appelée compilation, est effectuée par un programme spécial appelé compilateur.

Le code exécutable compilé est soit un code machine compris par l’unité centrale de traitement d’un ordinateur (CPU), soit une représentation du code directement exécutable par un programme informatique spécial appelé interpréteur.

Les interpréteur peuvent être comparés à des émulateurs d’un ordinateur qui comprennent une représentation de code autre que le langage machine.

Certains langages de programmation sautent la compilation et utilisent un programme informatique spécial appelé interprète pour exécuter directement le code.

Cet article donne un aperçu des éléments des programmes informatiques et des langages de programmation, en se concentrant sur la syntaxe des programmes et les dépendances.

Une Vue Ascendante des Programmes Informatiques

Comme mentionné précédemment, un programme informatique est essentiellement une série de caractères qui suivent la syntaxe d’un langage de programmation. Ces caractères peuvent être regroupés pour former ce que nous appelons des jetons.

Considérons le programme Python suivant à titre d’illustration.

1# Define a function for the greeting
2def print_greeting(name):
3    print("Hello, %s!" % name)

Cet exemple de programme est affiché avec des mises en forme et des mises en évidence pour que les humains puissent le comprendre facilement. En fait, il s’agit simplement de la séquence de caractères suivante ( et représentent respectivement un espace blanc et une nouvelle ligne) :

#⌴Define⌴a⌴function⌴for⌴the⌴greeting↵
def⌴print_greeting(name):↵
⌴⌴⌴⌴print("Hello,⌴%s!"⌴%⌴name)↵

La séquence est divisée en jetons selon la syntaxe du langage de programmation Python.

Abstraction du flux de caractères : Tokenisation
Abstraction du flux de caractères : Tokenisation

Comme en français où les mots n’ont pas la même nature (verbe, sujet, etc.), les jetons du programme n’ont pas la même nature.

Jetons

Selon les règles syntaxiques des langages de programmation, les jetons appartiennent à l’une des catégories suivantes :

  • Mots-clés (également connus sous le nom de mots réservés): Mots prédéfinis dans un langage de programmation qui ont des significations spéciales et ne peuvent pas être utilisés à d’autres fins dans le code. Ils représentent généralement des structures de contrôle, des types de données ou d’autres fonctionnalités propres au langage.

  • Identificateurs: Noms donnés à divers éléments d’un programme, tels que les variables, les fonctions, les classes ou les modules. Ils servent d’étiquettes pour faire référence à ces éléments dans le code et doivent suivre des règles de dénomination spécifiques définies par le langage de programmation.

  • Littéraux : Valeurs constantes spécifiées dans le programme.

  • Opérateurs: Symboles ou mots qui effectuent des opérations sur les opérandes (variables ou valeurs). Ces opérations peuvent être arithmétiques, logiques, relationnelles ou d’affectation, entre autres.

  • Séparateurs (également appelés délimiteurs ou ponctuateurs): Symboles utilisés pour séparer différents éléments du code ou pour indiquer le début ou la fin de constructions spécifiques. Les séparateurs courants sont les virgules, les points-virgules, les parenthèses, les accolades et les crochets.

  • Commentaires: Annotations dans le code qui sont ignorées par le compilateur ou l’interpréteur. Ils sont utilisés pour ajouter des notes explicatives, documenter le code ou désactiver temporairement des segments de code. Les commentaires améliorent la lisibilité et la maintenabilité du code pour les développeurs.

Note

Certains langages tels que C/C++ et Rust spécifient la documentation du code sous forme de commentaires. Python, quant à lui, spécifie la documentation du code sous forme de littéraux de chaîne de caractères.

Structures de Niveau Supérieur

Les jetons d’un programme peuvent également être regroupés syntaxiquement pour former une séquence d’expressions, d’instructions, de déclarations et de types. Ces éléments sont ensuite regroupés pour former des unités de programme (par exemple, blocs, fonctions, modules et autres, selon la syntaxe du langage de programmation).

  • Expression/Instruction: Il s’agit des éléments fondamentaux d’un programme, qui représentent les actions à exécuter. Les expressions produisent des valeurs, les instructions exécutent des tâches spécifiques et sont des unités complètes de code. Les instructions sont simples ou composées (elles contiennent d’autres instructions).

  • Bloc: Un bloc est un groupe d’instructions correctement encapsulé. Il est utilisé pour créer une unité d’exécution unique, souvent associée à des structures de contrôle comme les boucles et les conditions.

  • Conditionnelles/Correspondance: Les conditionnelles sont des structures de contrôle qui exécutent un code différent en fonction de conditions spécifiées. Les instructions de correspondance sont plus polyvalentes et permettent la correspondance de motifs, en fournissant plusieurs branches en fonction de la valeur correspondant à la correspondance.

  • Boucle: Les boucles permettent l’exécution répétitive de blocs de code jusqu’à ce qu’une certaine condition soit remplie. Elles se présentent sous différentes formes telles que for, while et do-while, chacune ayant ses propres cas d’utilisation.

  • Fonction/Procédure/Fonction Lambda/Fermeture: Les fonctions sont des blocs de code réutilisables qui effectuent une tâche spécifique, prenant des paramètres d’entrée et éventuellement renvoyant une valeur. Les procédures sont similaires mais ne renvoient pas de valeur. Les fonctions anonymes, ou fonctions lambda, sont de petites fonctions en ligne souvent utilisées comme arguments pour des fonctions d’ordre supérieur. Les fermetures sont des fonctions qui capturent des variables de leur environnement.

  • Déclaration/Définition: Ils représentent le processus d’introduction d’une nouvelle variable, fonction ou autre entité dans la portée du programme, généralement accompagné de la spécification de son type et de sa valeur initiale (si applicable).

  • Macro (Méta-programmation): Les macros sont des fonctionnalités du langage qui permettent au code de générer ou de modifier d’autres codes pendant la compilation. Elles sont utilisées pour créer des langages spécifiques à un domaine, réduire la duplication de code et automatiser les tâches répétitives.

  • Module: Les modules sont des unités organisationnelles utilisées pour regrouper des codes apparentés, favorisant ainsi l’encapsulation et l’organisation du code. Ils permettent de gérer la complexité en divisant le code en unités gérables.

  • Package: Les package ou paquets sont des collections de modules ou de bibliothèques regroupés pour être distribués. Ils comprennent souvent des métadonnées décrivant le nom, la version et les dépendances du paquet, ce qui facilite la réutilisation et le partage du code entre les projets.

Si l’on reprend notre exemple de programme, au niveau le plus élevé, il s’agit d’une fonction qui prend un nom et affiche un message de salutation avec ce nom.

Dépendance dans les Programmes Informatiques

Les langages de programmation offrent souvent des moyens à un programme de référencer ou d’appeler un autre programme, favorisant ainsi la modularité et la réutilisation. Ces références peuvent être soit internes soit externes.

Dépendance interne: Se produit entre les composants d’un même programme cible. Les développeurs ont le contrôle à la fois sur les le composant dépendant et le composant dont il dépend.

Dépendance externe: Il s’agit de deux programmes, le programme cible dépendant d’un autre programme externe. Le développeur du programme dépendant n’a aucun contrôle, au cours du développement, sur la mise en œuvre du programme sur lequel il s’appuie.

Info

Dans cette section, nous examinons la perspective des dépendances externes des programmes.

Note

Une dépendance est un programme utilisé par un autre programme.

Il peut être soit:

  • Programme autonome – un programme qui peut être exécuté seul.
  • Bibliothèque – un programme qui ne peut pas être exécuté seul, mais qui doit être appelé par un autre programme.

Les programmes peuvent intégrer des dépendances écrites dans différents langages de programmation

Un programme et ses bibliothèques de dépendances contiennent du code écrit dans le langage de programmation du programme. On peut considérer que les éléments du langage de programmation sont une dépendance de ceux-ci. L’exemple de programme Python présenté ci-dessus dépend de la chaîne d’outils du langage de programmation Python.

Program Dependencies
Program Dependencies

Dans un langage de programmation donné, les dépendances externes d’un programme appartiennent à l’une des deux catégories suivantes:

Dépendances Fournies

Ces dépendances sont fournies avec la chaîne d’outils du langage de programmation et sont disponibles pour une utilisation immédiate.

Bibliothèque intégrée
Ensemble de codes implémentés dans le compilateur ou l’interpréteur. Il est accessible dans tout programme sans qu’il soit nécessaire de l’importer ou de l’inclure explicitement. Elle se comporte comme si elle faisait partie intégrante du langage de programmation lui-même.
Dans les langages de programmation compilés, le compilateur insère l’implémentation de la bibliothèque dans le programme compilé. Dans les langages interprétés, l’interpréteur exécute le code de la bibliothèque lorsque celle-ci est appelée.
Les fonctions de la bibliothèque intégrée sont communément appelées fonctions intrinsèques.
Bibliothèque standard
Une bibliothèque fondamentale dont la spécification du langage de programmation exige l’existence dans toutes les implémentations du langage. C’est une bibliothèque que tous les programmes supposent être disponible. Cependant, elle est externe au compilateur ou à l’interpréteur du langage de programmation, ce qui signifie qu’elle n’est pas intégrée à ceux-ci. Ainsi, elle doit donc être explicitement “importée/incluse” dans le programme appelant avant d’être utilisée.
En général, la bibliothèque standard est incluse dans les packages d’installation du langage de programmation, bien qu’elle ne soit pas nécessairement développée en même temps que le compilateur ou l’interpréteur.
Certains langages de programmation divisent la bibliothèque standard en plusieurs parties. Par exemple, en Rust, les fonctionnalités de la bibliothèque standard spécifiques à la plate-forme sont séparées pour éviter les exigences dans des environnements restreints tels que les systèmes embarqués.
Chaîne d’outils de programmation (programmes autonomes)
Les outils de programmation sont essentiels à l’exécution d’un programme. Dans le cas des programmes compilés, ces outils sont principalement requis lors du processus de build. En revanche, pour les programmes interprétés, ils sont principalement utilisés lors de l’exécution. Par exemple, un programme Python peut dépendre d’une version spécifique de l’interpréteur Python pour son exécution.

Outre les dépendances fournies par le langage de programmation, les programmes peuvent également s’appuyer sur du code non fourni avec la chaîne d’outils du langage de programmation.

Dépendances Non Fournies

Ces dépendances ne sont pas fournies avec la chaîne d’outils du langage de programmation. Elles sont développées indépendamment du langage de programmation et du programme dépendant.

Elles sont généralement créées pour résoudre des problèmes courants qui ne sont pas couverts par les dépendances fournies.

En outre, elles se répartissent en deux catégories: les dépendances de première partie, fournies par l’organisation qui développe le programme dépendant, ou les dépendances tierces, créées et fournies par des organisations externes.

Les dépendances non fournies se présentent sous deux formes:

Bibliothèques
Les bibliothèques non fournies sont développées séparément de la chaîne d’outils du langage de programmation. Elles doivent être installées et “importées/incluses” par un programme avant d’être utilisées.
La plupart des langages de programmation proposent des systèmes de gestion de paquets pour faciliter la gestion des bibliothèques de dépendances non fournies d’un programme.
Ces bibliothèques peuvent s’appuyer sur des dépendances fournies.
Certains langages de programmation (par exemple, Python) peuvent incorporer des bibliothèques tierces largement utilisées dans leurs bibliothèques fournies dans les nouvelles versions du langage.
Programmes autonomes
Les programmes autonomes non fournis sont des exécutables externes qui ne font pas partie de la chaîne d’outils du langage de programmation. Ils doivent être installés séparément et sont généralement invoqués par le programme dépendant en tant que sous-processus ou processus de remplacement. Ces programmes sont essentiels au bon fonctionnement du programme dépendant.
L’utilisation de programmes autonomes en tant que dépendances d’un programme est très courante dans les langages de script tels que Bash et Powershell.

Après avoir présenté les 2 catégories de dépendances de programme non fournies, utilisons l’exemple suivant d’un programme Python pour illustrer les différentes dépendances de programme.

Illustration des Dépendances de Programme

Considérez le programme Python (version 3) suivant:

 1# Importation du module de la bibliothèque standard
 2import subprocess
 3
 4# Importation de la fonction de la bibliothèque tierce
 5from requests import get
 6
 7# Utilisation de la fonction de la bibliothèque tierce
 8response = get('https://httpbin.org/ip')
 9ip = response.json().get('origin')
10
11# Utilisation de la fonction intégrée
12print('Votre IP est : ' + ip)
13
14# Utilisation de la fonction de la bibliothèque standard 
15# pour appeler un autre programme binaire ('ping')
16subprocess.run(['ping', ip])
  • requests est une bibliothèque tierce qui facilite les requêtes HTTP. Elle est utilisée pour récupérer l’adresse IP publique de l’hôte du programme.
  • print est une fonction de la bibliothèque intégrée, utilisée pour afficher l’adresse IP récupérée.
  • Le module subprocess, de la bibliothèque standard Python, permet de créer de nouveaux processus et est utilisé pour exécuter la commande ping.
  • ping est un programme autonome tiers utilisé pour le diagnostic réseau de l’adresse IP récupérée.

Le module subprocess de la bibliothèque standard et la bibliothèque tierce requests sont importés avant d’être utilisés dans le programme Python. Cependant, la fonction de la bibliothèque intégrée print n’est pas explicitement importée avant d’être utilisée.

Points Clés

Les programmes informatiques, sous leur forme de code source (qui est lisible par les humains), consistent en des séquences de caractères disposés logiquement de manière à respecter la syntaxe d’un langage de programmation. Ils décrivent les instructions que le programme doit exécuter.

Les programmes s’appuient souvent sur du code provenant de sources extérieures, appelées dépendances externes. Certaines de ces dépendances proviennent du langage de programmation lui-même, tandis que d’autres sont fournies par des tiers.

Pour les développeurs qui apprennent un nouveau langage, il est essentiel de se familiariser avec les dépendances fournies afin de pouvoir exploiter les fonctionnalités existantes plutôt que de les réinventer.

Articles Connexes

Mise en Place et Utilisation de Rust Hors Ligne pour un Développement Sans Faille : Un Tutoriel Étape par Étape

Mise en Place et Utilisation de Rust Hors Ligne pour un Développement Sans Faille : Un Tutoriel Étape par Étape

[Dernière mise à jour: 17 avril 2024]

C’est un processus simple de mettre en place Rust lorsque vous avez accès à Internet, mais que se passe-t-il si vous êtes hors ligne?

Lire la suite