# Comparaison des langages de programmation multi-paradigmes

Les langages de programmation peuvent être regroupées par le nombre et les types de paradigmes pris en charge.

## Résumés des paradigmes

Une référence concise des paradigmes de programmation répertoriés dans cet article.
* La programmation concurrente – Intègre des éléments de langage pour la concurrence, tels que le multi-threading, le soutien pour le calcul distribué, le passage de messages, les ressources partagées (y compris la mémoire partagée) ou les contrats à terme.
* Programmation par acteur – Utilise des acteurs pour le calcul parallèle, lesquels prennent des décisions locales en réponse à leur environnement, et peuvent faire preuve de comportement égoïste ou concurrentiel.
* Programmation par contraintes – Exprime les relations entre variables sous forme de contraintes (ou réseaux de contraintes) pour diriger les solutions admissibles, utilisant des techniques comme la satisfaction de contraintes ou l'algorithme du simplexe.
* Programmation par flux de données – Provoque le recalcul forcé des formules lorsque les valeurs des données changent (par exemple, dans les feuilles de calcul).
* Programmation déclarative – Décrit ce qu'un calcul doit accomplir sans spécifier en détail les modifications d'état, contrairement à la programmation impérative. La programmation fonctionnelle et logique sont les principaux sous-groupes de ce paradigme.
* La programmation distribuée – Prend en charge plusieurs ordinateurs autonomes qui communiquent via des réseaux informatiques.
* Programmation fonctionnelle – Utilise l'évaluation de fonctions mathématiques et évite les états et les données modifiables.
* Programmation générique – Emploie des algorithmes définis en termes de types à déterminer ultérieurement, instanciés au besoin pour des types spécifiques fournis en tant que paramètres.
* La programmation impérative – Comprend des déclarations explicites qui modifient l'état d'un programme.
* La programmation logique – Utilise explicitement la logique mathématique pour la programmation.
* La métaprogrammation – Consiste à écrire des programmes qui écrivent ou manipulent d'autres programmes (ou eux-mêmes) comme données, ou à effectuer une partie du travail au moment de la compilation plutôt qu'à l'exécution.
** Modèle de métaprogrammation – Méthode de métaprogrammation où des modèles sont utilisés par un compilateur pour générer du code source, lequel est fusionné avec le reste du code source, puis compilé.
** Réfléchissant programmation – Méthode de métaprogrammation où un programme peut se modifier ou s'étendre lui-même.
* Programmation orientée objet – Utilise des structures de données composées de champs de données et de méthodes, appelées objets, pour la conception de programmes.
** Programmation basée sur des classes – Variante de la programmation orientée objet où l'héritage est atteint par la définition de classes d'objets plutôt que par les objets eux-mêmes.
** Programmation basé sur des prototypes – Variante de la programmation orientée objet qui évite les classes et implémente l'héritage par clonage d'instances.
* Pipeline de programmation – Introduit une syntaxe modifiant légèrement les appels de fonctions imbriqués, conçue initialement sans cette fonctionnalité.
* Programmation logique – Utilise un réseau de règles constituant une base de connaissances, applicable aux systèmes experts et à la déduction de problèmes et leur résolution.
* La programmation visuelle – Manipule graphiquement les éléments du programme plutôt que de les spécifier sous forme de texte (par exemple, Simulink), également appelée programmation schématique.

## Résumés des langages

