List of multi-paradigm programming languages

From Wikipedia, the free encyclopedia
Jump to: navigation, search

Programming languages can be grouped by the number and types of paradigms supported.

Paradigm summaries[edit]

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 behavior)
  • 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 actions (e.g. HTML describes a page but not how to actually display it)
  • 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 templates are used by a compiler 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[edit]

List of multi-paradigm programming languages
Lan­guage Num­ber of Para­digms Con­cur­rent Con­straints Data­flow De­clar­at­ive Dis­trib­uted Func­tion­al Meta­pro­gram­ming Gen­er­ic Im­per­at­ive Lo­gic Re­flec­tion Ob­ject-ori­ented Pipe­lines Visu­al Rule-based Oth­er para­digms
LabVIEW 2 No No Yes No No No No No No No No No No Yes No No
APL 2 No No No No No Yes No No Yes No No No No No No No
ALF 2 No No No No No Yes No No No Yes No No No No No No
Dylan[citation needed] 2 No No No No No Yes No No No No No Yes[a 1] No No No No
Sather[citation needed] 2 No No No No No Yes No No No No No Yes[a 1] No No No No
Claire 2 No No No No No Yes No No No No No Yes[a 1] No No No No
Spreadsheets 2 No No No No No Yes No No No No No No No Yes No No
AmigaE[citation needed] 2 No No No No No No No No Yes No No Yes[a 1] No No No No
Simula[citation needed] 2 No No No No No No No No Yes No No Yes[a 1] No No No No
Metaobject protocols 2 No No No No No No No No No No No Yes[a 1][a 2] No No No No
Lava 2 No No No No No No No No No No No Yes[a 1] No Yes No No
PointDragon 3 No No No No No No No No Yes No No Yes No Yes No No
SISAL 3 Yes No Yes No No Yes No No No No No No No No No No
Erlang 3 Yes No No No Yes Yes No No No No No No No No No No
ChucK[citation needed] 3 Yes No No No No No No No Yes No No Yes[a 1] No No No No
Prograph 3 No No Yes No No No No No No No No Yes[a 1] No Yes No No
Poplog 3 No No No No No Yes No No Yes Yes No No No No No No
BETA[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 1] No No No No
J[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 1] No No No No
Perl[citation needed] 3 Yes[2] Library[3] Yes[4] No No Yes Yes No Yes No Yes[a 1] Yes[a 1] Yes No No No
Pliant[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 1] No No No No
Tcl with itcl or XOTcl extensions[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 1] No No No No
PHP[5][6][7] 4 No No No No No Yes No No Yes No Yes Yes[a 1] No No No No
ECMAScript[8][9] (ActionScript, E4X, JavaScript, JScript) 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
Lua[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
Tcl with Snit extension[citation needed] 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
C++ 6 (14) Yes[10][11][12] Library[13] Library[14][15] Library[16][17] Library[18][19] Yes Yes[20] Yes[a 3] Yes Library[21][22] Library[23] Yes[a 1] C++14[24] No Library[25] No
D (version 1.0) 3 No No No No No No No Yes[a 3] Yes No No Yes[a 1] No No No No
D (version 2.0) 7 Yes Partial No No No Yes Yes Yes[a 3] Yes No No Yes[a 1] No No No No
Embarcadero Delphi 3 No No No No No No No Yes[a 3] Yes No No Yes[a 1] No No No No
E 3 Yes No No No Yes No No No No No No Yes[a 1] No No No No
Curry 4 Yes Yes No No No Yes No No No Yes No No No No No No
Java 6 Yes No No No No Yes No Yes Yes No Yes Yes[a 1] No No No No
MATLAB 9 Yes[26] Yes[27] Yes[28] No Yes[29] No Yes[30] Yes[31] No No Yes[32] Yes[33] No Yes[34] No No
Python[citation needed] 4 No No No No No No Yes No Yes No Yes Yes[a 1] No No No procedural
Ruby 4 No No No No No Yes No No Yes No Yes Yes[a 1] No No No No
OCaml 4 No No No No No Yes No Yes Yes No No Yes[a 1] No No No No
Leda 4 No No No No No Yes No No Yes Yes No Yes[a 1] No No No No
ROOP 4 No No No No No No No No Yes Yes No No No No Yes No
Io 4 Yes[a 4] No No No No Yes No No Yes No No Yes[a 2] No No No No
REBOL 4 No No No No No Yes No No Yes No No Yes[a 2] No No No No
Fortran 5 Yes No No No No Yes[a 5] No Yes[a 6] No No No Yes[a 1] No No No No
Ada[35][36][37][38][39] 5 Yes[a 7] No No No Yes No No Yes Yes No No Yes[a 1] No No No No
Windows PowerShell 5 No No No No No Yes No Yes Yes No Yes Yes[a 1] Yes No No No
Curl 5 No No No No No Yes No Yes[a 3] Yes No Yes Yes[a 1] No No No No
Common Lisp (some other paradigms are implemented as libraries)[citation needed] 5 No No No No No Yes Yes No Yes No Yes Yes[a 1] No No No No
Falcon 5 No No No No No Yes Yes No No No Yes Yes[a 1] No No No No
D (version 2.0)[40][41] 5 Yes[a 4] No No No No Yes No Yes[a 3] Yes No No Yes[a 1] No No No No
Object Pascal 5 Yes No No No No Yes No No Yes No No Yes[a 1] No No No No
Scala[42][43] 7 Yes[a 4] No Yes [a 8] Yes No Yes Yes Yes Yes No Yes Yes[a 1] No No No No
Nemerle 7 Yes No No No No Yes Yes Yes Yes No Yes Yes[a 1] No No No No
C# 7 Yes No Library[a 9] No No Yes[a 10] No Yes Yes No Yes Yes[a 1] No No No reactive[a 11]
Visual Basic .NET 7 Yes No Library[a 9] No No Yes[a 10] No Yes Yes No Yes Yes[a 1] No No No reactive[a 11]
F# 8 Yes[a 4] No Library[a 9] Yes No Yes No Yes Yes No Yes Yes[a 1] No No No reactive[a 11]
Oz 9 Yes Yes Yes No Yes Yes No No Yes Yes No Yes[a 1] No No Yes No
LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) 9 Yes No No No Yes Yes Yes No Yes Yes Yes Yes[a 1] No No Yes No
Mathematica 11 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes No Yes No No Yes No
  1. ^ a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao Class-based
  2. ^ a b c d e f Prototype-based
  3. ^ a b c d e f Template metaprogramming
  4. ^ a b c d actor programming
  5. ^ purely functional
  6. ^ parameterized classes
  7. ^ rendezvous and monitor-like based
  8. ^ Akka
  9. ^ a b c using TPL Dataflow
  10. ^ a b only lambda support (lazy functional programming)
  11. ^ a b c using Reactive Extensions (Rx)


