Accueil🇫🇷Chercher

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

Liste de langages multi-paradigmes
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]NonNonNonOuiNonNonOuiOuiNonNonOui[a 2]NonNonNonNon
ALF 2 NonNonNonNonNonOuiNonNonNonOuiNonNonNonNonNonNon
AmigaE 2 NonNonNonNonNonNonNonNonOuiNonNonOui[a 2]NonNonNonNon
APL 3 NonNonNonNonNonOuiNonNonOuiNonNonNonNonNonNon Tableau (multi-dimensionnel)
BETA 3 NonNonNonNonNonOuiNonNonOuiNonNonOui[a 2]NonNonNonNon
C++ 7 (15) Oui[7] - [8] - [9]Bibliothèque[10]Bibliothèque[11] - [12]Bibliothèque[13] - [14]Bibliothèque[15] - [16]OuiOui[17]Oui[a 3]OuiBibliothèque[18] - [19]Bibliothèque[20]Oui[a 2]Oui[21]NonBibliothèque[22] Tableau (multi-dimensionnel); en utilisant STL)
C# 6 (7) OuiNonBibliothèque[a 4]NonNonOui[a 5]NonOuiOuiNonOuiOui[a 2]NonNonNon reactive[a 6]
ChucK 3 OuiNonNonNonNonNonNonNonOuiNonNonOui[a 2]NonNonNonNon
Claire 2 NonNonNonNonNonOuiNonNonNonNonNonOui[a 2]NonNonNonNon
Common Lisp 5 Bibliothèque[23]Bibliothèque[24]Bibliothèque[25]Oui[26]Bibliothèque[27]OuiOuiOui[28]OuiBibliothèque[29]OuiOui (multiple dispatch, method combinations)[30] - [a 2]Bibliothèque[31]NonBibliothèque[32] Multiple dispatch, meta-OOP system[33], Language is extensible via metaprogramming.
Curl 5 NonNonNonNonNonOuiNonOui[a 3]OuiNonOuiOui[a 2]NonNonNonNon
Curry 4 OuiOuiNonNonNonOuiNonNonNonOuiNonNonNonNonNonNon
D (version 2.0)[34] - [35] 6 Oui[a 7]NonNonNonNonOuiOui[36] - [a 3]Oui[a 3]OuiNonNonOui[a 2]NonNonNonNon
Dylan 3 NonNonNonNonNonOuiNonNonNonNonOuiOui[a 2]NonNonNonNon
E 3 OuiNonNonNonOuiNonNonNonNonNonNonOui[a 2]NonNonNonNon
ECMAScript[37] - [38] (ActionScript, E4X, JavaScript, JScript) 4 (5) partial (promises, native extensions)[a 8]NonNonNonNonOuiNonNonOuiNonOuiOui[a 9]NonNonNon reactive[a 10]
Embarcadero Delphi 3 NonNonNonNonNonNonNonOui[a 3]OuiNonNonOui[a 2]NonNonNonNon
Erlang 3 OuiNonNonNonOuiOuiNonNonNonNonNonNonOuiNonNonNon
Elixir 4 OuiNonNonNonOuiOuiOuiNonNonNonNonNonOuiNonNonNon
Elm 6 OuiNonOuiOuiNonOuiNonOuiNonNonNonNonOuiNonNon reactive
F# 7 (8) Oui[a 7]NonBibliothèque[a 4]OuiNonOuiNonOuiOuiNonOuiOui[a 2]NonNonNon reactive[a 6]
Falcon 4 NonNonNonNonNonOuiOuiNonNonNonOuiOui[a 2]NonNonNonNon
Fortran 4 (5) OuiNonNonNonNonOui[a 11]NonOui[a 12]NonNonNonOui[a 2]NonNonNon Tableau (multi-dimensionnel)
Go 4 OuiNonNonNonNonNonNonNonOuiNonOuiNonOuiNonNonNon
Haskell 2? OuiBibliothèque[39]NonOuiBibliothèque[40]Oui (lazy)NonOuiOuiNonNonNonNonOuiNon Template:Reactive, dependent types (partial)
Io 4 Oui[a 7]NonNonNonNonOuiNonNonOuiNonNonOui[a 9]NonNonNonNon
J 3 NonNonNonNonNonOuiNonNonOuiNonNonOui[a 2]NonNonNonNon
Java 6 OuiBibliothèque[41]Bibliothèque[42]NonNonOuiNonOuiOuiNonOuiOui[a 2]NonNonNonNon
Julia 9 (17) OuiBibliothèque[43]Bibliothèque[44] - [45]Bibliothèque[46]OuiOui (eager)OuiOuiOuiBibliothèque[47]OuiOui (multiple dispatch, not traditional single)OuiNonBibliothèque[48] - [49] Multiple dispatch,
Array (multi-dimensional); optionally lazy[50] and reactive (with libraries)
Kotlin 8 OuiNonNonNonNonOuiOuiOuiOuiNonOuiOuiOuiNonNonNon
LabVIEW 4 OuiNonOuiNonNonNonNonNonNonNonNonOuiNonOuiNonNon
Lava 2 NonNonNonNonNonNonNonNonNonNonNonOui[a 2]NonOuiNonNon
Leda 4 NonNonNonNonNonOuiNonNonOuiOuiNonOui[a 2]NonNonNonNon
LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) 9 OuiNonNonNonOuiOuiOuiNonOuiOuiOuiOui[a 2]NonNonOuiNon
Lua 3 NonNonNonNonNonOuiNonNonOuiNonNonOui[a 9]NonNonNonNon
MATLAB 6 (10) Toolbox[51]Toolbox[52]Oui[53]NonToolbox[51]NonOui[54]Oui[55]NonNonOui[56]Oui[57]NonOui[58]Non Tableau (multi-dimensionnel)
Nemerle 7 OuiNonNonNonNonOuiOuiOuiOuiNonOuiOui[a 2]NonNonNonNon
Object Pascal 4 OuiNonNonNonNonOuiNonNonOuiNonNonOui[a 2]NonNonNonNon
OCaml 4 NonNonNonNonNonOuiNonOuiOuiNonNonOui[a 2]NonNonNonNon
Oz 9 OuiOuiOuiNonOuiOuiNonNonOuiOuiNonOui[a 2]NonNonOuiNon
Perl 8 (9) Oui[59]Bibliothèque[60]Oui[61]NonNonOuiOuiNonOuiNonOui[a 2]Oui[a 2]OuiNonNonNon
Perl6 10 Oui[62]Oui[63]Oui[64]NonBibliothèque[65]OuiOui[66]Oui[67]OuiNonOui[68]Oui[69]OuiNonNon Multiple dispatch, lazy lists, reactive.
PHP[70] - [71] - [72] 4 NonNonNonNonNonOuiNonNonOuiNonOuiOui[a 2]NonNonNonNon
Poplog 3 NonNonNonNonNonOuiNonNonOuiOuiNonNonNonNonNonNon
Prograph 3 NonNonOuiNonNonNonNonNonNonNonNonOui[a 2]NonOuiNonNon
Python 5 (10) Bibliothèque[73] - [74] Bibliothèque[75] Non Non Bibliothèque[76] Partiel Oui[77] - [78] Oui[79] - [80]OuiBibliothèque[81]OuiOui[a 2] NonNonNon structured
R 4 NonNonNonNonNonOuiNonNonOuiNonOuiOuiOui[82]NonNon Tableau (multi-dimensionnel)
Racket 6 NonNonNonNonNonOuiOuiNonOuiOuiOuiOuiNonNonNonNon
ROOP 3 NonNonNonNonNonNonNonNonOuiOuiNonNonNonNonOuiNon
Ruby 4 NonNonNonNonOui[83]OuiNonNonOuiNonOuiOui[a 2]NonNonNonNon
Rust (version 1.0.0-alpha) 6 Oui[a 7]NonNonNonNonOuiOui[84] - [85]Oui[86]OuiNonNonOuiNonNonNon linear, affline, and ownership types
Sather 2 NonNonNonNonNonOuiNonNonNonNonNonOui[a 2]NonNonNonNon
Scala[87] - [88] 9 Oui[a 7]NonOui[a 13]OuiNonOuiOuiOuiOuiNonOuiOui[a 2]NonNonNonNon
Simula 2 NonNonNonNonNonNonNonNonOuiNonNonOui[a 2]NonNonNonNon
SISAL 3 OuiNonOuiNonNonOuiNonNonNonNonNonNonNonNonNonNon
Spreadsheets 2 NonNonNonNonNonOuiNonNonNonNonNonNonNonOuiNonNon
Swift 3 NonNonNonNonNonOuiNonNonOuiNonNonOui[a 2]NonNonNon block-structured
Tcl with Snit extension 3 NonNonNonNonNonOui[89]NonNonOuiNonNonOui[a 9] - [90]NonNonNonNon
Visual Basic .NET 6 (7) OuiNonBibliothèque[a 4]NonNonOuiNonOuiOuiNonOuiOui[a 2]NonNonNon reactive
Windows PowerShell 6 NonNonNonNonNonOuiNonOuiOuiNonOuiOui[a 2]OuiNonNonNon
Wolfram Language & Mathematica 13[91] (14) OuiOuiOuiOuiOuiOuiOuiOuiOuiOuiOuiOuiNonNonOui Knowledge Based

