Comparison of multi-paradigm programming languages

From HandWiki
Short description: none

Programming languages can be grouped by the number and types of paradigms supported.

Paradigm summaries

A concise reference for the programming paradigms listed in this article.

  • Concurrent programming – have language constructs for concurrency, these may involve multi-threading, support for distributed computing, message passing, shared resources (including shared memory), or futures
    • Actor programming – concurrent computation with actors that make local decisions in response to the environment (capable of selfish or competitive behaviour)
  • Constraint programming – relations between variables are expressed as constraints (or constraint networks), directing allowable solutions (uses constraint satisfaction or simplex algorithm)
  • Dataflow programming – forced recalculation of formulas when data values change (e.g. spreadsheets)
  • Declarative programming – describes what computation should perform, without specifying detailed state changes cf. imperative programming (functional and logic programming are major subgroups of declarative programming)
  • Distributed programming – have support for multiple autonomous computers that communicate via computer networks
  • Functional programming – uses evaluation of mathematical functions and avoids state and mutable data
  • Generic programming – uses algorithms written in terms of to-be-specified-later types that are then instantiated as needed for specific types provided as parameters
  • Imperative programming – explicit statements that change a program state
  • Logic programming – uses explicit mathematical logic for programming
  • Metaprogramming – writing programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime
    • Template metaprogramming – metaprogramming methods in which a compiler uses templates to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled
    • Reflective programming – metaprogramming methods in which a program modifies or extends itself
  • Object-oriented programming – uses data structures consisting of data fields and methods together with their interactions (objects) to design programs
    • Class-based – object-oriented programming in which inheritance is achieved by defining classes of objects, versus the objects themselves
    • Prototype-based – object-oriented programming that avoids classes and implements inheritance via cloning of instances
  • Pipeline programming – a simple syntax change to add syntax to nest function calls to language originally designed with none
  • Rule-based programming – a network of rules of thumb that comprise a knowledge base and can be used for expert systems and problem deduction & resolution
  • Visual programming – manipulating program elements graphically rather than by specifying them textually (e.g. Simulink); also termed diagrammatic programming[1]

Language overview

See also

Notes

  1. ↑ rendezvous and monitor-like based
  2. ↑ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 2.31 2.32 2.33 2.34 class-based
  3. ↑ 3.0 3.1 3.2 3.3 3.4 template metaprogramming
  4. ↑ 4.0 4.1 4.2 using TPL Dataflow
  5. ↑ only lambda support (lazy functional programming)
  6. ↑ using TPL Dataflow
  7. ↑ 7.0 7.1 7.2 using Reactive Extensions (Rx)
  8. ↑ multiple dispatch, method combinations
  9. ↑ 9.0 9.1 9.2 9.3 9.4 actor programming
  10. ↑ promises, native extensions
  11. ↑ using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  12. ↑ 12.0 12.1 12.2 12.3 Prototype-based
  13. ↑ using Reactive Extensions (RxJS)
  14. ↑ in Node.js via their events module
  15. ↑ in browsers via their native EventTarget API
  16. ↑ 16.0 16.1 16.2 purely functional
  17. ↑ parameterized classes
  18. ↑ immutable
  19. ↑ Uses structs with function polymorphism and multiple dispatch
  20. ↑ Akka

