Comparison of multi-paradigm programming languages
Jump to navigation
Jump to search
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
| Language | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Template:Vert header | Other |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AdaTemplate:Wbr[2]Template:Wbr[3]Template:Wbr[4]Template:Wbr[5]Template:Wbr[6] | 5 | YesTemplate:Wbr[a 1] | — | — | — | Yes | — | — | Yes | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| ALF | 2 | — | — | — | — | — | Yes | — | — | — | Yes | — | — | — | — | — | — |
| AmigaE Script error: No such module "Unsubst". |
2 | — | — | — | — | — | — | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| APL | 3 | — | — | — | — | — | Yes | — | — | Yes | — | — | — | — | — | — | Array (multi-dimensional) |
| BETA Script error: No such module "Unsubst". |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| C++ | 7 (15) | YesTemplate:Wbr[7]Template:Wbr[8]Template:Wbr[9] | LibraryTemplate:Wbr[10] | LibraryTemplate:Wbr[11]Template:Wbr[12] | LibraryTemplate:Wbr[13]Template:Wbr[14] | LibraryTemplate:Wbr[15]Template:Wbr[16] | Yes | YesTemplate:Wbr[17] | YesTemplate:Wbr[a 3] | Yes | LibraryTemplate:Wbr[18]Template:Wbr[19] | LibraryTemplate:Wbr[20] | YesTemplate:Wbr[a 2] | LibraryTemplate:Wbr[21] | — | LibraryTemplate:Wbr[22] | Array (multi-dimensional; using STL) |
| C# | 6 (7) | Yes | — | LibraryTemplate:Wbr[a 4] | — | — | YesTemplate:Wbr[a 5] | — | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | ReactiveTemplate:Wbr[a 6] |
| ChucK Script error: No such module "Unsubst". |
3 | Yes | — | — | — | — | — | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| Claire | 2 | — | — | — | — | — | Yes | — | — | — | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| Clojure | 5 | YesTemplate:Wbr[23]Template:Wbr[24] | — | — | Yes | — | YesTemplate:Wbr[25] | YesTemplate:Wbr[26] | — | — | LibraryTemplate:Wbr[27] | — | — | YesTemplate:Wbr[28] | — | — | Multiple dispatch,Template:Wbr[29] AgentsTemplate:Wbr[30] |
| Common Lisp | 7 (14) | LibraryTemplate:Wbr[31] | LibraryTemplate:Wbr[32] | LibraryTemplate:Wbr[33] | YesTemplate:Wbr[34] | LibraryTemplate:Wbr[35] | Yes | Yes | YesTemplate:Wbr[36] | Yes | LibraryTemplate:Wbr[37] | Yes | YesTemplate:Wbr[a 7]Template:Wbr[a 2]Template:Wbr[38] | LibraryTemplate:Wbr[39] | LibraryTemplate:Wbr[40] | LibraryTemplate:Wbr[41] | Multiple dispatch, meta-OOP system,Template:Wbr[42] Language is extensible via metaprogramming. |
| Curl | 5 | — | — | — | — | — | Yes | — | YesTemplate:Wbr[a 3] | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Curry | 4 | Yes | Yes | — | — | — | Yes | — | — | — | Yes | — | — | — | — | — | — |
| D (version 2.0)Template:Wbr[43]Template:Wbr[44] | 7 | YesTemplate:Wbr[a 8] | — | — | — | — | Yes | YesTemplate:Wbr[45]Template:Wbr[a 3] | YesTemplate:Wbr[a 3] | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Delphi | 3 | — | — | — | — | — | — | — | YesTemplate:Wbr[a 3] | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| Dylan Script error: No such module "Unsubst". |
3 | — | — | — | — | — | Yes | — | — | — | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| E | 3 | Yes | — | — | — | Yes | — | — | — | — | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| ECMAScriptTemplate:Wbr[46]Template:Wbr[47] (ActionScript, E4X, JavaScript, JScript) | 4 (5) | PartialTemplate:Wbr[a 9]Template:Wbr[a 10] | — | — | LibraryTemplate:Wbr[48]Template:Wbr[49] | — | Yes | — | — | Yes | — | Yes | YesTemplate:Wbr[a 11] | LibraryTemplate:Wbr[50]Template:Wbr[51] | — | — | Reactive,Template:Wbr[a 12]Template:Wbr[52] event drivenTemplate:Wbr[a 13]Template:Wbr[a 14] |
| Erlang | 3 | Yes | — | — | Yes | Yes | Yes | — | — | — | — | — | — | Yes | — | — | — |
| Elixir | 4 | Yes | — | — | — | Yes | Yes | Yes | — | — | — | — | — | Yes | — | — | — |
| Elm | 6 | Yes | — | Yes | Yes | — | Yes (pure)Template:Wbr[a 15] | — | Yes | — | — | — | — | Yes | — | — | Reactive |
| F# | 7 (8) | YesTemplate:Wbr[a 8] | — | LibraryTemplate:Wbr[a 4] | Yes | — | Yes | — | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | ReactiveTemplate:Wbr[a 6] |
| Fortran | 4 (5) | Yes | — | — | — | — | YesTemplate:Wbr[a 15] | — | YesTemplate:Wbr[a 16] | — | — | — | YesTemplate:Wbr[a 2] | — | — | — | Array (multi-dimensional) |
| Go | 4 | Yes | — | — | — | — | — | — | — | Yes | — | Yes | — | Yes | — | — | — |
| Haskell | 8 (15) | Yes | LibraryTemplate:Wbr[53] | LibraryTemplate:Wbr[54] | Yes | LibraryTemplate:Wbr[55] | Yes (lazy) (pure)Template:Wbr[a 15] | YesTemplate:Wbr[56] | Yes | Yes | LibraryTemplate:Wbr[57] | — | PartialTemplate:Wbr[a 17] | Yes | Yes | LibraryTemplate:Wbr[58] | Literate, reactive, dependent types (partial) |
| Io | 4 | YesTemplate:Wbr[a 8] | — | — | — | — | Yes | — | — | Yes | — | — | YesTemplate:Wbr[a 11] | — | — | — | — |
| J Script error: No such module "Unsubst". |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| Java | 6 | Yes | LibraryTemplate:Wbr[59] | LibraryTemplate:Wbr[60] | — | — | Yes | — | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Julia | 9 (17) | Yes | LibraryTemplate:Wbr[61] | LibraryTemplate:Wbr[62]Template:Wbr[63] | LibraryTemplate:Wbr[64] | Yes | Yes (eager) | Yes | Yes | Yes | LibraryTemplate:Wbr[65] | Yes | PartialTemplate:Wbr[a 18] | Yes | — | LibraryTemplate:Wbr[66]Template:Wbr[67] | Multiple dispatch, Array (multi-dimensional); optionally lazyTemplate:Wbr[68] and reactive (with libraries) |
| Kotlin | 8 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | — | — | — |
| LabVIEW | 4 | Yes | — | Yes | — | — | — | — | — | — | — | — | Yes | — | Yes | — | — |
| Lava | 2 | — | — | — | — | — | — | — | — | — | — | — | YesTemplate:Wbr[a 2] | — | Yes | — | — |
| LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) | 9 | Yes | — | — | — | Yes | Yes | Yes | — | Yes | Yes | Yes | YesTemplate:Wbr[a 2] | — | — | Yes | — |
| Lua Script error: No such module "Unsubst". |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | YesTemplate:Wbr[a 11] | — | — | — | — |
| MATLAB | 6 (10) | ToolboxTemplate:Wbr[69] | ToolboxTemplate:Wbr[70] | YesTemplate:Wbr[71] | — | ToolboxTemplate:Wbr[72] | — | YesTemplate:Wbr[73] | YesTemplate:Wbr[74] | — | — | YesTemplate:Wbr[75] | YesTemplate:Wbr[76] | — | YesTemplate:Wbr[77] | — | Array (multi-dimensional) |
| Nemerle | 7 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Object Pascal | 4 | Yes | — | — | — | — | Yes | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| OCaml | 4 | — | — | — | — | — | Yes | — | Yes | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| Oz | 11 | Yes | Yes | Yes | Yes | Yes | Yes | — | — | Yes | Yes | — | YesTemplate:Wbr[a 2] | Yes | — | Yes | — |
| Perl Script error: No such module "Unsubst". |
8 (9) | YesTemplate:Wbr[78] | — | YesTemplate:Wbr[79] | — | — | Yes | Yes | — | Yes | — | YesTemplate:Wbr[a 2] | YesTemplate:Wbr[a 2] | Yes | — | — | — |
| PHPTemplate:Wbr[80]Template:Wbr[81]Template:Wbr[82] | 4 | — | — | — | — | — | Yes | — | — | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Poplog | 3 | — | — | — | — | — | Yes | — | — | Yes | Yes | — | — | — | — | — | — |
| Prograph | 3 | — | — | Yes | — | — | — | — | — | — | — | — | YesTemplate:Wbr[a 2] | — | Yes | — | — |
| Python | 5 (10) | LibraryTemplate:Wbr[83]Template:Wbr[84] | LibraryTemplate:Wbr[85] | — | — | LibraryTemplate:Wbr[86] | Yes | YesTemplate:Wbr[87]Template:Wbr[88] | YesTemplate:Wbr[89]Template:Wbr[90] | Yes | LibraryTemplate:Wbr[91] | Yes | YesTemplate:Wbr[a 2] | — | — | — | Structured |
| R | 4 (6) | LibraryTemplate:Wbr[92] | — | — | — | LibraryTemplate:Wbr[93] | Yes | — | — | Yes | — | Yes | Yes | YesTemplate:Wbr[94] | — | — | Array (multi-dimensional) |
| Racket | 10 | YesTemplate:Wbr[95] | YesTemplate:Wbr[96] | YesTemplate:Wbr[97] | — | YesTemplate:Wbr[98] | Yes | Yes | — | Yes | Yes | Yes | Yes | — | — | — | LazyTemplate:Wbr[99] |
| Raku | 10 | YesTemplate:Wbr[100] | LibraryTemplate:Wbr[101] | YesTemplate:Wbr[102] | — | LibraryTemplate:Wbr[103] | Yes | YesTemplate:Wbr[104] | YesTemplate:Wbr[105] | Yes | — | YesTemplate:Wbr[106] | YesTemplate:Wbr[107] | Yes | — | — | Multiple dispatch, lazy lists, reactive. |
| ROOP | 3 | — | — | — | — | — | — | — | — | Yes | Yes | — | — | — | — | Yes | — |
| Ruby | 5 | — | — | — | — | — | Yes | Yes | — | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Rust (version 1.0.0-alpha) | 6 | YesTemplate:Wbr[a 8] | — | — | — | — | Yes | YesTemplate:Wbr[108]Template:Wbr[109] | YesTemplate:Wbr[110] | Yes | — | — | Yes | — | — | — | Linear, affline, and ownership types |
| Sather Script error: No such module "Unsubst". |
2 | — | — | — | — | — | Yes | — | — | — | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| ScalaTemplate:Wbr[111]Template:Wbr[112] | 9 | YesTemplate:Wbr[a 8] | — | YesTemplate:Wbr[a 19] | Yes | — | Yes | Yes | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | — |
| Simula Script error: No such module "Unsubst". |
2 | — | — | — | — | — | — | — | — | Yes | — | — | YesTemplate:Wbr[a 2] | — | — | — | — |
| SISAL | 3 | Yes | — | Yes | — | — | Yes | — | — | — | — | — | — | — | — | — | — |
| Spreadsheets | 2 | — | — | — | — | — | Yes | — | — | — | — | — | — | — | Yes | — | — |
| Swift | 7 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | Block-structured |
| Tcl with Snit extension Script error: No such module "Unsubst". |
3 | — | — | — | — | — | YesTemplate:Wbr[113] | — | — | Yes | — | — | YesTemplate:Wbr[a 11]Template:Wbr[114] | — | — | — | — |
| Visual Basic .NET | 6 (7) | Yes | — | LibraryTemplate:Wbr[a 4] | — | — | Yes | — | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | — | — | — | ReactiveTemplate:Wbr[a 6] |
| Windows PowerShell | 6 | — | — | — | — | — | Yes | — | Yes | Yes | — | Yes | YesTemplate:Wbr[a 2] | Yes | — | — | — |
| Wolfram Language & Mathematica | 13Template:Wbr[115] (14) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | YesTemplate:Wbr[116] | — | Yes | Knowledge Based |
See also
- Programming paradigm
- List of programming languages by type
- Domain-specific language
- Domain-specific multimodeling
Notes
Citations
References
- Jim Coplien, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.
Template:Programming paradigms navbox Template:Types of programming languages
- ↑ Script error: No such module "citation/CS1".
- ↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
- ↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
- ↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
- ↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
- ↑ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions
- ↑ Thread support
- ↑ Atomics support
- ↑ Memory model
- ↑ Gecode
- ↑ SystemC
- ↑ Boost.Iostreams
- ↑ Boolinq
- ↑ Script error: No such module "citation/CS1".
- ↑ OpenMPI
- ↑ Boost.MPI
- ↑ Boost.MPL
- ↑ LC++
- ↑ Castor Template:Webarchive
- ↑ Reflect Library
- ↑ N3534
- ↑ Boost.Spirit
- ↑ Clojure - Concurrent Programming
- ↑ Clojure - core.async
- ↑ Clojure - Functional Programming
- ↑ Clojure - Macros
- ↑ Clojure - core.logic
- ↑ Clojure - Threading Macros Guide
- ↑ Multimethods and Hierarchies
- ↑ Agents and Asynchronous Actions
- ↑ Script error: No such module "citation/CS1".
- ↑ [1] constraint programming inside CL through extensions
- ↑ [2] dataflow extension
- ↑ [3] by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative
- ↑ [4] MPI, etc via language extensions
- ↑ template metaprogramming using macros (see C++)
- ↑ [5] [6] [7] Prolog implemented as a language extension
- ↑ Common Lisp Object System see Wikipedia article on CLOS, the Common Lisp Object System.
- ↑ implemented by the user via a short macro, example of implementation
- ↑ - Visual programming tool based on Common Lisp
- ↑ [8] rule-based programming extension
- ↑ [9] Template:Webarchive through the Meta Object Protocol
- ↑ D Language Feature Table
- ↑ Phobos std.algorithm
- ↑ D language String Mixins
- ↑ The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
- ↑ Object-Oriented Programming in JavaScript Template:Webarchive gives an overview of object-oriented programming techniques in JavaScript.
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Cloud Haskell
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
- ↑ https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ https://github.com/davidanthoff/Query.jl Query almost anything in julia
- ↑ https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Lazy https://github.com/MikeInnes/Lazy.jl
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ interpreter based threads
- ↑ Higher Order Perl
- ↑ PHP Manual, Chapter 17. Functions
- ↑ PHP Manual, Chapter 19. Classes and Objects (PHP 5)
- ↑ PHP Manual, Anonymous functions
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Racket Guide: Concurrency and Synchronization
- ↑ The Rosette Guide
- ↑ FrTime: A Language for Reactive Programs
- ↑ Racket Guide: Distributed Places
- ↑ Lazy Racket
- ↑ Channels and other mechanisms
- ↑ Script error: No such module "citation/CS1".
- ↑ Feed operator
- ↑ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
- ↑ Script error: No such module "citation/CS1".
- ↑ https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
- ↑ Script error: No such module "citation/CS1".
- ↑ https://docs.perl6.org/language/classtut Classes and Roles
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ The Rust Reference §6.1.3.1
- ↑ An Overview of the Scala Programming Language
- ↑ Scala Language Specification
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Notes for Programming Language Experts, Wolfram Language Documentation.
- ↑ External Programs, Wolfram Language Documentation.
Cite error: <ref> tags exist for a group named "a", but no corresponding <references group="a"/> tag was found