Comparison of multi-paradigm programming languages: Difference between revisions

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
imported>John of Reading
m Typo fixing, replaced: c.f. → cf.
 
 
Line 19: Line 19:
** [[Reflective programming]] – metaprogramming methods in which a program modifies or extends itself
** [[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
* [[Object-oriented programming]] – uses data structures consisting of data fields and methods together with their interactions (objects) to design programs
** [[Class (computer programming)|Class-based]] – object-oriented programming in which inheritance is achieved by defining classes of objects, versus the objects themselves
** [[Class (programming)|Class-based]] – object-oriented programming in which inheritance is achieved by defining classes of objects, versus the objects themselves
** [[Prototype-based programming|Prototype-based]] – object-oriented programming that avoids classes and implements inheritance via cloning of instances
** [[Prototype-based programming|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
* [[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
* [[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 language|Visual programming]] – manipulating program elements graphically rather than by specifying them textually (e.g. [[Simulink]]); also termed ''diagrammatic programming''<ref>{{cite book |last1=Bragg |first1=S.D. |last2=Driskill |first2=C.G. |date=20–22 September 1994 |chapter=Diagrammatic-graphical programming languages and DoD-STD-2167A |publisher=[[Institute of Electrical and Electronics Engineers]] (IEEE) |doi=10.1109/AUTEST.1994.381508 |title=Proceedings of AUTOTESTCON '94 (IEEEXplore) |pages=211–220 |isbn=978-0-7803-1910-3 |s2cid=62509261}}</ref>
* [[Visual programming language|Visual programming]] – manipulating program elements graphically rather than by specifying them textually (e.g. [[Simulink]]); also termed ''diagrammatic programming''<ref>{{cite book |last1=Bragg |first1=S.D. |last2=Driskill |first2=C.G. |date=20–22 September 1994 |chapter=Diagrammatic-graphical programming languages and DoD-STD-2167A |publisher=[[Institute of Electrical and Electronics Engineers]] (IEEE) |doi=10.1109/AUTEST.1994.381508 |title=Proceedings of AUTOTESTCON '94 (Facebook
|pages=211–220 |isbn=978-0-7803-1910-3 |s2cid=62509261}}</ref>
{{clear}}
{{clear}}


Line 82: Line 83:
|-
|-
| style="font-size: 133%;" | [[Common Lisp]] || 7 (14)  
| style="font-size: 133%;" | [[Common Lisp]] || 7 (14)  
| {{partial|Library}}{{wbr}}<ref>{{Cite web |title=concurrency |url=https://www.cliki.net/Concurrency |website=CLiki}}</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/screamer] constraint programming inside CL through extensions</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Cells] dataflow extension</ref> || {{yes}}{{wbr}}<ref>[http://www.gigamonkeys.com/book/practical-an-html-generation-library-the-interpreter.html] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Distributed] MPI, etc via language extensions</ref> || {{yes}} || {{yes}} || {{yes}}{{wbr}}<ref>template metaprogramming using macros (see C++)</ref> || {{yes}} || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Prolog] [https://franz.com/products/prolog/] [http://www.lispworks.com/products/knowledgeworks.html] [[Prolog]] implemented as a language extension</ref> || {{yes}} || {{yes}}{{wbr}}<ref group="a" name="multiple-dispatch2">multiple dispatch, method combinations</ref>{{wbr}}<ref group="a" name="class"/>{{wbr}}<ref>[[Common Lisp Object System]] see Wikipedia article on CLOS, the Common Lisp Object System.</ref> || {{partial|Library}}{{wbr}}<ref>[http://blog.vjeux.com/2011/lisp/lisp-chaining-operator.html implemented by the user via a short macro, example of implementation]</ref> || {{partial|Library}}{{wbr}}<ref>[https://github.com/honix/Lire - Visual programming tool based on Common Lisp]</ref> || {{partial|Library}}{{wbr}}<ref>[http://lisa.sourceforge.net/] rule-based programming extension</ref> || Multiple dispatch, meta-OOP system,{{wbr}}<ref>[https://common-lisp.net/project/ecl/static/manual/ch31.html] {{Webarchive|url=https://web.archive.org/web/20180426012208/https://common-lisp.net/project/ecl/static/manual/ch31.html|date=2018-04-26}} through the Meta Object Protocol</ref> Language is extensible via metaprogramming.
| {{partial|Library}}{{wbr}}<ref>{{Cite web |title=concurrency |url=https://www.cliki.net/Concurrency |website=CLiki}}</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/screamer] constraint programming inside CL through extensions</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Cells] dataflow extension</ref> || {{yes}}{{wbr}}<ref>[http://www.gigamonkeys.com/book/practical-an-html-generation-library-the-interpreter.html] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative</ref> || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Distributed] MPI, etc via language extensions</ref> || {{yes}} || {{yes}} || {{yes}}{{wbr}}<ref>template metaprogramming using macros (see C++)</ref> || {{yes}} || {{partial|Library}}{{wbr}}<ref>[https://www.cliki.net/Prolog] [https://franz.com/products/prolog/] [http://www.lispworks.com/products/knowledgeworks.html] [[Prolog]] implemented as a language extension</ref> || {{yes}} || {{yes}}{{wbr}}<ref group="a" name="multiple-dispatch2">multiple dispatch, method combinations</ref>{{wbr}}<ref group="a" name="class"/>{{wbr}}<ref>[[Common Lisp Object System]] see Wikipedia article on CLOS, the Common Lisp Object System.</ref> || {{partial|Library}}{{wbr}}<ref>[http://blog.vjeux.com/2011/lisp/lisp-chaining-operator.html implemented by the user via a short macro, example of implementation]</ref> || {{partial|Library}}{{wbr}}<ref>[https://github.com/honix/Lire - Visual programming tool based on Common Lisp]</ref> || {{partial|Library}}{{wbr}}<ref>[https://lisa.sourceforge.net/] rule-based programming extension</ref> || Multiple dispatch, meta-OOP system,{{wbr}}<ref>[https://common-lisp.net/project/ecl/static/manual/ch31.html] {{Webarchive|url=https://web.archive.org/web/20180426012208/https://common-lisp.net/project/ecl/static/manual/ch31.html|date=2018-04-26}} through the Meta Object Protocol</ref> Language is extensible via metaprogramming.
|-
|-
| style="font-size: 133%;" | [[Curl (programming language)|Curl]] || 5  
| style="font-size: 133%;" | [[Curl (programming language)|Curl]] || 5  
Line 228: Line 229:
|-  
|-  
| style="font-size: 133%;" | [[Tcl]] with Snit extension<br/>{{Citation needed |date=March 2007}} || 3  
| style="font-size: 133%;" | [[Tcl]] with Snit extension<br/>{{Citation needed |date=March 2007}} || 3  
| {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref>{{cite web |title=Tcl Programming/Introduction |url=https://en.wikibooks.org/wiki/Tcl_Programming/Introduction#One_language.2C_many_styles |website=en.wikibooks.org |access-date=22 October 2016}}</ref> || {{n/a}} || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref group="a" name="prototype"/>{{wbr}}<ref>{{cite web |title=TCLLIB - Tcl Standard Library: snitfaq |url=http://tmml.sourceforge.net/doc/tcllib/snitfaq.html |website=sourceforge.net |access-date=22 October 2016}}</ref> || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}}
| {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref>{{cite web |title=Tcl Programming/Introduction |url=https://en.wikibooks.org/wiki/Tcl_Programming/Introduction#One_language.2C_many_styles |website=en.wikibooks.org |access-date=22 October 2016}}</ref> || {{n/a}} || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref group="a" name="prototype"/>{{wbr}}<ref>{{cite web |title=TCLLIB - Tcl Standard Library: snitfaq |url=https://tmml.sourceforge.net/doc/tcllib/snitfaq.html |website=sourceforge.net |access-date=22 October 2016}}</ref> || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}}
|-  
|-  
| style="font-size: 133%;" | [[Visual Basic .NET]] || 6 (7)  
| style="font-size: 133%;" | [[Visual Basic .NET]] || 6 (7)  
Line 246: Line 247:


==See also==
==See also==
* [[Carbon (programming language)]] — multi-paradigm language being developed at Google to be a successor to C++
* [[Programming paradigm]]
* [[Programming paradigm]]
* [[List of programming languages by type]]
* [[List of programming languages by type]]

Latest revision as of 18:00, 19 October 2025

Template:Short description Script error: No such module "Unsubst". 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

Template:Sticky header

See also

Notes

Template:Reflist

Citations

Template:Reflist

References

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

Template:Programming paradigms navbox Template:Types of programming languages

  1. Script error: No such module "citation/CS1".
  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. Script error: No such module "citation/CS1".
  15. OpenMPI
  16. Boost.MPI
  17. Boost.MPL
  18. LC++
  19. Castor Template:Webarchive
  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. Script error: No such module "citation/CS1".
  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] Template:Webarchive 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 JavaScript Template:Webarchive gives an overview of object-oriented programming techniques in JavaScript.
  48. Script error: No such module "citation/CS1".
  49. Script error: No such module "citation/CS1".
  50. Script error: No such module "citation/CS1".
  51. Script error: No such module "citation/CS1".
  52. Script error: No such module "citation/CS1".
  53. Script error: No such module "citation/CS1".
  54. Script error: No such module "citation/CS1".
  55. Cloud Haskell
  56. Script error: No such module "citation/CS1".
  57. Script error: No such module "citation/CS1".
  58. Script error: No such module "citation/CS1".
  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. Script error: No such module "citation/CS1".
  62. Script error: No such module "citation/CS1".
  63. Script error: No such module "citation/CS1".
  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. Script error: No such module "citation/CS1".
  67. Script error: No such module "citation/CS1".
  68. Lazy https://github.com/MikeInnes/Lazy.jl
  69. Script error: No such module "citation/CS1".
  70. Script error: No such module "citation/CS1".
  71. Script error: No such module "citation/CS1".
  72. Script error: No such module "citation/CS1".
  73. Script error: No such module "citation/CS1".
  74. Script error: No such module "citation/CS1".
  75. Script error: No such module "citation/CS1".
  76. Script error: No such module "citation/CS1".
  77. Script error: No such module "citation/CS1".
  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. Script error: No such module "citation/CS1".
  84. Script error: No such module "citation/CS1".
  85. Script error: No such module "citation/CS1".
  86. Script error: No such module "citation/CS1".
  87. Script error: No such module "citation/CS1".
  88. Script error: No such module "citation/CS1".
  89. Script error: No such module "citation/CS1".
  90. Script error: No such module "citation/CS1".
  91. Script error: No such module "citation/CS1".
  92. Script error: No such module "citation/CS1".
  93. Script error: No such module "citation/CS1".
  94. Script error: No such module "citation/CS1".
  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. Script error: No such module "citation/CS1".
  102. Feed operator
  103. https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
  104. Script error: No such module "citation/CS1".
  105. https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
  106. Script error: No such module "citation/CS1".
  107. https://docs.perl6.org/language/classtut Classes and Roles
  108. Script error: No such module "citation/CS1".
  109. Script error: No such module "citation/CS1".
  110. The Rust Reference §6.1.3.1
  111. An Overview of the Scala Programming Language
  112. Scala Language Specification
  113. Script error: No such module "citation/CS1".
  114. Script error: No such module "citation/CS1".
  115. Notes for Programming Language Experts, Wolfram Language Documentation.
  116. External Programs, Wolfram Language Documentation.


Cite error: <ref> tags exist for a group named "a", but no corresponding <references group="a"/> tag was found