Comparison of multi-paradigm programming languages: Difference between revisions

Content deleted Content added
m Language overview: {{no}} -> {{n/a}} for less busy look
m Undid revision 1305042110 by Bender the Bot (talk) bot error fixed
 
(13 intermediate revisions by 8 users not shown)
Line 9:
* [[Constraint programming]] – relations between variables are expressed as constraints (or constraint networks), directing allowable solutions (uses constraint satisfaction or [[simplex algorithm]])
* [[Dataflow|Dataflow programming]] – forced recalculation of formulas when data values change (e.g. [[spreadsheet]]s)
* [[Declarative programming]] – describes what computation should perform, without specifying detailed state changes c.fcf. imperative programming (functional and logic programming are major subgroups of declarative programming)
* [[Distributed computing|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
Line 67:
|-
| style="font-size: 133%;" | [[C++]] || 7 (15)
| {{yes}}{{wbr}}<ref>[http://en.cppreference.com/w/cpp/thread Thread support]</ref>{{wbr}}<ref>[http://en.cppreference.com/w/cpp/atomic Atomics support]</ref>{{wbr}}<ref>[https://cppandbeyond.wordpress.com/2011/04/11/session-announcement-the-c0x-memory-model-and-why-you-care Memory model]</ref> || {{partial|Library}}{{wbr}}<ref>[http://www.gecode.org/ Gecode]</ref> || {{partial|Library}}{{wbr}}<ref>[http://www.accellera.org/downloads/standards/systemc/about_systemc/ SystemC]</ref>{{wbr}}<ref>[http://www.boost.org/libs/iostreams/ Boost.Iostreams]</ref> || {{partial|Library}}{{wbr}}<ref>[http://code.google.com/p/boolinq/ Boolinq]</ref>{{wbr}}<ref>{{Cite web |url=https://www.cs.technion.ac.il/~lkeren/scp.pdf |title=AraRat |access-date=2019-09-15 |archive-date=2019-08-19 |archive-url=https://web.archive.org/web/20190819105358/http://www.cs.technion.ac.il/~lkeren/scp.pdf |url-status=dead }}</ref> || {{partial|Library}}{{wbr}}<ref>[http://www.open-mpi.org/ OpenMPI]</ref>{{wbr}}<ref>[http://www.boost.org/libs/mpi/ Boost.MPI]</ref> || {{yes}} || {{yes}}{{wbr}}<ref>[http://www.boost.org/libs/mpl/ Boost.MPL]</ref> || {{yes}}{{wbr}}<ref group="a" name="temp-meta">template metaprogramming</ref> || {{yes}} || {{partial|Library}}{{wbr}}<ref>[http://cgi.di.uoa.gr/~smaragd/lc++/ LC++]</ref>{{wbr}}<ref>[http://www.mpprogramming.com/Cpp/Default.aspx Castor] {{webarchive |url=https://web.archive.org/web/20130125024854/http://www.mpprogramming.com/Cpp/Default.aspx |date=2013-01-25}}</ref> || {{partial|Library}}{{wbr}}<ref>[https://bytemaster.github.com/boost_reflect/ Reflect Library]</ref> || {{yes}}{{wbr}}<ref group="a" name="class"/> || {{yespartial|Library}}{{wbr}}<ref>[http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3534.html N3534]</ref> || {{n/a}} || {{partial|Library}}{{wbr}}<ref>[http://www.boost.org/libs/spirit/ Boost.Spirit]</ref> || Array (multi-dimensional; using [[Standard Template Library|STL]])
|-
| style="font-size: 133%;" | [[C Sharp (programming language)|C#]] || 6 (7)
Line 79:
|-
| style="font-size: 133%;" | [[Clojure]] || 5
| {{yes}}{{wbr}}<ref>[https://clojure.org/about/concurrent_programming Clojure - Concurrent Programming]</ref>{{wbr}}<ref>[https://github.com/clojure/core.async Clojure - core.async]</ref> || {{n/a}} || {{n/a}} || {{yes}} || {{n/a}} || {{yes}}{{wbr}}<ref>[https://clojure.org/about/functional_programming Clojure - Functional Programming]</ref> || {{yes}}{{wbr}}<ref>[https://clojure.org/reference/macros Clojure - Macros]</ref> || {{n/a}} || {{n/a}} || {{partial|Library}}{{wbr}}<ref>[https://github.com/clojure/core.logic/ Clojure - core.logic]</ref> || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref>[https://clojure.org/guides/threading_macros Clojure - Threading Macros Guide]</ref> || {{partial|Editor}}{{wbr}}<ref>{{Cite web |url=http:n//lighttable.com/ |title=Light Table |date=2019-04-08a}}</ref> || {{n/a}} || [[Multiple dispatch]],{{wbr}}<ref>[https://clojure.org/reference/multimethods Multimethods and Hierarchies]</ref> Agents{{wbr}}<ref>[https://clojure.org/reference/agents Agents and Asynchronous Actions]</ref>
|-
| style="font-size: 133%;" | [[Common Lisp]] || 7 (14)
| {{partial|Library}}{{wbr}}<ref>[{{Cite web |title=concurrency |url=https://www.cliki.net/Concurrency] many concurrency paradigms implemented as language extensions|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>[httphttps://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
Line 103:
|-
| style="font-size: 133%;" | [[ECMAScript]]{{wbr}}<ref>[http://www.crockford.com/javascript/little.html The Little JavaScripter] demonstrates fundamental commonality with Scheme, a functional language.</ref>{{wbr}}<ref>[http://mckoss.com/jscript/object.htm Object-Oriented Programming in JavaScript] {{Webarchive |url=https://web.archive.org/web/20190210070220/http://mckoss.com/jscript/object.htm |date=2019-02-10}} gives an overview of object-oriented programming techniques in JavaScript.</ref> ([[ActionScript]], [[ECMAScript for XML|E4X]], [[JavaScript]], [[JScript]]) || 4 (5)
| {{partial}}{{wbr}}<ref group="a" name="promises">promises, native extensions</ref>{{wbr}}<ref group="a" name="nodejs-cluster">using [[Node.js]]' [https://nodejs.org/api/cluster.html cluster] module or [https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options child_process.fork] method, [https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers web workers] in the browser, etc.</ref> || {{n/a}} || {{n/a}} || {{partial|Library}}{{wbr}}<ref>{{Cite web |url=https://reactjs.org/ |title=React – A JavaScript library for building user interfaces |date=2019-04-08}}</ref>{{wbr}}<ref>{{Cite web |url=https://github.com/getify/tng-hooks |title=TNG-Hooks |website=[[GitHub]] |date=2019-04-08}}</ref> || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}} || {{yes}} || {{n/a}} || {{yes}} || {{yes}}{{wbr}}<ref group="a" name="prototype">Prototype-based</ref> || {{partial|Library}}{{wbr}}<ref>{{Cite web |url=https://lodash.com/docs/4.17.11#flow |title=Lodash documentation |date=2019-04-08}}</ref>{{wbr}}<ref>{{Cite web |url=https://swannodette.github.io/mori/#pipeline |title=mori |date=2019-04-08}}</ref> || {{partial|Editor}}{{wbr}}<ref>{{Cite web |url=http:n//lighttable.com/ |title=Light Table |date=2019-04-08a}}</ref> || {{n/a}} || Reactive,{{wbr}}<ref group="a" name="rxjs">using [http://reactivex.io/rxjs/ Reactive Extensions (RxJS)]</ref>{{wbr}}<ref>{{Cite web |url=https://github.com/getify/tng-hooks |title=TNG-Hooks |website=[[GitHub]] |date=2019-04-08}}</ref> event driven{{wbr}}<ref group="a" name="node-events">in Node.js via their [https://nodejs.org/api/events.html events] module</ref>{{wbr}}<ref group="a" name="dom-events">in browsers via their native [https://developer.mozilla.org/en-US/docs/Web/API/EventTarget EventTarget] API</ref>
|-
| style="font-size: 133%;" | [[Erlang (programming language)|Erlang]] || 3
Line 136:
|-
| style="font-size: 133%;" | [[Julia (programming language)|Julia]] || 9 (17)
| {{yes}} || {{partial|Library}}{{wbr}}<ref>{{cite web |title=JuliaOpt/JuMP.jl |url=https://github.com/JuliaOpt/JuMP.jl |website=GitHub |publisher=JuliaOpt |access-date=12 February 2020 |date=11 February 2020}}</ref> || {{partial|Library}}{{wbr}}<ref>{{Cite web |url=https://github.com/MikeInnes/DataFlow.jl |title=GitHub - MikeInnes/DataFlow.jl |website=[[GitHub]] |date=2019-01-15}}</ref>{{wbr}}<ref>{{Cite web |url=https://github.com/JuliaGizmos/Reactive.jl |title=GitHub - JuliaGizmos/Reactive.jl: Reactive programming primitives for Julia |website=[[GitHub]] |date=2018-12-28}}</ref> || {{partial|Library}}{{wbr}}<ref>https://github.com/davidanthoff/Query.jl Query almost anything in julia</ref> || {{yes}} || {{yes}} ([[eager evaluation|eager]]) || {{yes}} || {{yes}} || {{yes}} || {{partial|Library}}{{wbr}}<ref>https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia</ref> || {{yes}} || {{yesPartial}}{{wbr}}<ref group="a" name="multiple-dispatch1">multipleUses dispatch,structs notwith traditionalfunction singlepolymorphism and multiple dispatch</ref> || {{yes}} || {{n/a}} || {{partial|Library}}{{wbr}}<ref>{{Cite web |url=https://github.com/abeschneider/PEGParser.jl |title=GitHub - abeschneider/PEGParser.jl: PEG Parser for Julia |website=[[GitHub]] |date=2018-12-03}}</ref>{{wbr}}<ref>{{Cite web |url=https://github.com/gitfoxi/Parsimonious.jl |title=GitHub - gitfoxi/Parsimonious.jl: A PEG parser generator for Julia |website=[[GitHub]] |date=2017-08-03}}</ref> || [[Multiple dispatch]],<br/>Array (multi-dimensional); optionally [[lazy evaluation|lazy]]{{wbr}}<ref>Lazy https://github.com/MikeInnes/Lazy.jl</ref> and reactive (with libraries)
|-
| style="font-size: 133%;" |[[Kotlin (programming language)|Kotlin]] || 8
Line 144:
| {{yes}} || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{yes}} || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}}
|-
| style="font-size: 133%;" | [[Lava (programming language)|Lava]] || 2
| {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{n/a}} || {{yes}}{{wbr}}<ref group="a" name="class"/> || {{n/a}} || {{yes}} || {{n/a}} || {{n/a}}
|-
Line 189:
| {{yes}}{{wbr}}<ref>{{cite web |title=Chapter 9. Metaprogramming |url=http://chimera.labs.oreilly.com/books/1230000000393/ch09.html |website=chimera.labs.oreilly.com |access-date=22 October 2016 |archive-url=https://web.archive.org/web/20161023050954/http://chimera.labs.oreilly.com/books/1230000000393/ch09.html |archive-date=23 October 2016 |url-status=dead}}</ref>{{wbr}}<ref>{{cite web |title=Metaprogramming |url=https://python-3-patterns-idioms-test.readthedocs.io/en/latest/Metaprogramming.html |website=readthedocs.io |access-date=22 October 2016}}</ref>
| {{yes}}{{wbr}}<ref>{{cite web |title=PEP 443 – Single-dispatch generic functions |url=https://www.python.org/dev/peps/pep-0443/ |website=python.org |access-date=22 October 2016}}</ref>{{wbr}}<ref>{{cite web |title=PEP 484 – Type Hints |url=https://www.python.org/dev/peps/pep-0484/#generics |website=python.org |access-date=22 October 2016}}</ref> || {{yes}} || {{partial|Library}}{{wbr}}<ref>{{cite web |url=https://sites.google.com/site/pydatalog/ |title=PyDatalog |access-date=22 October 2016}}</ref> || {{yes}} || {{yes}}{{wbr}}<ref group="a" name="class"/>
| {{n/a}} || {{partial|Editor}}{{wbr}}<ref>{{Cite web |url=http:n//lighttable.com/ |title=Light Table |date=2019-04-08a}}</ref> || {{n/a}} || [[Structured programming|Structured]]
|-
| style="font-size: 133%;" | [[R (programming language)|R]] || 4 (6)
Line 228:
|-
| 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=httphttps://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)