Jump to content

Comparison of multi-paradigm programming languages

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Anonym~dewiki (talk | contribs) at 08:13, 29 October 2016 (Language overview: Since refs were deleted for Python, I remove the tag {{Citation needed|date=May 2012}}). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

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 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

List of multi-paradigm programming languages
Language 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
Ada[2][3][4][5][6] 5 Yes[a 1] No No No Yes No No Yes Yes No No Yes[a 2] No No No No
ALF 2 No No No No No Yes No No No Yes No No No No No No
AmigaE[citation needed] 2 No No No No No No No No Yes No No Yes[a 2] No No No No
APL 2 No No No No No Yes No No Yes No No No No No No No
BETA [citation needed] 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
C++ 7 (14) Yes[7][8][9] Library[10] Library[11][12] Library[13][14] Library[15][16] Yes Yes[17] Yes[a 3] Yes Library[18][19] Library[20] Yes[a 2] Yes[21] No Library[22] No
C# 6 (7) Yes No Library[a 4] No No Yes[a 5] No Yes Yes No Yes Yes[a 2] No No No reactive[a 6]
ChucK [citation needed] 3 Yes No No No No No No No Yes No No Yes[a 2] No No No No
Claire 2 No No No No No Yes No No No No No Yes[a 2] 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 2] No No No No
Curl 5 No No No No No Yes No Yes[a 3] Yes No Yes Yes[a 2] No No No No
Curry 4 Yes Yes No No No Yes No No No Yes No No No No No No
D (version 2.0)[23][24] 6 Yes[a 7] No No No No Yes Yes[25][a 3] Yes[a 3] Yes No No Yes[a 2] No No No No
Dylan[citation needed] 3 No No No No No Yes No No No No Yes Yes[a 2] No No No No
E 3 Yes No No No Yes No No No No No No Yes[a 2] No No No No
ECMAScript[26][27] (ActionScript, E4X, JavaScript, JScript) 4 (5) partial (promises, native extensions)[a 8] No No No No Yes No No Yes No Yes Yes[a 9] No No No reactive[a 10]
Embarcadero Delphi 3 No No No No No No No Yes[a 3] Yes No No Yes[a 2] No No No No
Erlang 3 Yes No No No Yes Yes No No No No No No No No No No
Elixir 4 Yes No No No Yes Yes Yes No No No No No No No No No
Elm 6 Yes No Yes Yes No Yes No Yes No No No No Yes No No reactive
F# 7 (8) Yes[a 7] No Library[a 4] Yes No Yes No Yes Yes No Yes Yes[a 2] No No No reactive[a 6]
Falcon 4 No No No No No Yes Yes No No No Yes Yes[a 2] No No No No
Fortran 4 Yes No No No No Yes[a 11] No Yes[a 12] No No No Yes[a 2] No No No No
Io 4 Yes[a 7] No No No No Yes No No Yes No No Yes[a 9] No No No No
J [citation needed] 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
Java 6 Yes No No No No Yes No Yes Yes No Yes Yes[a 2] No No No No
Julia 9 (10) Yes Library[28] No No Yes Yes Yes Yes Yes No Yes Yes "multiple dispatch" Yes No No Multiple dispatch
and Array
LabVIEW 4 Yes No Yes No No No No No No No No Yes No Yes No No
Lava 2 No No No No No No No No No No No Yes[a 2] No Yes No No
Leda 4 No No No No No Yes No No Yes Yes No Yes[a 2] No No No 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 2] No No Yes No
Lua [citation needed] 3 No No No No No Yes No No Yes No No Yes[a 9] No No No No
MATLAB 6 (9) Toolbox[29] Toolbox[30] Yes[31] No Toolbox[32] No Yes[33] Yes[34] No No Yes[35] Yes[36] No Yes[37] No Array
Nemerle 7 Yes No No No No Yes Yes Yes Yes No Yes Yes[a 2] No No No No
Object Pascal 4 Yes No No No No Yes No No Yes No No Yes[a 2] No No No No
OCaml 4 No No No No No Yes No Yes Yes No No Yes[a 2] No No No No
Oz 9 Yes Yes Yes No Yes Yes No No Yes Yes No Yes[a 2] No No Yes No
Perl [citation needed] 8 (9) Yes[38] Library[39] Yes[40] No No Yes Yes No Yes No Yes[a 2] Yes[a 2] Yes No No No
PHP[41][42][43] 4 No No No No No Yes No No Yes No Yes Yes[a 2] No No No No
Picat[44] 8 No Yes No Yes No Yes No Yes Yes Yes No No Yes No Yes Yes
Pliant [citation needed] 3 No No No No No Yes No No Yes No No Yes[a 2] No No No No
PointDragon 3 No No No No No No No No Yes No No Yes No Yes No No
Poplog 3 No No No No No Yes No No Yes Yes No No No No No No
Prograph 3 No No Yes No No No No No No No No Yes[a 2] No Yes No No
Python 5 (10) Library[45][46] Library[47] No No Library[48] Partial Yes[49][50] Yes[51][52] Yes Library[53] Yes Yes[a 2] No No No structured
R 4 No No No No No Yes No No Yes No Yes Yes No No No Array
Racket 6 No No No No No Yes Yes No Yes Yes Yes Yes No No No No
ROOP 3 No No No No No No No No Yes Yes No No No No Yes No
Ruby 4 No No No No No Yes No No Yes No Yes Yes[a 2] No No No No
Rust (version 1.0.0-alpha) 6 Yes[a 7] No No No No Yes Yes[54][55] Yes[56] Yes No No Yes No No No linear, affline, and ownership types
Sather[citation needed] 2 No No No No No Yes No No No No No Yes[a 2] No No No No
Scala[57][58] 9 Yes[a 7] No Yes [a 13] Yes No Yes Yes Yes Yes No Yes Yes[a 2] No No No No
Simula[citation needed] 2 No No No No No No No No Yes No No Yes[a 2] No No No No
SISAL 3 Yes No Yes No No Yes No No No No No No No No No No
Spreadsheets 2 No No No No No Yes No No No No No No No Yes No No
Swift 3 No No No No No Yes No No Yes No No Yes[a 2] No No No block-structured
Tcl with Snit extension [citation needed] 3 No No No No No Yes[59] No No Yes No No Yes[a 9][60] No No No No
Visual Basic .NET 6 (7) Yes No Library[a 4] No No Yes No Yes Yes No Yes Yes[a 2] No No No reactive[a 6]
Windows PowerShell 6 No No No No No Yes No Yes Yes No Yes Yes[a 2] Yes No No No
Wolfram Language & Mathematica 13[61] Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes No No Yes Knowledge Based

