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

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.
  • 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
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[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

Notes

modifier
  1. rendezvous and monitor-like based
  2. a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj et ak Class-based
  3. a b c d et e Template metaprogramming
  4. a b et c using TPL Dataflow
  5. only lambda support (lazy functional programming)
  6. a et b using Reactive Extensions (Rx)
  7. dispatch multiple, combinaisons de fonctions
  8. a b c d et e actor programming
  9. using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  10. a b c et d Prototype-based
  11. using Reactive Extensions (RxJS)
  12. purely functional
  13. parameterized classes
  14. dispatch multiple
  15. Akka « https://web.archive.org/web/20130119045517/http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html »(Archive.orgWikiwixGoogleQue faire ?), 19 janvier 2013

Références

modifier
  1. S.D. Bragg et C.G. Driskill, « Diagrammatic-graphical programming languages and DoD-STD-2167A », IEEEXplore, IEEE, 20–22 september 1994
  2. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
  3. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
  4. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
  5. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
  6. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions
  7. Thread support
  8. Atomics support
  9. Memory model
  10. Gecode
  11. SystemC
  12. Boost.Iostreams
  13. Boolinq
  14. AraRat
  15. OpenMPI
  16. Boost.MPI
  17. Boost.MPL
  18. LC++
  19. Castor « https://web.archive.org/web/20130125024854/http://www.mpprogramming.com/Cpp/Default.aspx »(Archive.orgWikiwixGoogleQue faire ?), 25 janvier 2013
  20. Reflect Library
  21. N3534
  22. Boost.Spirit
  23. [1] many concurrency paradigms implemented as language extensions
  24. [2] constraint programming inside CL through extensions
  25. [3] dataflow extension
  26. [4] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
  27. [5] MPI, etc via language extensions
  28. template metaprogramming using macros (see C++)
  29. [6] [7] [8] Prolog implemented as a language extension
  30. en:Common_Lisp_Object_System see Wikipedia article on CLOS, the Common Lisp Object System.
  31. implemented by the user via a short macro, example of implementation
  32. [9] - Visual programming tool based on Common Lisp
  33. [10] rule-based programming extension
  34. Meta Object Protocol
  35. D Language Feature Table
  36. Phobos std.algorithm
  37. D language String Mixins
  38. The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  39. 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.
  40. Prolog embedding
  41. Cloud Haskell
  42. https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
  43. https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
  44. https://jump.readthedocs.io/en/latest/
  45. « MikeInnes/DataFlow.jl », sur GitHub (consulté le 30 août 2020).
  46. « JuliaGizmos/Reactive.jl », sur GitHub (consulté le 30 août 2020).
  47. https://github.com/davidanthoff/Query.jl Query almost anything in julia
  48. https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
  49. « Abeschneider/PEGParser.jl », sur GitHub (consulté le 30 août 2020).
  50. « Gitfoxi/Parsimonious.jl », sur GitHub (consulté le 30 août 2020).
  51. Lazy https://github.com/MikeInnes/Lazy.jl
  52. a et b « Execute loop iterations in parallel », sur mathworks.com (consulté le 21 octobre 2016)
  53. « Write Constraints », sur mathworks.com (consulté le 21 octobre 2016)
  54. « Getting Started with SimEvents », sur mathworks.com (consulté le 21 octobre 2016)
  55. « Execute MATLAB expression in text - MATLAB eval », sur mathworks.com (consulté le 21 octobre 2016)
  56. « Determine class of object », sur mathworks.com (consulté le 21 octobre 2016)
  57. « Class Metadata », sur mathworks.com (consulté le 21 octobre 2016)
  58. « Object-Oriented Programming », sur mathworks.com (consulté le 21 octobre 2016)
  59. « Simulink », sur mathworks.com (consulté le 21 octobre 2016)
  60. interpreter based threads
  61. Moose
  62. Higher Order Perl
  63. PHP Manual, Chapter 17. Functions
  64. PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  65. PHP Manual, Anonymous functions
  66. « Parallel Processing and Multiprocessing in Python », sur wiki.python.org (consulté le 21 octobre 2016)
  67. « threading — Higher-level threading interface », sur docs.python.org (consulté le 21 octobre 2016)
  68. « python-constraint », sur pypi.python.org (consulté le 21 octobre 2016)
  69. « DistributedProgramming », sur wiki.python.org (consulté le 21 octobre 2016)
  70. « Chapter 9. Metaprogramming », sur chimera.labs.oreilly.com (consulté le 22 octobre 2016)
  71. « Metaprogramming », sur readthedocs.io (consulté le 22 octobre 2016)
  72. « PEP 443 -- Single-dispatch generic functions », sur python.org (consulté le 22 octobre 2016)
  73. « PEP 484 -- Type Hints », sur python.org (consulté le 22 octobre 2016)
  74. « PyDatalog » (consulté le 22 octobre 2016)
  75. « Magrittr: A Forward Pipe Operator for R », sur cran.r-project.org\accessdate=13 July 2017
  76. Channels and other mechanisms
  77. [11]
  78. Feed operator
  79. https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  80. (en) « Meta-programming : what, why and how », sur Raku Advent Calendar, 14 décembre 2011 (consulté le 30 août 2020).
  81. https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  82. https://docs.perl6.org/language/mop
  83. https://docs.perl6.org/language/classtut Classes and Roles
  84. (en) Nithin Bekal, « Getting started with Distributed Ruby (DRb) », sur nithinbekal.com (consulté le 11 avril 2019)
  85. « The Rust macros guide », sur Rust (consulté le 19 janvier 2015)
  86. « The Rust compiler plugins guide », sur Rust (consulté le 19 janvier 2015)
  87. The Rust Reference §6.1.3.1
  88. An Overview of the Scala Programming Language
  89. Scala Language Specification
  90. « Tcl Programming/Introduction », sur en.wikibooks.org (consulté le 22 octobre 2016)
  91. « TCLLIB - Tcl Standard Library: snitfaq: », sur sourceforge.net (consulté le 22 octobre 2016)
  92. Notes for Programming Language Experts, Wolfram Language Documentation.

Voir aussi

modifier

Liens externes

modifier

Getting started with Distributed Ruby (DRb) https://nithinbekal.com/posts/distributed-ruby/

  • Jim Coplien, Multiparadigm de Conception pour le C++, Addison-Wesley Professional, 1998.

Articles liés

modifier

📚 Artikel Terkait di Wikipedia

Programmation neuro-linguistique

site des sceptiques Skeptoid NLP: Neuro-linguistic Programming, Some regard Neuro-linguistic Programming as a psychotherapy breakthrough, some as a New Age

Carl Sassenrath

Journal; 6/2000 REBOL for Dummies; Ralph Roberts; Hungry Minds; 2000 REBOL Programming; Olivier Auverlot; Éditions Eyrolles; 2001 Computing Encyclopedia, Vol

Java (langage)

 », sur JavaWorld, 4 octobre 1996 Core Web Programming, Marty Hall, Larry Brown Object-oriented Programming with Java, Barry J. Holmes, Daniel T. Joyce

Xeon Phi

Jeffers et James Reinders, Intel Xeon Phi Coprocessor High Performance Programming, Morgan Kaufmann, 1er mars 2013 (ISBN 978-0124104143) (en-US) Joel Hruska

Architecture Dataflow

Executing a Program on the MIT Tagged-Token Dataflow Architecture. Flow-based Programming : un livre sur la programmation orientée flot de données. Portail

Worst Case Execution Time

Schmitz et Florian Schmoll, « WCET-aware Register Allocation Based on Integer-Linear Programming », Real-Time Systems (ECRTS), 2011 23rd Euromicro Conference

FreeRTOS

Juha-Matti Vanhatupa et Hannu-Matti Järvinen, « Framework for embedded programming course », Proceedings of the 11th Koli Calling International Conference

Équilibrage de charge des serveurs Web

distribution in cluster-based network servers », Proceedings of the eighth international conference on Architectural support for programming languages and operating