Les langages de programmation peuvent être regroupées par le nombre et les types de paradigmes pris en charge.
Résumés des paradigmes
modifierUne 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| 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
modifierNotes
modifier- ↑ rendezvous and monitor-like based
- Class-based
- Template metaprogramming
- using TPL Dataflow
- ↑ only lambda support (lazy functional programming)
- using Reactive Extensions (Rx)
- ↑ dispatch multiple, combinaisons de fonctions
- 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
- ↑ 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 ?), 19 janvier 2013
Références
modifier- ↑ 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 ?), 25 janvier 2013
- ↑ Reflect Library
- ↑ N3534
- ↑ Boost.Spirit
- ↑ [1] many concurrency paradigms implemented as language extensions
- ↑ [2] constraint programming inside CL through extensions
- ↑ [3] dataflow extension
- ↑ [4] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
- ↑ [5] MPI, etc via language extensions
- ↑ template metaprogramming using macros (see C++)
- ↑ [6] [7] [8] 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
- ↑ [9] - Visual programming tool based on Common Lisp
- ↑ [10] 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 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 30 août 2020).
- ↑ « JuliaGizmos/Reactive.jl », sur GitHub (consulté le 30 août 2020).
- ↑ 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 30 août 2020).
- ↑ « Gitfoxi/Parsimonious.jl », sur GitHub (consulté le 30 août 2020).
- ↑ Lazy https://github.com/MikeInnes/Lazy.jl
- « Execute loop iterations in parallel », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Write Constraints », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Getting Started with SimEvents », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Execute MATLAB expression in text - MATLAB eval », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Determine class of object », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Class Metadata », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Object-Oriented Programming », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ « Simulink », sur mathworks.com (consulté le 21 octobre 2016)
- ↑ 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 21 octobre 2016)
- ↑ « threading — Higher-level threading interface », sur docs.python.org (consulté le 21 octobre 2016)
- ↑ « python-constraint », sur pypi.python.org (consulté le 21 octobre 2016)
- ↑ « DistributedProgramming », sur wiki.python.org (consulté le 21 octobre 2016)
- ↑ « Chapter 9. Metaprogramming », sur chimera.labs.oreilly.com (consulté le 22 octobre 2016)
- ↑ « Metaprogramming », sur readthedocs.io (consulté le 22 octobre 2016)
- ↑ « PEP 443 -- Single-dispatch generic functions », sur python.org (consulté le 22 octobre 2016)
- ↑ « PEP 484 -- Type Hints », sur python.org (consulté le 22 octobre 2016)
- ↑ « PyDatalog » (consulté le 22 octobre 2016)
- ↑ « Magrittr: A Forward Pipe Operator for R », sur cran.r-project.org\accessdate=13 July 2017
- ↑ Channels and other mechanisms
- ↑ [11]
- ↑ Feed operator
- ↑ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
- ↑ (en) « Meta-programming : what, why and how », sur Raku Advent Calendar, 14 décembre 2011 (consulté le 30 août 2020).
- ↑ 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 11 avril 2019)
- ↑ « The Rust macros guide », sur Rust (consulté le 19 janvier 2015)
- ↑ « The Rust compiler plugins guide », sur Rust (consulté le 19 janvier 2015)
- ↑ 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 22 octobre 2016)
- ↑ « TCLLIB - Tcl Standard Library: snitfaq: », sur sourceforge.net (consulté le 22 octobre 2016)
- ↑ Notes for Programming Language Experts, Wolfram Language Documentation.
Voir aussi
modifierLiens externes
modifierGetting started with Distributed Ruby (DRb) https://nithinbekal.com/posts/distributed-ruby/
- Jim Coplien, Multiparadigm de Conception pour le C++, Addison-Wesley Professional, 1998.