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

Language overview

{|class="wikitable sortable sticky-header" style="font-size:75%;"

|+ List of multi-paradigm programming languages

|- style="font-size: 133%;"

! Language

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

! Other

|-

| style="font-size: 133%;" | Ada || 5

| || || || || || || || || || || || || || || || || || || || || || || || || || Array (multi-dimensional; using STL)

|-

| style="font-size: 133%;" | C# || 8 (15)

| || || || || || || || || || || || || || || Reactive

|-

| style="font-size: 133%;" | ChucK<br/> || 3

| || || || || || || || || || || || || || || || || || || || || || || || || || || Multiple dispatch, Agents

|-

| style="font-size: 133%;" | Common Lisp || 7 (14)

| || || || || || || || || || || || || || || || Multiple dispatch, meta-OOP system, Language is extensible via metaprogramming.

|-

| style="font-size: 133%;" | Curl || 5

| || || || || || || || || 7

| || || || ||

|-

| style="font-size: 133%;" | E || 3

| || || || || || || || || || || || (ActionScript, E4X, JavaScript, JScript) || 4 (5)

| || || || || || || || || || || || || || || || Reactive, event driven

|-

| style="font-size: 133%;" | Erlang || 3

| || || || || || || || || || || || || || || ||

|-

| style="font-size: 133%;" | Elixir || 4

| || || || || || || || || || || || || || || ||

|-

| style="font-size: 133%;" | Elm || 6

| || || || || || (pure) || || || || || || || || || || Reactive

|-

| style="font-size: 133%;" | F# || 7 (8)

| || || || || || || || || || || || || (lazy) (pure) || || || || || || || || || || Literate, reactive, dependent types (partial)

|- |

| style="font-size: 133%;" | Io || 4

| || || || || || || || || || || || || || || (eager) || || || || || || || || || || Multiple dispatch,<br/>Array (multi-dimensional); optionally lazy and reactive (with libraries)

|-

| style="font-size: 133%;" |Kotlin || 8

| || || || || || || || || || || || || || || ||

|- |

| style="font-size: 133%;" | LabVIEW || 4

| || || || || || || || || || || || || || || ||

|-

| style="font-size: 133%;" | Lava || 2

| || || || || || || || || || || || || || || || || || || || || || || || || || || Array (multi-dimensional)

|-

| style="font-size: 133%;" | Nemerle || 7

| || || || || || || || || || || || || || || || || || || || || || || 4

| || || || || || || || || || || ||

|

|

|

|

|

|

| || || || || || || || || || || || || || || || || || || || Array (multi-dimensional)

|-

| style="font-size: 133%;" | Racket || 10

| || || || || || || || || || || || || || || || Lazy

|-

| style="font-size: 133%;" | Raku || 10

| || || || || || || || || || || || || || || || Multiple dispatch, lazy lists, reactive.

|-

| style="font-size: 133%;" | ROOP || 3

| || || || || || || || || || || || || || || ||

|-

| style="font-size: 133%;" | Ruby || 5

| || || || || || || || || || || || || || || || || || || || || Linear, affline, and ownership types

|-

| style="font-size: 133%;" | Sather<br/> || 2

| || || || || || || || || || || || || 9

| || || || || || || || || || || || || || || || || || || || || ||

|-

| style="font-size: 133%;" | Visual Basic .NET || 6 (7)

| || || (14)

| || || || || || || || || || || || || || || || Knowledge Based

|}

<!-- Row Template:

|-

| lang || count || concurrent || constrain || dataf || decl || dist || func || meta || generic || imp || logic || reflect || OO || pipeline || visual || rules || other

-->

See also

  • Carbon (programming language) — multi-paradigm language being developed at Google to be a successor to C++
  • 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.