See also[edit]

References[edit]

  1. ^ Driskill, C.G. (20–22 September 1994). "Diagrammatic-graphical programming languages and DoD-STD-2167A". IEEEXplore. IEEE. 
  2. ^ interpreter based threads
  3. ^ Moose
  4. ^ Higher Order Perl
  5. ^ PHP Manual, Chapter 17. Functions
  6. ^ PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  7. ^ PHP Manual, Anonymous functions
  8. ^ The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  9. ^ Object Oriented Programming in JavaScript gives an overview of object-oriented programming techniques in JavaScript.
  10. ^ Thread support
  11. ^ Atomics support
  12. ^ Memory model
  13. ^ Gecode
  14. ^ SystemC
  15. ^ Boost.Iostreams
  16. ^ Boolinq
  17. ^ AraRat
  18. ^ OpenMPI
  19. ^ Boost.MPI
  20. ^ Boost.MPL
  21. ^ LC++
  22. ^ Castor
  23. ^ Reflect Library
  24. ^ N3534
  25. ^ Boost.Spirit
  26. ^ Execute loop iterations in parallel with parfor
  27. ^ Write constraints with Optimization Toolbox
  28. ^ SimEvents
  29. ^ Execute loop iterations in parallel with parfor
  30. ^ Execute MATLAB expression in text string with eval
  31. ^ Determine class of object
  32. ^ Getting information about classes and objects
  33. ^ Object-oriented programming with MATLAB
  34. ^ Simulink
  35. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
  36. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
  37. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
  38. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
  39. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions
  40. ^ D Language Feature Table
  41. ^ Phobos std.algorithm
  42. ^ An Overview of the Scala Programming Language
  43. ^ Scala Language Specification
  • Multiparadigm Design for C++, by Jim Coplien, 1998.