Comparaison des langages de programmation multi-paradigmes

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

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 – 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[modifier | modifier le code]

Liste de langages multi-paradigmes
Language 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[réf. nécessaire] 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 [réf. nécessaire] 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 [réf. nécessaire] 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[réf. nécessaire] 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 [réf. nécessaire] 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 [réf. nécessaire] 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 [réf. nécessaire] 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[citation nécessaire] 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[citation nécessaire] 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 [citation nécessaire] 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[modifier | modifier le code]

  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. a b c d et e actor programming
  8. using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  9. a b c et d Prototype-based
  10. using Reactive Extensions (RxJS)
  11. purely functional
  12. parameterized classes
  13. Akka « https://web.archive.org/web/20130119045517/http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html »(ArchiveWikiwixArchive.isGoogleQue faire ?),

Citations[modifier | modifier le code]

  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 »(ArchiveWikiwixArchive.isGoogleQue faire ?),
  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]] rule-based programming extension
  33. [10] through the Meta Object Protocol
  34. D Language Feature Table
  35. Phobos std.algorithm
  36. D language String Mixins
  37. The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  38. Object Oriented Programming in JavaScript « Copie archivée » (version du 22 juillet 2018 sur l'Internet Archive) gives an overview of object-oriented programming techniques in JavaScript.
  39. Prolog embedding
  40. Cloud Haskell
  41. https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
  42. https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
  43. https://jump.readthedocs.io/en/latest/
  44. https://github.com/MikeInnes/DataFlow.jl
  45. https://github.com/JuliaGizmos/Reactive.jl
  46. https://github.com/davidanthoff/Query.jl Query almost anything in julia
  47. https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
  48. https://github.com/abeschneider/PEGParser.jl
  49. https://github.com/gitfoxi/Parsimonious.jl
  50. Lazy https://github.com/MikeInnes/Lazy.jl
  51. a et b « Execute loop iterations in parallel », sur mathworks.com (consulté le 21 octobre 2016)
  52. « Write Constraints », sur mathworks.com (consulté le 21 octobre 2016)
  53. « Getting Started with SimEvents », sur mathworks.com (consulté le 21 octobre 2016)
  54. « Execute MATLAB expression in text - MATLAB eval », sur mathworks.com (consulté le 21 octobre 2016)
  55. « Determine class of object », sur mathworks.com (consulté le 21 octobre 2016)
  56. « Class Metadata », sur mathworks.com (consulté le 21 octobre 2016)
  57. « Object-Oriented Programming », sur mathworks.com (consulté le 21 octobre 2016)
  58. « Simulink », sur mathworks.com (consulté le 21 octobre 2016)
  59. interpreter based threads
  60. Moose
  61. Higher Order Perl
  62. Channels and other mechanisms
  63. [11]
  64. Feed operator
  65. https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  66. https://perl6advent.wordpress.com/2011/12/14/meta-programming-what-why-and-how/
  67. https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  68. https://docs.perl6.org/language/mop
  69. https://docs.perl6.org/language/classtut Classes and Roles
  70. PHP Manual, Chapter 17. Functions
  71. PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  72. PHP Manual, Anonymous functions
  73. « Parallel Processing and Multiprocessing in Python », sur wiki.python.org (consulté le 21 octobre 2016)
  74. « threading — Higher-level threading interface », sur docs.python.org (consulté le 21 octobre 2016)
  75. « python-constraint », sur pypi.python.org (consulté le 21 octobre 2016)
  76. « DistributedProgramming », sur wiki.python.org (consulté le 21 octobre 2016)
  77. « Chapter 9. Metaprogramming », sur chimera.labs.oreilly.com (consulté le 22 octobre 2016)
  78. « Metaprogramming », sur readthedocs.io (consulté le 22 octobre 2016)
  79. « PEP 443 -- Single-dispatch generic functions », sur python.org (consulté le 22 octobre 2016)
  80. « PEP 484 -- Type Hints », sur python.org (consulté le 22 octobre 2016)
  81. « PyDatalog » (consulté le 22 octobre 2016)
  82. « Magrittr: A Forward Pipe Operator for R », sur cran.r-project.org\accessdate=13 July 2017
  83. (en) Nithin Bekal, « Getting started with Distributed Ruby (DRb) », sur nithinbekal.com (consulté le 11 avril 2019)
  84. « The Rust macros guide », sur Rust (consulté le 19 janvier 2015)
  85. « The Rust compiler plugins guide », sur Rust (consulté le 19 janvier 2015)
  86. The Rust Reference §6.1.3.1
  87. An Overview of the Scala Programming Language
  88. Scala Language Specification
  89. « Tcl Programming/Introduction », sur en.wikibooks.org (consulté le 22 octobre 2016)
  90. « TCLLIB - Tcl Standard Library: snitfaq: », sur sourceforge.net (consulté le 22 octobre 2016)
  91. Notes for Programming Language Experts, Wolfram Language Documentation.

Références[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.