Notes

  1. rendezvous and monitor-like based
  2. Class-based
  3. Template metaprogramming
  4. using TPL Dataflow
  5. only lambda support (lazy functional programming)
  6. using Reactive Extensions (Rx)
  7. actor programming
  8. using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  9. 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 »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?),

Citations

  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.org • Wikiwix • Archive.is • Google • Que faire ?),
  20. Reflect Library
  21. N3534
  22. Boost.Spirit
  23. many concurrency paradigms implemented as language extensions
  24. constraint programming inside CL through extensions
  25. dataflow extension
  26. by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
  27. MPI, etc via language extensions
  28. template metaprogramming using macros (see C++)
  29. 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. ] rule-based programming extension
  33. 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 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. « MikeInnes/DataFlow.jl », sur GitHub (consulté le ).
  45. « JuliaGizmos/Reactive.jl », sur GitHub (consulté le ).
  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. « Abeschneider/PEGParser.jl », sur GitHub (consulté le ).
  49. « Gitfoxi/Parsimonious.jl », sur GitHub (consulté le ).
  50. Lazy https://github.com/MikeInnes/Lazy.jl
  51. « Execute loop iterations in parallel », sur mathworks.com (consulté le )
  52. « Write Constraints », sur mathworks.com (consulté le )
  53. « Getting Started with SimEvents », sur mathworks.com (consulté le )
  54. « Execute MATLAB expression in text - MATLAB eval », sur mathworks.com (consulté le )
  55. « Determine class of object », sur mathworks.com (consulté le )
  56. « Class Metadata », sur mathworks.com (consulté le )
  57. « Object-Oriented Programming », sur mathworks.com (consulté le )
  58. « Simulink », sur mathworks.com (consulté le )
  59. interpreter based threads
  60. Moose
  61. Higher Order Perl
  62. Channels and other mechanisms
  63. Feed operator
  64. https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  65. (en) « Meta-programming : what, why and how », sur Raku Advent Calendar, (consulté le ).
  66. https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  67. https://docs.perl6.org/language/mop
  68. https://docs.perl6.org/language/classtut Classes and Roles
  69. PHP Manual, Chapter 17. Functions
  70. PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  71. PHP Manual, Anonymous functions
  72. « Parallel Processing and Multiprocessing in Python », sur wiki.python.org (consulté le )
  73. « threading — Higher-level threading interface », sur docs.python.org (consulté le )
  74. « python-constraint », sur pypi.python.org (consulté le )
  75. « DistributedProgramming », sur wiki.python.org (consulté le )
  76. « Chapter 9. Metaprogramming », sur chimera.labs.oreilly.com (consulté le )
  77. « Metaprogramming », sur readthedocs.io (consulté le )
  78. « PEP 443 -- Single-dispatch generic functions », sur python.org (consulté le )
  79. « PEP 484 -- Type Hints », sur python.org (consulté le )
  80. « PyDatalog » (consulté le )
  81. « Magrittr: A Forward Pipe Operator for R », sur cran.r-project.org\accessdate=13 July 2017
  82. (en) Nithin Bekal, « Getting started with Distributed Ruby (DRb) », sur nithinbekal.com (consulté le )
  83. « The Rust macros guide », sur Rust (consulté le )
  84. « The Rust compiler plugins guide », sur Rust (consulté le )
  85. The Rust Reference §6.1.3.1
  86. An Overview of the Scala Programming Language
  87. Scala Language Specification
  88. « Tcl Programming/Introduction », sur en.wikibooks.org (consulté le )
  89. « TCLLIB - Tcl Standard Library: snitfaq: », sur sourceforge.net (consulté le )
  90. 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.