Jump to content

Comparison of multi-paradigm programming languages

From Wikipedia, the free encyclopedia

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

Paradigm summaries

[edit]

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 c.f. 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

[edit]

See also

[edit]

Notes

[edit]
  1. ^rendezvous and monitor-like based
  2. ^ abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiclass-based
  3. ^ abcdetemplate metaprogramming
  4. ^ abcusing TPL Dataflow
  5. ^only lambda support (lazy functional programming)
  6. ^ abcusing Reactive Extensions (Rx)
  7. ^multiple dispatch, method combinations
  8. ^ abcdeactor programming
  9. ^promises, native extensions
  10. ^using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  11. ^ abcdPrototype-based
  12. ^using Reactive Extensions (RxJS)
  13. ^in Node.js via their events module
  14. ^in browsers via their native EventTarget API
  15. ^ abcpurely functional
  16. ^parameterized classes
  17. ^immutable
  18. ^Uses structs with function polymorphism and multiple dispatch
  19. ^AkkaArchived 2013-01-19 at the Wayback Machine

Citations

[edit]
  1. ^Bragg, S.D.; Driskill, C.G. (20–22 September 1994). "Diagrammatic-graphical programming languages and DoD-STD-2167A". Proceedings of AUTOTESTCON '94 (IEEEXplore). Institute of Electrical and Electronics Engineers (IEEE). pp. 211–220. doi:10.1109/AUTEST.1994.381508. ISBN 978-0-7803-1910-3. S2CID 62509261.
  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. 3Annex 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"(PDF). Archived from the original(PDF) on 2019-08-19. Retrieved 2019-09-15.
  15. ^OpenMPI
  16. ^Boost.MPI
  17. ^Boost.MPL
  18. ^LC++
  19. ^CastorArchived 2013-01-25 at the Wayback Machine
  20. ^Reflect Library
  21. ^N3534
  22. ^Boost.Spirit
  23. ^Clojure - Concurrent Programming
  24. ^Clojure - core.async
  25. ^Clojure - Functional Programming
  26. ^Clojure - Macros
  27. ^Clojure - core.logic
  28. ^Clojure - Threading Macros Guide
  29. ^Multimethods and Hierarchies
  30. ^Agents and Asynchronous Actions
  31. ^"concurrency". CLiki.
  32. ^[1] constraint programming inside CL through extensions
  33. ^[2] dataflow extension
  34. ^[3] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
  35. ^[4] MPI, etc via language extensions
  36. ^template metaprogramming using macros (see C++)
  37. ^[5][6][7]Prolog implemented as a language extension
  38. ^Common Lisp Object System see Wikipedia article on CLOS, the Common Lisp Object System.
  39. ^implemented by the user via a short macro, example of implementation
  40. ^- Visual programming tool based on Common Lisp
  41. ^[8] rule-based programming extension
  42. ^[9]Archived 2018-04-26 at the Wayback Machine through the Meta Object Protocol
  43. ^D Language Feature Table
  44. ^Phobos std.algorithm
  45. ^D language String Mixins
  46. ^The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  47. ^Object-Oriented Programming in JavaScriptArchived 2019-02-10 at the Wayback Machine gives an overview of object-oriented programming techniques in JavaScript.
  48. ^"React – A JavaScript library for building user interfaces". 2019-04-08.
  49. ^"TNG-Hooks". GitHub. 2019-04-08.
  50. ^"Lodash documentation". 2019-04-08.
  51. ^"mori". 2019-04-08.
  52. ^"TNG-Hooks". GitHub. 2019-04-08.
  53. ^"Prolog embedding". Haskell.org.
  54. ^"Functional Reactive Programming". HaskellWiki.
  55. ^Cloud Haskell
  56. ^"Template Haskell". HaskellWiki.
  57. ^"Logict: A backtracking logic-programming monad". Haskell.org.
  58. ^Kollmansberger, Steve; Erwig, Martin (30 May 2006). "Haskell Rules: Embedding Rule Systems in Haskell"(PDF). Oregon State University.
  59. ^https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
  60. ^https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
  61. ^"JuliaOpt/JuMP.jl". GitHub. JuliaOpt. 11 February 2020. Retrieved 12 February 2020.
  62. ^"GitHub - MikeInnes/DataFlow.jl". GitHub. 2019-01-15.
  63. ^"GitHub - JuliaGizmos/Reactive.jl: Reactive programming primitives for Julia". GitHub. 2018-12-28.
  64. ^https://github.com/davidanthoff/Query.jl Query almost anything in julia
  65. ^https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
  66. ^"GitHub - abeschneider/PEGParser.jl: PEG Parser for Julia". GitHub. 2018-12-03.
  67. ^"GitHub - gitfoxi/Parsimonious.jl: A PEG parser generator for Julia". GitHub. 2017-08-03.
  68. ^Lazy https://github.com/MikeInnes/Lazy.jl
  69. ^"Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
  70. ^"Write Constraints". mathworks.com. Retrieved 21 October 2016.
  71. ^"Getting Started with SimEvents". mathworks.com. Retrieved 21 October 2016.
  72. ^"Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
  73. ^"Execute MATLAB expression in text - MATLAB eval". mathworks.com. Retrieved 21 October 2016.
  74. ^"Determine class of object". mathworks.com. Retrieved 21 October 2016.
  75. ^"Class Metadata". mathworks.com. Retrieved 21 October 2016.
  76. ^"Object-Oriented Programming". mathworks.com. Retrieved 21 October 2016.
  77. ^"Simulink". mathworks.com. Retrieved 21 October 2016.
  78. ^interpreter based threads
  79. ^Higher Order Perl
  80. ^PHP Manual, Chapter 17. Functions
  81. ^PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  82. ^PHP Manual, Anonymous functions
  83. ^"Parallel Processing and Multiprocessing in Python". Python Wiki. Retrieved 21 October 2016.
  84. ^"threading — Higher-level threading interface". docs.python.org. Retrieved 21 October 2016.
  85. ^"python-constraint". pypi.python.org. Retrieved 21 October 2016.
  86. ^"DistributedProgramming". Python Wiki. Retrieved 21 October 2016.
  87. ^"Chapter 9. Metaprogramming". chimera.labs.oreilly.com. Archived from the original on 23 October 2016. Retrieved 22 October 2016.
  88. ^"Metaprogramming". readthedocs.io. Retrieved 22 October 2016.
  89. ^"PEP 443 – Single-dispatch generic functions". python.org. Retrieved 22 October 2016.
  90. ^"PEP 484 – Type Hints". python.org. Retrieved 22 October 2016.
  91. ^"PyDatalog". Retrieved 22 October 2016.
  92. ^"Futureverse".
  93. ^"future batchtools".
  94. ^"Magrittr: A Forward Pipe Operator for R". cran.r-project.org\access-date=13 July 2017. 17 November 2020.
  95. ^Racket Guide: Concurrency and Synchronization
  96. ^The Rosette Guide
  97. ^FrTime: A Language for Reactive Programs
  98. ^Racket Guide: Distributed Places
  99. ^Lazy Racket
  100. ^Channels and other mechanisms
  101. ^"Problem Solver module".
  102. ^Feed operator
  103. ^https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  104. ^"Meta-programming: What, why and how". 2011-12-14.
  105. ^https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  106. ^"Meta-object protocol (MOP)".
  107. ^https://docs.perl6.org/language/classtut Classes and Roles
  108. ^"The Rust macros guide". Rust. Retrieved 19 January 2015.
  109. ^"The Rust compiler plugins guide". Rust. Retrieved 19 January 2015.
  110. ^The Rust Reference §6.1.3.1
  111. ^An Overview of the Scala Programming Language
  112. ^Scala Language Specification
  113. ^"Tcl Programming/Introduction". en.wikibooks.org. Retrieved 22 October 2016.
  114. ^"TCLLIB - Tcl Standard Library: snitfaq". sourceforge.net. Retrieved 22 October 2016.
  115. ^Notes for Programming Language Experts, Wolfram Language Documentation.
  116. ^External Programs, Wolfram Language Documentation.

References

[edit]
  • Jim Coplien, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.
close