Citations

  1. ↑ Bragg, S.D.; Driskill, C.G. (20–22 September 1994). "Diagrammatic-graphical programming languages and DoD-STD-2167A". Proceedings of AUTOTESTCON '94 (Facebook. Institute of Electrical and Electronics Engineers (IEEE). pp. 211–220. doi:10.1109/AUTEST.1994.381508. ISBN 978-0-7803-1910-3. 
  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". https://www.cs.technion.ac.il/~lkeren/scp.pdf. 
  15. ↑ OpenMPI
  16. ↑ Boost.MPI
  17. ↑ Boost.MPL
  18. ↑ LC++
  19. ↑ Castor
  20. ↑ Reflect Library
  21. ↑ N3534
  22. ↑ Boost.Spirit
  23. ↑ Decider
  24. ↑ Zen
  25. ↑ LINQ
  26. ↑ Orleans
  27. ↑ WCF
  28. ↑ Reflection
  29. ↑ Source generators
  30. ↑ Guan
  31. ↑ NetPrints
  32. ↑ RulesEngine
  33. ↑ Clojure - Concurrent Programming
  34. ↑ Clojure - core.async
  35. ↑ Clojure - Functional Programming
  36. ↑ Clojure - Macros
  37. ↑ Clojure - core.logic
  38. ↑ Clojure - Threading Macros Guide
  39. ↑ Multimethods and Hierarchies
  40. ↑ Agents and Asynchronous Actions
  41. ↑ "concurrency". https://www.cliki.net/Concurrency. 
  42. ↑ [1] constraint programming inside CL through extensions
  43. ↑ [2] dataflow extension
  44. ↑ [3] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
  45. ↑ [4] MPI, etc via language extensions
  46. ↑ template metaprogramming using macros (see C++)
  47. ↑ [5] [6] [7] Prolog implemented as a language extension
  48. ↑ Common Lisp Object System see Wikipedia article on CLOS, the Common Lisp Object System.
  49. ↑ implemented by the user via a short macro, example of implementation
  50. ↑ - Visual programming tool based on Common Lisp
  51. ↑ [8] rule-based programming extension
  52. ↑ [9] through the Meta Object Protocol
  53. ↑ D Language Feature Table
  54. ↑ Phobos std.algorithm
  55. ↑ D language String Mixins
  56. ↑ The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  57. ↑ Object-Oriented Programming in JavaScript gives an overview of object-oriented programming techniques in JavaScript.
  58. ↑ "React – A JavaScript library for building user interfaces". 2019-04-08. https://reactjs.org/. 
  59. ↑ "TNG-Hooks". 2019-04-08. https://github.com/getify/tng-hooks. 
  60. ↑ "Lodash documentation". 2019-04-08. https://lodash.com/docs/4.17.11#flow. 
  61. ↑ "mori". 2019-04-08. https://swannodette.github.io/mori/#pipeline. 
  62. ↑ "TNG-Hooks". 2019-04-08. https://github.com/getify/tng-hooks. 
  63. ↑ "Prolog embedding". https://hackage.haskell.org/package/hswip. 
  64. ↑ "Functional Reactive Programming". https://wiki.haskell.org/Functional_Reactive_Programming. 
  65. ↑ Cloud Haskell
  66. ↑ "Template Haskell". https://wiki.haskell.org/Template_Haskell. 
  67. ↑ "Logict: A backtracking logic-programming monad". https://hackage.haskell.org/package/logict. 
  68. ↑ Kollmansberger, Steve; Erwig, Martin (30 May 2006). "Haskell Rules: Embedding Rule Systems in Haskell". https://web.engr.oregonstate.edu/~erwig/HaskellRules/HaskellRules_June06.pdf. 
  69. ↑ https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
  70. ↑ https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
  71. ↑ "JuliaOpt/JuMP.jl". JuliaOpt. 11 February 2020. https://github.com/JuliaOpt/JuMP.jl. 
  72. ↑ "GitHub - MikeInnes/DataFlow.jl". 2019-01-15. https://github.com/MikeInnes/DataFlow.jl. 
  73. ↑ "GitHub - JuliaGizmos/Reactive.jl: Reactive programming primitives for Julia". 2018-12-28. https://github.com/JuliaGizmos/Reactive.jl. 
  74. ↑ https://github.com/davidanthoff/Query.jl Query almost anything in julia
  75. ↑ https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
  76. ↑ "GitHub - abeschneider/PEGParser.jl: PEG Parser for Julia". 2018-12-03. https://github.com/abeschneider/PEGParser.jl. 
  77. ↑ "GitHub - gitfoxi/Parsimonious.jl: A PEG parser generator for Julia". 2017-08-03. https://github.com/gitfoxi/Parsimonious.jl. 
  78. ↑ Lazy https://github.com/MikeInnes/Lazy.jl
  79. ↑ "Execute loop iterations in parallel". http://mathworks.com/help/distcomp/parfor.html. 
  80. ↑ "Write Constraints". https://mathworks.com/help/optim/write-constraints.html. 
  81. ↑ "Getting Started with SimEvents". https://mathworks.com/help/simevents/getting-started-with-simevents.html. 
  82. ↑ "Execute loop iterations in parallel". http://mathworks.com/help/distcomp/parfor.html. 
  83. ↑ "Execute MATLAB expression in text - MATLAB eval". https://mathworks.com/help/matlab/ref/eval.html. 
  84. ↑ "Determine class of object". https://mathworks.com/help/matlab/ref/class.html. 
  85. ↑ "Class Metadata". https://mathworks.com/help/matlab/get-information-about-classes-and-objects.html. 
  86. ↑ "Object-Oriented Programming". https://mathworks.com/help/matlab/object-oriented-programming.html. 
  87. ↑ "Simulink". https://mathworks.com/help/simulink/. 
  88. ↑ interpreter based threads
  89. ↑ Higher Order Perl
  90. ↑ PHP Manual, Chapter 17. Functions
  91. ↑ PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  92. ↑ PHP Manual, Anonymous functions
  93. ↑ "Parallel Processing and Multiprocessing in Python". https://wiki.python.org/moin/ParallelProcessing. 
  94. ↑ "threading — Higher-level threading interface". https://docs.python.org/2/library/threading.html. 
  95. ↑ "python-constraint". https://pypi.python.org/pypi/python-constraint. 
  96. ↑ "DistributedProgramming". https://wiki.python.org/moin/DistributedProgramming. 
  97. ↑ "Chapter 9. Metaprogramming". http://chimera.labs.oreilly.com/books/1230000000393/ch09.html. 
  98. ↑ "Metaprogramming". https://python-3-patterns-idioms-test.readthedocs.io/en/latest/Metaprogramming.html. 
  99. ↑ "PEP 443 – Single-dispatch generic functions". https://www.python.org/dev/peps/pep-0443/. 
  100. ↑ "PEP 484 – Type Hints". https://www.python.org/dev/peps/pep-0484/#generics. 
  101. ↑ "PyDatalog". https://sites.google.com/site/pydatalog/. 
  102. ↑ "Futureverse". https://www.futureverse.org/. 
  103. ↑ "future batchtools". https://future.batchtools.futureverse.org/. 
  104. ↑ "Magrittr: A Forward Pipe Operator for R". 17 November 2020. https://cran.r-project.org/package=magrittr. 
  105. ↑ Racket Guide: Concurrency and Synchronization
  106. ↑ The Rosette Guide
  107. ↑ FrTime: A Language for Reactive Programs
  108. ↑ Racket Guide: Distributed Places
  109. ↑ Lazy Racket
  110. ↑ Channels and other mechanisms
  111. ↑ "Problem Solver module". https://raku.land/github:FCO/ProblemSolver. 
  112. ↑ Feed operator
  113. ↑ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  114. ↑ "Meta-programming: What, why and how". 2011-12-14. https://perl6advent.wordpress.com/2011/12/14/meta-programming-what-why-and-how/. 
  115. ↑ https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  116. ↑ "Meta-object protocol (MOP)". https://docs.perl6.org/language/mop. 
  117. ↑ https://docs.perl6.org/language/classtut Classes and Roles
  118. ↑ "The Rust macros guide". http://doc.rust-lang.org/1.0.0-alpha/book/macros.html. 
  119. ↑ "The Rust compiler plugins guide". http://doc.rust-lang.org/1.0.0-alpha/book/plugins.html. 
  120. ↑ The Rust Reference §6.1.3.1
  121. ↑ An Overview of the Scala Programming Language
  122. ↑ Scala Language Specification
  123. ↑ "Tcl Programming/Introduction". https://en.wikibooks.org/wiki/Tcl_Programming/Introduction#One_language.2C_many_styles. 
  124. ↑ "TCLLIB - Tcl Standard Library: snitfaq". https://tmml.sourceforge.net/doc/tcllib/snitfaq.html. 
  125. ↑ Notes for Programming Language Experts, Wolfram Language Documentation.
  126. ↑ External Programs, Wolfram Language Documentation.

References

  • Jim Coplien, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.