Comparaison des langages de programmation multi-paradigmes
Apparence
Les langages de programmation peuvent être regroupées par le nombre et les types de paradigmes pris en charge.
Résumés des paradigmes
[modifier | modifier le code]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[1].
Résumés des langages
[modifier | modifier le code]| 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 |
| Langage | Autres paradigmes | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ada[2],[3],[4],[5],[6] | 5 | Oui[note 1] | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| ALF | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non |
| AmigaE[réf. nécessaire] | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui[note 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 [réf. nécessaire] | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| C++ | 7 (15) | Oui[7],[8],[9] | Bibli[10] | Bibli[11],[12] | Bibli[13],[14] | Bibli[15],[16] | Oui | Oui[17] | Oui[note 3] | Oui | Bibli[18],[19] | Bibli[20] | Oui[note 2] | Oui[21] | Non | Bibli[22] | Tableau (multi-dimensionnel); en utilisant STL) |
| C# | 6 (7) | Oui | Non | Bibli[note 4] | Non | Non | Oui[note 5] | Non | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | reactive[note 6] |
| ChucK [réf. nécessaire] | 3 | Oui | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Claire | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Common Lisp | 5 | Bibli[23] | Bibli[24] | Bibli[25] | Oui[26] | Bibli[27] | Oui | Oui | Oui[28] | Oui | Bibli[29] | Oui | Oui [note 7],[30],[note 2] | Bibli[31] | Bibli[32] | Bibli[33] | Dispatch multiple, système meta-orienté objet[34], language extensible via métaprogrammation. |
| Curl | 5 | Non | Non | Non | Non | Non | Oui | Non | Oui[note 3] | Oui | Non | Oui | Oui[note 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)[35],[36] | 6 | Oui[note 8] | Non | Non | Non | Non | Oui | Oui[37],[note 3] | Oui[note 3] | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Dylan[réf. nécessaire] | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| E | 3 | Oui | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| ECMAScript[38],[39] (ActionScript, E4X, JavaScript, JScript) | 4 (5) | partiel (promises, extensions native)[note 9] | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui[note 10] | Non | Non | Non | reactive[note 11] |
| Embarcadero Delphi | 3 | Non | Non | Non | Non | Non | Non | Non | Oui[note 3] | Oui | Non | Non | Oui[note 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[note 8] | Non | Bibli[note 4] | Oui | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | reactive[note 6] |
| Falcon | 4 | Non | Non | Non | Non | Non | Oui | Oui | Non | Non | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| Fortran | 4 (5) | Oui | Non | Non | Non | Non | Oui[note 12] | Non | Oui[note 13] | Non | Non | Non | Oui[note 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 | Bibli[40] | Non | Oui | Bibli[41] | Oui (lazy) | Non | Oui | Oui | Non | Non | Non | Non | Oui | Non | Template:Reactive, dependent types (partial) |
| Io | 4 | Oui[note 8] | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[note 10] | Non | Non | Non | Non |
| J [réf. nécessaire] | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Java | 6 | Oui | Bibli[42] | Bibli[43] | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| Julia | 9 (17) | Oui | Bibli[44] | Bibli[45],[46] | Bibli[47] | Oui | Oui (eager) | Oui | Oui | Oui | Bibli[48] | Oui | Oui [note 14] | Oui | Non | Bibli[49],[50] | Multiple dispatch, Array (multi-dimensional); optionally lazy[51] 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[note 2] | Non | Oui | Non | Non |
| Leda | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Oui | Non | Oui[note 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[note 2] | Non | Non | Oui | Non |
| Lua [réf. nécessaire] | 3 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[note 10] | Non | Non | Non | Non |
| MATLAB | 6 (10) | Toolbox[52] | Toolbox[53] | Oui[54] | Non | Toolbox[52] | Non | Oui[55] | Oui[56] | Non | Non | Oui[57] | Oui[58] | Non | Oui[59] | Non | Tableau (multi-dimensionnel) |
| Nemerle | 7 | Oui | Non | Non | Non | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| Object Pascal | 4 | Oui | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| OCaml | 4 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Oz | 9 | Oui | Oui | Oui | Non | Oui | Oui | Non | Non | Oui | Oui | Non | Oui[note 2] | Non | Non | Oui | Non |
| Perl [réf. nécessaire] | 8 (9) | Oui[60] | Bibli[61] | Oui[62] | Non | Non | Oui | Oui | Non | Oui | Non | Oui[note 2] | Oui[note 2] | Oui | Non | Non | Non |
| PHP[63],[64],[65] | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui[note 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[note 2] | Non | Oui | Non | Non |
| Python | 5 (10) | Bibli[66],[67] | Bibli[68] | Non | Non | Bibli[69] | Partiel | Oui[70],[71] | Oui[72],[73] | Oui | Bibli[74] | Oui | Oui[note 2] | Non | Non | Non | structured |
| R | 4 | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Non | Oui | Oui | Oui[75] | 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[76] | Oui[77] | Oui[78] | Non | Bibli[79] | Oui | Oui[80] | Oui[81] | Oui | Non | Oui[82] | Oui[83] | 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[84] | Oui | Non | Non | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| Rust (version 1.0.0-alpha) | 6 | Oui[note 8] | Non | Non | Non | Non | Oui | Oui[85],[86] | Oui[87] | Oui | Non | Non | Oui | Non | Non | Non | linear, affline, and ownership types |
| Sather[citation nécessaire] | 2 | Non | Non | Non | Non | Non | Oui | Non | Non | Non | Non | Non | Oui[note 2] | Non | Non | Non | Non |
| Scala[88],[89] | 9 | Oui[note 8] | Non | Oui[note 15] | Oui | Non | Oui | Oui | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | Non |
| Simula[citation nécessaire] | 2 | Non | Non | Non | Non | Non | Non | Non | Non | Oui | Non | Non | Oui[note 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[note 2] | Non | Non | Non | block-structured |
| Tcl with Snit extension [citation nécessaire] | 3 | Non | Non | Non | Non | Non | Oui[90] | Non | Non | Oui | Non | Non | Oui[note 10],[91] | Non | Non | Non | Non |
| Visual Basic .NET | 6 (7) | Oui | Non | Bibli[note 4] | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[note 2] | Non | Non | Non | reactive |
| Windows PowerShell | 6 | Non | Non | Non | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui[note 2] | Oui | Non | Non | Non |
| Wolfram Language & Mathematica | 13[92] (14) | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Oui | Non | Non | Oui | Knowledge Based |
Notes et références
[modifier | modifier le code]Notes
[modifier | modifier le code]- ↑ rendezvous and monitor-like based
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Class-based
- 1 2 3 4 5 Template metaprogramming
- 1 2 3 using TPL Dataflow
- ↑ only lambda support (lazy functional programming)
- 1 2 using Reactive Extensions (Rx)
- ↑ dispatch multiple, combinaisons de fonctions
- 1 2 3 4 5 actor programming
- ↑ using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
- 1 2 3 4 Prototype-based
- ↑ using Reactive Extensions (RxJS)
- ↑ purely functional
- ↑ parameterized classes
- ↑ dispatch multiple
- ↑ Akka « https://web.archive.org/web/20130119045517/http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html »(Archive.org • Wikiwix • Google • Que faire ?),
Références
[modifier | modifier le code]- ↑ 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 • 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
- ↑ - Visual programming tool based on Common Lisp
- ↑ rule-based programming extension
- ↑ 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 sur archive.org) 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
- 1 2 « 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
- ↑ 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
- ↑ 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
- ↑ (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.
Voir aussi
[modifier | modifier le code]Liens externes
[modifier | modifier le code]Getting started with Distributed Ruby (DRb) https://nithinbekal.com/posts/distributed-ruby/
- Jim Coplien, Multiparadigm de Conception pour le C++, Addison-Wesley Professional, 1998.