Légende :
| Valeur | Description |
| Oui | Le langage possède ce paradigme |
| Non | Le langage ne possède pas ce paradigme |
| Bibli | Le paradigme n'est accessible nativement mais via une bibliothèque |
Liste de langages multi-paradigmes :
| Langage | Nombre de Paradigmes | Concurrente | Par contrainte | Par flux de données | Déclarative | Distribuée | Fonctionnelle | Métaprogrammation | Générique | Impérative | Logique | Réfléchissant | Orienté-objet | Pipelines de programmation | Visuelle | Règles de base | Autres paradigmes |
| Ada$^,$$^,$$^,$$^,$ | 5 | Oui | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Non | Oui | Non | Non | Non | Non |
| ALF | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non |
| AmigaE | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| APL | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Tableau (multi-dimensionnel) |
| BETA | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| C++ | 7 (15) | Oui$^,$$^,$ | Bibli | Bibli$^,$ | Bibli$^,$ | Bibli$^,$ | Oui | Oui | Oui | Oui | Bibli$^,$ | Bibli | Oui | Oui | Non | Bibli | Tableau (multi-dimensionnel); en utilisant STL) |
| C# | 6 (7) | Oui | Non | Bibli | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Non | Non | Non | reactive |
| ChucK | 3 | Oui | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| Claire | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non |
| Common Lisp | 5 | Bibli | Bibli | Bibli | Oui | Bibli | Oui | Oui | Oui | Oui | Bibli | Oui | Oui$^,$ | Bibli | Bibli | Bibli | Dispatch multiple, système meta-orienté objet, language extensible via métaprogrammation. |
| Curl | 5 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Curry | 4 | Oui | Oui | Non | Non | Non | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non |
| D (version 2.0)$^,$ | 6 | Oui | Non | Non | Non | Non | Oui | Oui$^,$ | Oui | Oui | Non | Non | Oui | Non | Non | Non | Non |
| Dylan | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Oui | Oui | Non | Non | Non | Non |
| E | 3 | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non |
| ECMAScript$^,$ (ActionScript, E4X, JavaScript, JScript) | 4 (5) | partiel (promises, extensions native) | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui | Non | Non | Non | reactive |
| Embarcadero Delphi | 3 | Non | Non | Non | Non | Non | Non | Non | Oui | Oui | Non | Non | Oui | Non | Non | Non | Non |
| Erlang | 3 | Oui | Non | Non | Non | Oui | Oui | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Non |
| Elixir | 4 | Oui | Non | Non | Non | Oui | Oui | Oui | Non | Non | Non | Non | Non | Oui | Non | Non | Non |
| Elm | 6 | Oui | Non | Oui | Oui | Non | Oui | Non | Oui | Non | Non | Non | Non | Oui | Non | Non | reactive |
| F# | 7 (8) | Oui | Non | Bibli | Oui | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Non | Non | Non | reactive |
| Falcon | 4 | Non | Non | Non | Non | Non | Oui | Oui | Non | Non | Non | Oui | Oui | Non | Non | Non | Non |
| Fortran | 4 (5) | Oui | Non | Non | Non | Non | Oui | Non | Oui | Non | Non | Non | Oui | Non | Non | Non | Tableau (multi-dimensionnel) |
| Go | 4 | Oui | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Oui | Non | Oui | Non | Non | Non |
| Haskell | 2? | Oui | Bibli | Non | Oui | Bibli | Oui (lazy) | Non | Oui | Oui | Non | Non | Non | Non | Oui | Non | Template:Reactive, dependent types (partial) |
| Io | 4 | Oui | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| J | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| Java | 6 | Oui | Bibli | Bibli | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Julia | 9 (17) | Oui | Bibli | Bibli$^,$ | Bibli | Oui | Oui (eager) | Oui | Oui | Oui | Bibli | Oui | Oui | Oui | Non | Bibli$^,$ | Multiple dispatch, Array (multi-dimensional); optionally lazy and reactive (with libraries) |
| Kotlin | 8 | Oui | Non | Non | Non | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui | Oui | Non | Non | Non |
| LabVIEW | 4 | Oui | Non | Oui | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Oui | Non | Non |
| Lava | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Oui | Non | Non |
| Leda | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Oui | Non | Non | Non | Non |
| LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) | 9 | Oui | Non | Non | Non | Oui | Oui | Oui | Non | Oui | Oui | Oui | Oui | Non | Non | Oui | Non |
| Lua | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| MATLAB | 6 (10) | Toolbox | Toolbox | Oui | Non | Toolbox | Non | Oui | Oui | Non | Non | Oui | Oui | Non | Oui | Non | Tableau (multi-dimensionnel) |
| Nemerle | 7 | Oui | Non | Non | Non | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Object Pascal | 4 | Oui | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| OCaml | 4 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Non | Oui | Non | Non | Non | Non |
| Oz | 9 | Oui | Oui | Oui | Non | Oui | Oui | Non | Non | Oui | Oui | Non | Oui | Non | Non | Oui | Non |
| Perl | 8 (9) | Oui | Bibli | Oui | Non | Non | Oui | Oui | Non | Oui | Non | Oui | Oui | Oui | Non | Non | Non |
| PHP$^,$$^,$ | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Poplog | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Non | Non | Non | Non | Non |
| Prograph | 3 | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Oui | Non | Non |
| Python | 5 (10) | Bibli$^,$ | Bibli | Non | Non | Bibli | Partiel | Oui$^,$ | Oui$^,$ | Oui | Bibli | Oui | Oui | Non | Non | Non | structured |
| R | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui | Oui | Non | Non | Tableau (multi-dimensionnel) |
| Racket | 6 | Non | Non | Non | Non | Non | Oui | Oui | Non | Oui | Oui | Oui | Oui | Non | Non | Non | Non |
| Raku | 10 | Oui | Oui | Oui | Non | Bibli | Oui | Oui | Oui | Oui | Non | Oui | Oui | Oui | Non | Non | Multiple dispatch, lazy lists, reactive. |
| ROOP | 3 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Oui | Non | Non | Non | Non | Oui | Non |
| Ruby | 4 | Non | Non | Non | Non | Oui | Oui | Non | Non | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Rust (version 1.0.0-alpha) | 6 | Oui | Non | Non | Non | Non | Oui | Oui$^,$ | Oui | Oui | Non | Non | Oui | Non | Non | Non | linear, affline, and ownership types |
| Sather | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non |
| Scala$^,$ | 9 | Oui | Non | Oui | Oui | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui | Non | Non | Non | Non |
| Simula | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non |
| SISAL | 3 | Oui | Non | Oui | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non |
| Spreadsheets | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non |
| Swift | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | block-structured |
| Tcl with Snit extension | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui$^,$ | Non | Non | Non | Non |
| Visual Basic .NET | 6 (7) | Oui | Non | Bibli | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Non | Non | Non | reactive |
| Windows PowerShell | 6 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Oui | Non | Non | Non |
| Wolfram Language & Mathematica | 13 (14) | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Non | Non | Oui | Knowledge Based |