Déclaratif
Il y a essentiellement deux paradigmes déclaratifs ; ce sont le paradigme fonctionnel
et le paradigme logique. En paradigme fonctionnel, le programme décrit des
fonctions mathématiques. En paradigme logique, il décrit des prédicats : c'est-à-dire
des déclarations qui, une fois instanciées, peuvent être vraies ou fausses ou ne pas
recevoir de valeur de vérité (quand l'évaluation du prédicat ne se termine pas) 13. [ ]
Dans un modèle d'implantation, une machine abstraite effectue les opérations
nécessaires pour calculer le résultat de chaque fonction16 ou chaque prédicat. Dans
[ ]
ces paradigmes, une variable n'est pas modifiée par affectation13. Une des
[ ]
caractéristiques principales17 est la transparence référentielle, qui fait qu'une
[ ]
expression peut être remplacée par son résultat sans changer le comportement du
programme.
Fonctionnel
Le paradigme fonctionnel a pour principe l'évaluation de formules, afin d'utiliser le
résultat pour d'autres calculs ; il s'appuie sur la récursivité et il a pour modèle
le lambda-calcul, plus précisément la réduction en forme normale de tête. Tous les
calculs évaluent des expressions ou font appel à des fonctions. Pour simplifier 18, le [ ]
résultat d'un calcul sert pour le calcul ou les calculs qui ont besoin de son résultat
jusqu'à ce que la fonction qui produit le résultat du programme ait été évaluée 14. Le
[ ]
paradigme fonctionnel a été introduit par les langages Lisp et ISWIM ainsi qu'en ce
qui concerne les fonctions récursives par Algol 60, dans les années 1960. Des
langages tels que Ruby et Scala supportent plusieurs paradigmes dont le paradigme
fonctionnel13, tandis qu'Haskell ne supporte que le paradigme fonctionnel
[ ]
et OCaml privilégie le paradigme fonctionnel qu'il partage avec le paradigme objet et
une petite dose d'impératif.
Logique
Le paradigme logique vise à répondre à une question par des recherches dans un
ensemble, en utilisant des axiomes, des requêtes et des règles de déduction.
L'exécution d'un programme est une cascade de recherches de faits dans un
ensemble, en invoquant des règles de déduction. Les données obtenues, peuvent
être associées à un autre ensemble de règles et peuvent alors être utilisées dans le
cadre d'une autre recherche. L'exécution du programme se fait par évaluation : le
système effectue une recherche de toutes les affirmations qui, par déduction,
correspondent à au moins un élément de l'ensemble. Le programmeur exprime les
règles, et le système pilote le processus14. Le paradigme logique a été introduit par le
[ ]
langage Prolog en 197013. [ ]
Orienté objet
Le paradigme orienté objet est destiné à faciliter le découpage d'un grand
programme en plusieurs modules isolés les uns des autres. Il introduit les notions
d'objet et d'héritage. Un objet contient les variables et les fonctions en rapport avec
un sujet. Les variables peuvent être privées, c'est-à-dire qu'elles peuvent être
manipulées uniquement par l'objet qui les contient. Un objet contient implicitement
les variables et les fonctions de ses ancêtres, et cet héritage aide à réutiliser du
code13. Le paradigme orienté objet permet d'associer fortement les données avec les
[ ]
procédures14. Il a été introduit par le langage Simula dans les années 1960 et est
[ ]
devenu populaire dans les années 1980, quand l'augmentation de la puissance de
calcul des ordinateurs a permis d'exécuter des grands programmes 13. Divers [ ]
langages de programmation ont été enrichis en vue de permettre la programmation
orientée objet ; c'est le cas de C++ (dérivé du
langage C13), Simula, Smalltalk, Swift et Java sont des langages de programmation
[ ]
en paradigme orienté objet14. [ ]
Concurrent
En paradigme concurrent un programme peut effectuer plusieurs tâches en même
temps. Ce paradigme introduit les notions de thread, d'attente active et d'appel de
fonction à distance13. Ces notions ont été introduites dans les années 1980 lorsque, à
[ ]
la suite de l'évolution technologique, un ordinateur est devenu une machine
comportant plusieurs processeurs et capable d'effectuer plusieurs tâches
simultanément. Les langages de programmation contemporains de 2013 tels que C+
+ et Java sont adaptés aux microprocesseurs multi-cœur et permettent de créer et
manipuler des threads13. Plus récemment, on a vu apparaître des langages
[ ]
intégralement orientés vers la gestion de la concurrence, comme le langage Go.
Visuel
Dans la grande majorité des langages de programmation, le code source est un
texte, ce qui rend difficile l'expression des objets bidimensionnels 13. Un langage de
[ ]
programmation tel que Delphi ou C# permet de manipuler des objets par glisser-
déposer et le dessin ainsi obtenu est ensuite traduit en une représentation textuelle
orientée objet et événementielle. Le paradigme visuel a été introduit à la fin des
années 1980 par Alan Kay dans le langage Smalltalk, dans le but de faciliter la
programmation des interfaces graphiques13. [ ]
Événementiel
Alors qu'un programme interactif pose une question et effectue des actions en
fonction de la réponse, en style événementiel le programme n'attend rien et est
exécuté lorsque quelque chose s'est passé13. Par exemple, l'utilisateur déplace la
[ ]
souris ou presse sur un bouton. Dans ce paradigme, la programmation consiste à
décrire les actions à prendre en réponse aux événements. Et une action peut en
cascade déclencher une autre action correspondant à un autre évènement 13. Le [ ]
paradigme événementiel a été introduit par le langage Simula dans les années 1970.
Il est devenu populaire à la suite de l'avènement des interfaces graphiques et des
applications web13. [ ]
Basé web
Avec l’avènement de l'Internet dans les années 1990, les données, les images ainsi
que le code s'échangent entre ordinateurs. Si un résultat est demandé à un
ordinateur, celui-ci peut exécuter le programme nécessaire et envoyer le résultat. Il
peut également envoyer le code nécessaire à l'ordinateur client pour qu'il calcule le
résultat lui-même13. Le programme est rarement traduit en langage machine, mais
[ ]
plutôt interprété ou traduit en une forme intermédiaire, le bytecode, qui sera exécuté
par une machine virtuelle, ou traduit en langage machine au moment de l'exécution
(just-in-time). Java, PHP et Javascript sont des langages de programmation basée
web13.
[ ]
Mise en œuvre
Un exemple de code source illustrant les classes, les
méthodes et l'héritage. Ce n'est PAS LE langage de programmation Mint, car Mint ne peut
absolument pas exécuter implicitement un « return this » à la fin d'une fonction particulière.
L'utilisation d'un langage est rendue possible par un traducteur automatique. Un
programme qui prend un texte écrit dans ce langage pour en faire quelque chose, en
général soit :
Un compilateur
Un programme qui traduit le texte dans un langage qui permettra son exécution, tel
le langage machine, le bytecode ou le langage assembleur.
Un interpréteur
Un programme qui exécute les instructions demandées. Il joue le même rôle qu'une
machine qui reconnaîtrait ce langage.
Langage machine
Chaque appareil informatique a un ensemble d'instructions qui peuvent être utilisées
pour effectuer des opérations. Les instructions permettent d'effectuer des calculs
arithmétiques ou logiques, déplacer ou copier des données, ou bifurquer vers
l'exécution d'autres instructions. Ces instructions sont enregistrées sous forme de
séquences de bits, où chaque séquence correspond au code de l'opération à
effectuer et aux opérandes, c'est-à-dire aux données concernées ; c'est le langage
machine19.[ ]
La traduction s'effectue en plusieurs étapes. En premier lieu, le traducteur effectue
une analyse lexicale où il identifie les éléments du langage utilisés dans le
programme. Dans l'étape suivante, l'analyse syntaxique, le traducteur construit un
diagramme en arbre qui reflète la manière dont les éléments du langage ont été
combinés dans le programme, pour former des instructions. Puis, lors de l'analyse
sémantique, le traducteur détermine s'il est possible de réaliser l'opération et les
instructions qui seront nécessaires dans le langage cible20. [ ]
Dans le langage de programmation assembleur, des mots aide-mémoire
(mnémonique) sont utilisés pour référer aux instructions de la machine. Les
instructions diffèrent en fonction des constructeurs et il en va de même pour les
mnémoniques. Un programme assembleur traduit chaque mnémonique en la
séquence de bits correspondante21. [ ]
Les langages de programmation fonctionnent souvent à l'aide d'un runtime.
Un runtime
Un runtime (traduction : exécuteur) est un ensemble de bibliothèques logicielles qui
mettent en œuvre le langage de programmation, permettant d'effectuer des
opérations simples, telles que copier des données, mais aussi des opérations
beaucoup plus complexes22. [ ]
Lors de la traduction d'un programme vers le langage machine, les opérations
simples sont traduites en les instructions correspondantes en langage machine
tandis que les opérations complexes sont traduites en des utilisations des fonctions
du runtime. Dans certains langages de programmation, la totalité des instructions
sont traduites en des utilisations du runtime22 qui sert alors d'intermédiaire entre les
[ ]
possibilités offertes par la plateforme informatique et les constructions propres au
langage de programmation23. [ ]
Chaque langage de programmation a une manière conventionnelle de traduire
l'exécution de procédures ou de fonctions, de placer les variables en mémoire et de
transmettre des paramètres. Ces conventions sont appliquées par le runtime24. [ ]
Les runtime servent également à mettre en œuvre certaines fonctionnalités
avancées des langages de programmation telles que le ramasse-miettes, ou la
réflexion22.
[ ]
Les langages de programmation sont couramment auto-implémentés, c'est-à-dire
que le compilateur pour ce langage de programmation est mis en œuvre dans le
langage lui-même. Exemple : un compilateur pour le langage Pascal peut être écrit
en langage Pascal25. [ ]
Fonctionnalités avancées
Les fonctionnalités avancées telles que le ramasse-miettes (anglais garbage
collector), la manipulation des exceptions, des événements ou des threads, ainsi que
la liaison tardive et la réflexion sont mises en œuvre par les runtime des langages de
programmation22. [ ]
Un ramasse-miettes
Un mécanisme qui supprime les variables inutilisées et libère l'espace mémoire qui
leur avait été réservé26. [ ]
Une exception
Un fait inattendu, souvent accidentel, entraîne l'échec du déroulement normal du
programme, et ce fait exceptionnel doit être pris en charge par le programme avant
de pouvoir continuer. Certains langages de programmation permettent de provoquer
délibérément l'arrêt du déroulement normal du programme 27. [ ]
Un évènement
Une procédure qui va être exécutée lorsqu'une condition particulière est rencontrée.
Les événements sont notamment utilisés pour mettre en œuvre les interfaces
graphiques28.
[ ]