Comparison of Multi-Paradigm Programming Languages - Wikipedia
Comparison of Multi-Paradigm Programming Languages - Wikipedia
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 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
1 of 6 5/9/24, 21:14
Comparison of multi-paradigm programming languages - ... https://en.wikipedia.org/wiki/Comparison_of_multi-parad...
Metaprogramming
Paradigm count
Object-oriented
Constraints
Declarative
Distributed
Concurrent
Imperative
Language Other
Rule-based
Functional
Reflection
Dataflow
Pipelines
Generic
Visual
Logic
Ada[2][3][4][5] Yes
5 Yes[a 1] No No No Yes No No Yes Yes No No [a 2] No No No No
[6]
Yes
AmigaE 2 No No No No No No No No Yes No No [a 2] No No No No
Array (multi-
APL 3 No No No No No Yes No No Yes No No No No No No
dimensional)
Yes
BETA 3 No No No No No Yes No No Yes No No [a 2] No No No No
Array (multi-
7 Yes[7][8] Library Library Library Library Yes Yes Library Library Yes Library
C++ [9] [10] [11][12] [13][14] [15][16] Yes [17] [a 3] Yes [18][19] [20] [a 2] Yes[21] No [22] dimensional; using
(15)
STL)
6 Library Yes
C# Yes No [a 4] No No Yes[a 5] No Yes Yes No Yes [a 2] No No No Reactive[a 6]
(7)
Yes
ChucK 3 Yes No No No No No No No Yes No No [a 2] No No No No
Yes
Claire 2 No No No No No Yes No No No No No [a 2] No No No No
Multiple dispatch,
Yes
meta-OOP system,
Common 7 Library Library Library Library Yes Library [a 7] Library Library Library
[32] [33] [34] Yes[35] [36] Yes Yes [37] Yes [38] Yes [a 2] [40] [41] [42]
[43] Language is
Lisp (14)
[39] extensible via
metaprogramming.
Yes Yes
Curl 5 No No No No No Yes No [a 3] Yes No Yes [a 2] No No No No
Yes
D (version Yes Yes
7 Yes[a 8] No No No No Yes [46]
[a 3] Yes No Yes [a 2] No No No No
2.0)[44][45] [a 3]
Yes Yes
Delphi 3 No No No No No No No [a 3] Yes No No [a 2] No No No No
Yes
Dylan 3 No No No No No Yes No No No No Yes [a 2] No No No No
Yes
E 3 Yes No No No Yes No No No No No No [a 2] No No No No
ECMAScript
[47][48]
Partial Reactive,[a 12][54]
(ActionScript, 4 [a 9] Library Yes Library Editor
No No [49][50] No Yes No No Yes No Yes [a 11] [51][52] [53] No event driven[a 13]
E4X, (5) [a 10] [a 14]
JavaScript,
JScript)
Yes
Elm 6 Yes No Yes Yes No (pure) No Yes No No No No Yes No No Reactive
[a 15]
7 Library Yes
F# Yes[a 8] No [a 4] Yes No Yes No Yes Yes No Yes [a 2] No No No Reactive[a 6]
(8)
Yes
Literate, reactive,
8 Library Library Library (lazy) Yes Library Partial Library
Haskell (15)
Yes [55] [56] Yes [57] (pure) [58] Yes Yes [59] No [a 17] Yes Yes [60] dependent types
[a 15] (partial)
2 of 6 5/9/24, 21:14
Comparison of multi-paradigm programming languages - ... https://en.wikipedia.org/wiki/Comparison_of_multi-parad...
Metaprogramming
Paradigm count
Object-oriented
Constraints
Declarative
Distributed
Concurrent
Imperative
Language Other
Rule-based
Functional
Reflection
Dataflow
Pipelines
Generic
Visual
Logic
Yes
Io 4 Yes[a 8] No No No No Yes No No Yes No No [a 11] No No No No
Yes
J 3 No No No No No Yes No No Yes No No [a 2] No No No No
Multiple dispatch,
Array (multi-
9 Library Library Library Yes Library Yes Library dimensional);
Julia (17)
Yes [63] [64][65] [66] Yes
(eager)
Yes Yes Yes [67] Yes [a 18] Yes No [68][69] optionally lazy[70]
and reactive (with
libraries)
Yes
Lava 2 No No No No No No No No No No No [a 2] No Yes No No
LispWorks
(version 6.0
with support
for
symmetric Yes
9 Yes No No No Yes Yes Yes No Yes Yes Yes [a 2] No No Yes No
multi-
processing,
rules, logic
(Prolog),
CORBA)
Yes
Lua 3 No No No No No Yes No No Yes No No [a 11] No No No No
Yes
Nemerle 7 Yes No No No No Yes Yes Yes Yes No Yes [a 2] No No No No
Yes
Object Pascal 4 Yes No No No No Yes No No Yes No No [a 2] No No No No
Yes
OCaml 4 No No No No No Yes No Yes Yes No No [a 2] No No No No
Yes
Oz 11 Yes Yes Yes Yes Yes Yes No No Yes Yes No [a 2] Yes No Yes No
8 Library Yes
Perl Yes[80] [81] Yes[82] No No Yes Yes No Yes No Yes[a 2] [a 2] Yes No No No
(9)
Yes
PHP[83][84][85] 4 No No No No No Yes No No Yes No Yes [a 2] No No No No
Yes
Prograph 3 No No Yes No No No No No No No No [a 2] No Yes No No
Yes Yes
5 Library Library Library [90] [92] Library Yes Editor
Python (10) [86][87] [88] No No [89] Yes Yes [94] Yes [a 2] No [95] No Structured
[91] [93]
Yes
Racket 10 Yes[99] Yes[100] [101] No Yes[102] Yes Yes No Yes Yes Yes Yes No No No Lazy[103]
Yes
Ruby 5 No No No No No Yes Yes No Yes No Yes [a 2] No No No No
Yes
Rust (version Yes Linear, affline, and
6 Yes[a 8] No No No No Yes [112]
[114] Yes No No Yes No No No
1.0.0-alpha) [113] ownership types
3 of 6 5/9/24, 21:14
Comparison of multi-paradigm programming languages - ... https://en.wikipedia.org/wiki/Comparison_of_multi-parad...
Metaprogramming
Paradigm count
Object-oriented
Constraints
Declarative
Distributed
Concurrent
Imperative
Language Other
Rule-based
Functional
Reflection
Dataflow
Pipelines
Generic
Visual
Logic
Yes
Sather 2 No No No No No Yes No No No No No [a 2] No No No No
Yes Yes
Scala[115][116] 9 Yes[a 8] No [a 19] Yes No Yes Yes Yes Yes No Yes [a 2] No No No No
Yes
Simula 2 No No No No No No No No Yes No No [a 2] No No No No
Yes
Swift 7 Yes No No No No Yes Yes Yes Yes No Yes [a 2] No No No Block-structured
Yes
Tcl with Snit Yes [a 11]
3 No No No No No [117] No No Yes No No No No No No
extension [118]
Windows Yes
6 No No No No No Yes No Yes Yes No Yes [a 2] Yes No No No
PowerShell
Wolfram 13
[119] Yes
Language & Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes [120] No Yes Knowledge Based
(14)
Mathematica
See also
▪ Programming paradigm
▪ List of programming languages by type
▪ Domain-specific language
▪ Domain-specific multimodeling
Notes
1. rendezvous and monitor-like based 11. Prototype-based
2. class-based 12. using Reactive Extensions (RxJS) (http://reactivex.io/rxjs/)
3. template metaprogramming 13. in Node.js via their events (https://nodejs.org/api/events.html)
4. using TPL Dataflow (http://msdn.microsoft.com/en-us/devlabs/gg5 module
85582.aspx) 14. in browsers via their native EventTarget (https://developer.mozilla.
5. only lambda support (lazy functional programming) org/en-US/docs/Web/API/EventTarget) API
6. using Reactive Extensions (Rx) (http://msdn.microsoft.com/en-us/d 15. purely functional
ata/gg577609.aspx) 16. parameterized classes
7. multiple dispatch, method combinations 17. immutable
8. actor programming 18. multiple dispatch, not traditional single
9. promises, native extensions 19. Akka (http://doc.akka.io/docs/akka/snapshot/scala/dataflow.html)
10. using Node.js' cluster (https://nodejs.org/api/cluster.html) module Archived (https://web.archive.org/web/20130119045517/http://do
or child_process.fork (https://nodejs.org/api/child_process.html#ch c.akka.io/docs/akka/snapshot/scala/dataflow.html) 2013-01-19 at
ild_process_child_process_fork_modulepath_args_options) the Wayback Machine
method, web workers (https://developer.mozilla.org/en-US/docs/W
eb/API/Web_Workers_API/Using_web_workers) in the browser, etc.
Citations
1. Bragg, S.D.; Driskill, C.G. (20–22 September 1994). "Diagrammatic- 4. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 (http://www.ada
graphical programming languages and DoD-STD-2167A". ic.org/standards/05rm/html/RM-TTL.html), Section 12: Generic
Proceedings of AUTOTESTCON '94 (IEEEXplore). Institute of Electrical Units (http://www.adaic.org/standards/05rm/html/RM-12.html)
and Electronics Engineers (IEEE). pp. 211–220. 5. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 (http://www.ada
doi:10.1109/AUTEST.1994.381508 (https://doi.org/10.1109%2FAUTE ic.org/standards/05rm/html/RM-TTL.html), Section 6: Subprograms
ST.1994.381508). ISBN 978-0-7803-1910-3. S2CID 62509261 (http (http://www.adaic.org/standards/05rm/html/RM-6.html)
s://api.semanticscholar.org/CorpusID:62509261).
6. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 (http://www.ada
2. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 (http://www.ada ic.org/standards/05rm/html/RM-TTL.html), 3.9 Tagged Types and
ic.org/standards/05rm/html/RM-TTL.html), Section 9: Tasks and Type Extensions (http://www.adaic.org/standards/05rm/html/RM-3
Synchronization (http://www.adaic.org/standards/05rm/html/RM- -9.html)
9.html)
7. Thread support (http://en.cppreference.com/w/cpp/thread)
3. Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 (http://www.ada
8. Atomics support (http://en.cppreference.com/w/cpp/atomic)
ic.org/standards/05rm/html/RM-TTL.html) Annex E: Distributed
Systems (http://www.adaic.org/standards/05rm/html/RM-E.html)
4 of 6 5/9/24, 21:14
Comparison of multi-paradigm programming languages - ... https://en.wikipedia.org/wiki/Comparison_of_multi-parad...
5 of 6 5/9/24, 21:14
Comparison of multi-paradigm programming languages - ... https://en.wikipedia.org/wiki/Comparison_of_multi-parad...
References
▪ Jim Coplien, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.
6 of 6 5/9/24, 21:14