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 – avoir des éléments de langage pour la concurrence, il peut s'agir de multi-threading, le soutien pour le calcul distribué, le passage des messages, des ressources partagées (y compris de la mémoire partagée), ou des contrats à terme
- Acteur de programmation parallèles calcul avec les acteurs qui font de la prise de décisions locales en réponse à l'environnement (capable de l'égoïsme ou le comportement des concurrents)
- Programmation par contraintes sur les relations entre les variables sont exprimées comme des contraintes (ou contrainte de réseaux), de diriger des solutions admissibles (utilise la satisfaction de la contrainte ou de l'algorithme du simplexe)
- Programmation par flux de données – forcé recalcul des formules lorsque les valeurs de données de changement (par exemple, des feuilles de calcul)
- Programmation déclarative – décrit ce qu'un calcul doit effectuer, sans spécification détaillée des modifications de l'état c.f. la programmation impérative (fonctionnelle et logique de programmation sont les principaux sous-groupes de la programmation déclarative)
- La programmation distribuée – avoir le soutien de plusieurs ordinateurs autonomes qui communiquent via les réseaux informatiques
- Programmation fonctionnelle – les utilisations de l'évaluation de fonctions mathématiques et évite d'état et de données mutable
- Programmation générique – utilise des algorithmes écrits en termes d'à -être-déterminé plus tard, les types qui sont ensuite instancié en tant que de besoin pour des types spécifiques fournis en tant que paramètres
- La programmation impérative – des déclarations explicites que le changement d'un programme de l'état
- La programmation logique – utilise explicite de la logique mathématique pour la programmation
- La métaprogrammation – l'écriture de programmes que d'écrire ou manipuler d'autres programmes (ou eux-mêmes) comme de leurs données, ou faire une partie du travail au moment de la compilation que sinon, au moment de l'exécution
- Modèle de métaprogrammation – métaprogrammation méthodes dans lequel les modèles sont utilisés par un compilateur pour générer une source code, qui est fusionné par le compilateur avec le reste du code source, puis compilé
- Réfléchissant programmation – métaprogrammation méthodes dans lesquelles un programme modifie ou s'étend lui-même
- Programmation orientée objet – utilise des structures de données composées de champs de données et les méthodes avec leurs interactions (les objets) pour la conception de programmes de
- La classe de base – programmation orientée objet dont l'héritage est atteint par la définition des classes d'objets, contre les objets eux-mêmes
- Basé sur des prototypes – la programmation orientée objet, qui évite les classes et met en œuvre l'héritage par clonage d'instances
- Pipeline de programmation – une syntaxe simple modification pour ajouter de la syntaxe de nid d'appels de fonction à la langue, à l'origine conçu avec aucun
- La règle de base de la programmation d'un réseau de règles de base qui constituent une base de connaissances et peut être utilisé pour les systèmes experts et le problème de la déduction et de la résolution
- La programmation visuelle de manipuler les éléments du programme graphiquement plutôt qu'en les précisant sous forme de texte (par exemple, Simulink); également appelée schématique de programmation[1]
Résumés des langages
Langage | Nombres 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[2] - [3] - [4] - [5] - [6] | 5 | Oui[a 1] | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Non | Oui[a 2] | 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[a 2] | 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[a 2] | Non | Non | Non | Non |
C++ | 7 (15) | Oui[7] - [8] - [9] | Bibliothèque[10] | Bibliothèque[11] - [12] | Bibliothèque[13] - [14] | Bibliothèque[15] - [16] | Oui | Oui[17] | Oui[a 3] | Oui | Bibliothèque[18] - [19] | Bibliothèque[20] | Oui[a 2] | Oui[21] | Non | Bibliothèque[22] | Tableau (multi-dimensionnel); en utilisant STL) |
C# | 6 (7) | Oui | Non | Bibliothèque[a 4] | Non | Non | Oui[a 5] | Non | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | reactive[a 6] |
ChucK | 3 | Oui | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui[a 2] | Non | Non | Non | Non |
Claire | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Oui[a 2] | Non | Non | Non | Non |
Common Lisp | 5 | Bibliothèque[23] | Bibliothèque[24] | Bibliothèque[25] | Oui[26] | Bibliothèque[27] | Oui | Oui | Oui[28] | Oui | Bibliothèque[29] | Oui | Oui (multiple dispatch, method combinations)[30] - [a 2] | Bibliothèque[31] | Non | Bibliothèque[32] | Multiple dispatch, meta-OOP system[33], Language is extensible via metaprogramming. |
Curl | 5 | Non | Non | Non | Non | Non | Oui | Non | Oui[a 3] | Oui | Non | Oui | Oui[a 2] | 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)[34] - [35] | 6 | Oui[a 7] | Non | Non | Non | Non | Oui | Oui[36] - [a 3] | Oui[a 3] | Oui | Non | Non | Oui[a 2] | Non | Non | Non | Non |
Dylan | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
E | 3 | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Oui[a 2] | Non | Non | Non | Non |
ECMAScript[37] - [38] (ActionScript, E4X, JavaScript, JScript) | 4 (5) | partial (promises, native extensions)[a 8] | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui[a 9] | Non | Non | Non | reactive[a 10] |
Embarcadero Delphi | 3 | Non | Non | Non | Non | Non | Non | Non | Oui[a 3] | Oui | Non | Non | Oui[a 2] | 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[a 7] | Non | Bibliothèque[a 4] | Oui | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | reactive[a 6] |
Falcon | 4 | Non | Non | Non | Non | Non | Oui | Oui | Non | Non | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
Fortran | 4 (5) | Oui | Non | Non | Non | Non | Oui[a 11] | Non | Oui[a 12] | Non | Non | Non | Oui[a 2] | 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 | Bibliothèque[39] | Non | Oui | Bibliothèque[40] | Oui (lazy) | Non | Oui | Oui | Non | Non | Non | Non | Oui | Non | Template:Reactive, dependent types (partial) |
Io | 4 | Oui[a 7] | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[a 9] | Non | Non | Non | Non |
J | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[a 2] | Non | Non | Non | Non |
Java | 6 | Oui | Bibliothèque[41] | Bibliothèque[42] | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
Julia | 9 (17) | Oui | Bibliothèque[43] | Bibliothèque[44] - [45] | Bibliothèque[46] | Oui | Oui (eager) | Oui | Oui | Oui | Bibliothèque[47] | Oui | Oui (multiple dispatch, not traditional single) | Oui | Non | Bibliothèque[48] - [49] | Multiple dispatch, Array (multi-dimensional); optionally lazy[50] 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[a 2] | Non | Oui | Non | Non |
Leda | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Oui[a 2] | 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[a 2] | Non | Non | Oui | Non |
Lua | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[a 9] | Non | Non | Non | Non |
MATLAB | 6 (10) | Toolbox[51] | Toolbox[52] | Oui[53] | Non | Toolbox[51] | Non | Oui[54] | Oui[55] | Non | Non | Oui[56] | Oui[57] | Non | Oui[58] | Non | Tableau (multi-dimensionnel) |
Nemerle | 7 | Oui | Non | Non | Non | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
Object Pascal | 4 | Oui | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[a 2] | Non | Non | Non | Non |
OCaml | 4 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Non | Oui[a 2] | Non | Non | Non | Non |
Oz | 9 | Oui | Oui | Oui | Non | Oui | Oui | Non | Non | Oui | Oui | Non | Oui[a 2] | Non | Non | Oui | Non |
Perl | 8 (9) | Oui[59] | Bibliothèque[60] | Oui[61] | Non | Non | Oui | Oui | Non | Oui | Non | Oui[a 2] | Oui[a 2] | Oui | Non | Non | Non |
Perl6 | 10 | Oui[62] | Oui[63] | Oui[64] | Non | Bibliothèque[65] | Oui | Oui[66] | Oui[67] | Oui | Non | Oui[68] | Oui[69] | Oui | Non | Non | Multiple dispatch, lazy lists, reactive. |
PHP[70] - [71] - [72] | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui[a 2] | 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[a 2] | Non | Oui | Non | Non |
Python | 5 (10) | Bibliothèque[73] - [74] | Bibliothèque[75] | Non | Non | Bibliothèque[76] | Partiel | Oui[77] - [78] | Oui[79] - [80] | Oui | Bibliothèque[81] | Oui | Oui[a 2] | Non | Non | Non | structured |
R | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui | Oui[82] | Non | Non | Tableau (multi-dimensionnel) |
Racket | 6 | Non | Non | Non | Non | Non | Oui | Oui | Non | Oui | Oui | Oui | Oui | Non | Non | Non | Non |
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[83] | Oui | Non | Non | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
Rust (version 1.0.0-alpha) | 6 | Oui[a 7] | Non | Non | Non | Non | Oui | Oui[84] - [85] | Oui[86] | 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[a 2] | Non | Non | Non | Non |
Scala[87] - [88] | 9 | Oui[a 7] | Non | Oui[a 13] | Oui | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | Non |
Simula | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui[a 2] | 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[a 2] | Non | Non | Non | block-structured |
Tcl with Snit extension | 3 | Non | Non | Non | Non | Non | Oui[89] | Non | Non | Oui | Non | Non | Oui[a 9] - [90] | Non | Non | Non | Non |
Visual Basic .NET | 6 (7) | Oui | Non | Bibliothèque[a 4] | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[a 2] | Non | Non | Non | reactive |
Windows PowerShell | 6 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[a 2] | Oui | Non | Non | Non |
Wolfram Language & Mathematica | 13[91] (14) | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Non | Non | Oui | Knowledge Based |
Notes
- rendezvous and monitor-like based
- Class-based
- Template metaprogramming
- using TPL Dataflow
- only lambda support (lazy functional programming)
- using Reactive Extensions (Rx)
- actor programming
- using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
- Prototype-based
- using Reactive Extensions (RxJS)
- purely functional
- parameterized classes
- Akka « https://web.archive.org/web/20130119045517/http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?),
Citations
- S.D. Bragg et C.G. Driskill, « Diagrammatic-graphical programming languages and DoD-STD-2167A », IEEEXplore, IEEE, 20–22 september 1994
- Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
- Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
- Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
- Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
- Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions
- Thread support
- Atomics support
- Memory model
- Gecode
- SystemC
- Boost.Iostreams
- Boolinq
- AraRat
- OpenMPI
- Boost.MPI
- Boost.MPL
- LC++
- Castor « https://web.archive.org/web/20130125024854/http://www.mpprogramming.com/Cpp/Default.aspx »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?),
- Reflect Library
- N3534
- Boost.Spirit
- many concurrency paradigms implemented as language extensions
- constraint programming inside CL through extensions
- dataflow extension
- by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
- MPI, etc via language extensions
- template metaprogramming using macros (see C++)
- Prolog implemented as a language extension
- [[:en:Common_Lisp_Object_System] see Wikipedia article on CLOS, the Common Lisp Object System.
- implemented by the user via a short macro, example of implementation
- ] rule-based programming extension
- through the Meta Object Protocol
- D Language Feature Table
- Phobos std.algorithm
- D language String Mixins
- The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
- Object Oriented Programming in JavaScript « Copie archivée » (version du 22 juillet 2018 sur Internet Archive) gives an overview of object-oriented programming techniques in JavaScript.
- Prolog embedding
- Cloud Haskell
- https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
- https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
- https://jump.readthedocs.io/en/latest/
- « MikeInnes/DataFlow.jl », sur GitHub (consulté le ).
- « JuliaGizmos/Reactive.jl », sur GitHub (consulté le ).
- https://github.com/davidanthoff/Query.jl Query almost anything in julia
- https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
- « Abeschneider/PEGParser.jl », sur GitHub (consulté le ).
- « Gitfoxi/Parsimonious.jl », sur GitHub (consulté le ).
- Lazy https://github.com/MikeInnes/Lazy.jl
- « Execute loop iterations in parallel », sur mathworks.com (consulté le )
- « Write Constraints », sur mathworks.com (consulté le )
- « Getting Started with SimEvents », sur mathworks.com (consulté le )
- « Execute MATLAB expression in text - MATLAB eval », sur mathworks.com (consulté le )
- « Determine class of object », sur mathworks.com (consulté le )
- « Class Metadata », sur mathworks.com (consulté le )
- « Object-Oriented Programming », sur mathworks.com (consulté le )
- « Simulink », sur mathworks.com (consulté le )
- interpreter based threads
- Moose
- Higher Order Perl
- Channels and other mechanisms
- Feed operator
- https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
- (en) « Meta-programming : what, why and how », sur Raku Advent Calendar, (consulté le ).
- https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
- https://docs.perl6.org/language/mop
- https://docs.perl6.org/language/classtut Classes and Roles
- PHP Manual, Chapter 17. Functions
- PHP Manual, Chapter 19. Classes and Objects (PHP 5)
- PHP Manual, Anonymous functions
- « Parallel Processing and Multiprocessing in Python », sur wiki.python.org (consulté le )
- « threading — Higher-level threading interface », sur docs.python.org (consulté le )
- « python-constraint », sur pypi.python.org (consulté le )
- « DistributedProgramming », sur wiki.python.org (consulté le )
- « Chapter 9. Metaprogramming », sur chimera.labs.oreilly.com (consulté le )
- « Metaprogramming », sur readthedocs.io (consulté le )
- « PEP 443 -- Single-dispatch generic functions », sur python.org (consulté le )
- « PEP 484 -- Type Hints », sur python.org (consulté le )
- « PyDatalog » (consulté le )
- « Magrittr: A Forward Pipe Operator for R », sur cran.r-project.org\accessdate=13 July 2017
- (en) Nithin Bekal, « Getting started with Distributed Ruby (DRb) », sur nithinbekal.com (consulté le )
- « The Rust macros guide », sur Rust (consulté le )
- « The Rust compiler plugins guide », sur Rust (consulté le )
- The Rust Reference §6.1.3.1
- An Overview of the Scala Programming Language
- Scala Language Specification
- « Tcl Programming/Introduction », sur en.wikibooks.org (consulté le )
- « TCLLIB - Tcl Standard Library: snitfaq: », sur sourceforge.net (consulté le )
- Notes for Programming Language Experts, Wolfram Language Documentation.
Références
Getting started with Distributed Ruby (DRb) https://nithinbekal.com/posts/distributed-ruby/
- Jim Coplien, Multiparadigm de Conception pour le C++, Addison-Wesley Professional, 1998.
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.