See also

Notes

  1. ^ rendezvous and monitor-like based
  2. ^ 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 Class-based
  3. ^ a b c d e Template metaprogramming
  4. ^ a b c using TPL Dataflow
  5. ^ only lambda support (lazy functional programming)
  6. ^ a b c using Reactive Extensions (Rx)
  7. ^ a b c d e actor programming
  8. ^ using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
  9. ^ a b c d Prototype-based
  10. ^ using Reactive Extensions (RxJS)
  11. ^ purely functional
  12. ^ parameterized classes
  13. ^ Akka

References

  1. ^ Bragg, S.D.; Driskill, C.G. (20–22 September 1994). "Diagrammatic-graphical programming languages and DoD-STD-2167A". IEEEXplore. IEEE.
  2. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 9: Tasks and Synchronization
  3. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3 Annex E: Distributed Systems
  4. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 12: Generic Units
  5. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Section 6: Subprograms
  6. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, 3.9 Tagged Types and Type Extensions
  7. ^ Thread support
  8. ^ Atomics support
  9. ^ Memory model
  10. ^ Gecode
  11. ^ SystemC
  12. ^ Boost.Iostreams
  13. ^ Boolinq
  14. ^ AraRat
  15. ^ OpenMPI
  16. ^ Boost.MPI
  17. ^ Boost.MPL
  18. ^ LC++
  19. ^ Castor
  20. ^ Reflect Library
  21. ^ N3534
  22. ^ Boost.Spirit
  23. ^ D Language Feature Table
  24. ^ Phobos std.algorithm
  25. ^ D language String Mixins
  26. ^ The Little JavaScripter demonstrates fundamental commonality with Scheme, a functional language.
  27. ^ Object Oriented Programming in JavaScript gives an overview of object-oriented programming techniques in JavaScript.
  28. ^ https://jump.readthedocs.io/en/latest/
  29. ^ "Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
  30. ^ "Write Constraints". mathworks.com. Retrieved 21 October 2016.
  31. ^ "Getting Started with SimEvents". mathworks.com. Retrieved 21 October 2016.
  32. ^ "Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
  33. ^ "Execute MATLAB expression in text - MATLAB eval". mathworks.com. Retrieved 21 October 2016.
  34. ^ "Determine class of object". mathworks.com. Retrieved 21 October 2016.
  35. ^ "Class Metadata". mathworks.com. Retrieved 21 October 2016.
  36. ^ "Object-Oriented Programming". mathworks.com. Retrieved 21 October 2016.
  37. ^ "Simulink". mathworks.com. Retrieved 21 October 2016.
  38. ^ interpreter based threads
  39. ^ Moose
  40. ^ Higher Order Perl
  41. ^ PHP Manual, Chapter 17. Functions
  42. ^ PHP Manual, Chapter 19. Classes and Objects (PHP 5)
  43. ^ PHP Manual, Anonymous functions
  44. ^ [1]
  45. ^ "Parallel Processing and Multiprocessing in Python". wiki.python.org. Retrieved 21 October 2016.
  46. ^ "threading — Higher-level threading interface". docs.python.org. Retrieved 21 October 2016.
  47. ^ "python-constraint". pypi.python.org. Retrieved 21 October 2016.
  48. ^ "DistributedProgramming". wiki.python.org. Retrieved 21 October 2016.
  49. ^ "Chapter 9. Metaprogramming". chimera.labs.oreilly.com. Retrieved 22 October 2016.
  50. ^ "Metaprogramming". readthedocs.io. Retrieved 22 October 2016.
  51. ^ "PEP 443 -- Single-dispatch generic functions". python.org. Retrieved 22 October 2016.
  52. ^ "PEP 484 -- Type Hints". python.org. Retrieved 22 October 2016.
  53. ^ "PyDatalog". Retrieved 22 October 2016.
  54. ^ "The Rust macros guide". Rust. Retrieved 19 January 2015.
  55. ^ "The Rust compiler plugins guide". Rust. Retrieved 19 January 2015.
  56. ^ The Rust Reference §6.1.3.1
  57. ^ An Overview of the Scala Programming Language
  58. ^ Scala Language Specification
  59. ^ "Tcl Programming/Introduction". en.wikibooks.org. Retrieved 22 October 2016.
  60. ^ "TCLLIB - Tcl Standard Library: snitfaq:". sourceforge.net. Retrieved 22 October 2016.
  61. ^ Notes for Programming Language Experts, Wolfram Language Documentation.
  • Multiparadigm Design for C++, by Jim Coplien, 1998.
  • Constraint Solving and Planning with Picat, Book by Neng-Fa Zhou, Håkan Kjellerstrand, and Jonathan Fruhman: Constraint Solving and Planning with Picat, Springer Verlag. ISBN 9783319258812 (paper)