Comparison of multi-paradigm programming languages
s 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, or futures
- * Actor programming – concurrent computation with actors that make local decisions in response to the environment
- Constraint programming – relations between variables are expressed as constraints, directing allowable solutions
- Dataflow programming – forced recalculation of formulas when data values change
- Declarative programming – describes what computation should perform, without specifying detailed state changes cf. imperative 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 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 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 ; also termed ''diagrammatic programming''
Language overview
| Language | Other | ||||||||||||||||
| Ada | 5 | ||||||||||||||||
| ALF | 2 | ||||||||||||||||
| AmigaE | 2 | ||||||||||||||||
| APL | 3 | Array | |||||||||||||||
| BETA | 3 | ||||||||||||||||
| C++ | 7 | Array | |||||||||||||||
| C# | 6 | Reactive | |||||||||||||||
| ChucK | 3 | ||||||||||||||||
| Claire | 2 | ||||||||||||||||
| Clojure | 5 | Multiple dispatch, Agents | |||||||||||||||
| Common Lisp | 7 | Multiple dispatch, meta-OOP system, Language is extensible via metaprogramming. | |||||||||||||||
| Curl | 5 | ||||||||||||||||
| Curry | 4 | ||||||||||||||||
| D | 7 | ||||||||||||||||
| Delphi | 3 | ||||||||||||||||
| Dylan | 3 | ||||||||||||||||
| E | 3 | ||||||||||||||||
| ECMAScript | 4 | Reactive, event driven | |||||||||||||||
| Erlang | 3 | ||||||||||||||||
| Elixir | 4 | ||||||||||||||||
| Elm | 6 | Reactive | |||||||||||||||
| F# | 7 | Reactive | |||||||||||||||
| Fortran | 4 | Array | |||||||||||||||
| Go | 4 | ||||||||||||||||
| Haskell | 8 | Literate, reactive, dependent types | |||||||||||||||
| Io | 4 | ||||||||||||||||
| J | 3 | ||||||||||||||||
| Java | 6 | ||||||||||||||||
| Julia | 9 | Multiple dispatch, Array ; optionally lazy and reactive | |||||||||||||||
| Kotlin | 8 | ||||||||||||||||
| LabVIEW | 4 | ||||||||||||||||
| Lava | 2 | ||||||||||||||||
| LispWorks | 9 | ||||||||||||||||
| Lua | 3 | ||||||||||||||||
| MATLAB | 6 | Array | |||||||||||||||
| Nemerle | 7 | ||||||||||||||||
| Object Pascal | 4 | ||||||||||||||||
| OCaml | 4 | ||||||||||||||||
| Oz | 11 | ||||||||||||||||
| Perl | 8 | ||||||||||||||||
| PHP | 4 | ||||||||||||||||
| Poplog | 3 | ||||||||||||||||
| Prograph | 3 | ||||||||||||||||
| Python | 5 | Structured | |||||||||||||||
| R | 4 | Array | |||||||||||||||
| Racket | 10 | Lazy | |||||||||||||||
| Raku | 10 | Multiple dispatch, lazy lists, reactive. | |||||||||||||||
| ROOP | 3 | ||||||||||||||||
| Ruby | 5 | ||||||||||||||||
| Rust | 6 | Linear, affline, and ownership types | |||||||||||||||
| Sather | 2 | ||||||||||||||||
| Scala | 9 | ||||||||||||||||
| Simula | 2 | ||||||||||||||||
| SISAL | 3 | ||||||||||||||||
| Spreadsheets | 2 | ||||||||||||||||
| Swift | 7 | Block-structured | |||||||||||||||
| Tcl with Snit extension | 3 | ||||||||||||||||
| Visual Basic.NET | 6 | Reactive | |||||||||||||||
| Windows PowerShell | 6 | ||||||||||||||||
| Wolfram Language & Mathematica | 13 | Knowledge Based |