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

+ List of multi-paradigm programming languages Language Other AdaAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and SynchronizationAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed SystemsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic UnitsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: SubprogramsAda Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions 5 rendezvous and monitor-like based ALF 2 AmigaE 2 APL 3 Array (multi-dimensional) BETA 3 C++ 7 (15) Thread supportAtomics supportMemory model Gecode SystemCBoost.Iostreams Boolinq OpenMPIBoost.MPI Boost.MPL template metaprogramming LC++Castor Reflect Library N3534 Boost.Spirit Array (multi-dimensional; using STL) C# 8 (15) DeciderZen using TPL Dataflow LINQ OrleansWCF only lambda support (lazy functional programming) ReflectionSource generators Guan using TPL Dataflow NetPrints RulesEngine Reactiveusing Reactive Extensions (Rx) ChucK 3 Claire 2 Clojure 5 Clojure - Concurrent ProgrammingClojure - core.async Clojure - Functional Programming Clojure - Macros Clojure - core.logic Clojure - Threading Macros Guide Multiple dispatch,Multimethods and Hierarchies AgentsAgents and Asynchronous Actions Common Lisp 7 (14) constraint programming inside CL through extensions dataflow extension by creating DSLs using the built-in metaprogramming; also see note on functional, constraint and logic paradigms, which are part of declarative MPI, etc via language extensions template metaprogramming using macros (see C++) Prolog implemented as a language extension multiple dispatch, method combinationsCommon 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 rule-based programming extension Multiple dispatch, meta-OOP system, through the Meta Object Protocol Language is extensible via metaprogramming. Curl 5 Curry 4 D (version 2.0)D Language Feature TablePhobos std.algorithm 7 D language String Mixins Delphi 3 Dylan 3 class-based E 3 ECMAScriptThe Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.Object-Oriented Programming in JavaScript gives an overview of object-oriented programming techniques in JavaScript. (ActionScript, E4X, JavaScript, JScript) 4 (5) promises, native extensionsusing Node.js' cluster module or child_process.fork method, web workers in the browser, etc. Prototype-based Reactive,using Reactive Extensions (RxJS) event drivenin Node.js via their events modulein browsers via their native EventTarget API Erlang 3 Elixir 4 Elm 6 (pure)purely functional Reactive F# 7 (8) actor programming Reactive Fortran 4 (5) purely functional parameterized classes Array (multi-dimensional)Go 4 Haskell 8 (15) Cloud Haskell (lazy) (pure)purely functional immutable Literate, reactive, dependent types (partial) Io 4 J 3 Java 6 https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK Julia 9 (17) https://github.com/davidanthoff/Query.jl Query almost anything in julia (eager) https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia Uses structs with function polymorphism and multiple dispatch Multiple dispatch,Array (multi-dimensional); optionally lazyLazy https://github.com/MikeInnes/Lazy.jl and reactive (with libraries)Kotlin 8 LabVIEW 4 Lava 2 LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) 9 Lua 3 MATLAB 6 (10) Array (multi-dimensional) Nemerle 7 Object Pascal 4 OCaml 4 Oz 11 Perl 8 (9) interpreter based threads Higher Order Perl PHPPHP Manual, Chapter 17. FunctionsPHP Manual, Chapter 19. Classes and Objects (PHP 5)PHP Manual, Anonymous functions 4 Poplog 3 Prograph 3 Python 5 (10) Structured R 4 (6) Array (multi-dimensional) Racket 10 Racket Guide: Concurrency and Synchronization The Rosette Guide FrTime: A Language for Reactive Programs Racket Guide: Distributed Places LazyLazy Racket Raku 10 Channels and other mechanisms Feed operator https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles https://docs.perl6.org/language/classtut Classes and Roles Multiple dispatch, lazy lists, reactive. ROOP 3 Ruby 5 Rust (version 1.0.0-alpha) 6 The Rust Reference §6.1.3.1 Linear, affline, and ownership types Sather 2 ScalaAn Overview of the Scala Programming LanguageScala Language Specification 9 actor programming Akka Simula 2 SISAL 3 Spreadsheets 2 Swift 7 Block-structured Tcl with Snit extension 3 Visual Basic .NET 6 (7) Reactive Windows PowerShell 6 Wolfram Language & Mathematica 13Notes for Programming Language Experts, Wolfram Language Documentation. (14) External Programs, Wolfram Language Documentation. Knowledge Based

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.