Comparison of multi-paradigm programming languages
Appearance
From Wikipedia, the free encyclopedia
(Redirected from Multi-paradigm programming language)
This article possibly contains original research . Please improve it by verifying the claims made and adding inline citations. Statements consisting only of original research should be removed. (August 2009) (Learn how and when to remove this message)
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 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 c.f. 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
[edit ]Language | Paradigm count
|
Concurrent
|
Constraints
|
Dataflow
|
Declarative
|
Distributed
|
Functional
|
Metaprogramming
|
Generic
|
Imperative
|
Logic
|
Reflection
|
Object-oriented
|
Pipelines
|
Visual
|
Rule-based
|
Other |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ada |
5 | Yes |
— | — | — | Yes | — | — | Yes | Yes | — | — | Yes |
— | — | — | — |
ALF | 2 | — | — | — | — | — | Yes | — | — | — | Yes | — | — | — | — | — | — |
AmigaE [citation needed ] |
2 | — | — | — | — | — | — | — | — | Yes | — | — | Yes |
— | — | — | — |
APL | 3 | — | — | — | — | — | Yes | — | — | Yes | — | — | — | — | — | — | Array (multi-dimensional) |
BETA [citation needed ] |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | Yes |
— | — | — | — |
C++ | 7 (15) | Yes |
Library |
Library |
Library |
Library |
Yes | Yes |
Yes |
Yes | Library |
Library |
Yes |
Yes |
— | Library |
Array (multi-dimensional; using STL) |
C# | 6 (7) | Yes | — | Library |
— | — | Yes |
— | Yes | Yes | — | Yes | Yes |
— | — | — | Reactive |
ChucK [citation needed ] |
3 | Yes | — | — | — | — | — | — | — | Yes | — | — | Yes |
— | — | — | — |
Claire | 2 | — | — | — | — | — | Yes | — | — | — | — | — | Yes |
— | — | — | — |
Clojure | 5 | Yes |
— | — | Yes | — | Yes |
Yes |
— | — | Library |
— | — | Yes |
Editor |
— | Multiple dispatch, |
Common Lisp | 7 (14) | Library |
Library |
Library |
Yes |
Library |
Yes | Yes | Yes |
Yes | Library |
Yes | Yes |
Library |
Library |
Library |
Multiple dispatch, meta-OOP system, |
Curl | 5 | — | — | — | — | — | Yes | — | Yes |
Yes | — | Yes | Yes |
— | — | — | — |
Curry | 4 | Yes | Yes | — | — | — | Yes | — | — | — | Yes | — | — | — | — | — | — |
D (version 2.0) |
7 | Yes |
— | — | — | — | Yes | Yes |
Yes |
Yes | — | Yes | Yes |
— | — | — | — |
Delphi | 3 | — | — | — | — | — | — | — | Yes |
Yes | — | — | Yes |
— | — | — | — |
Dylan [citation needed ] |
3 | — | — | — | — | — | Yes | — | — | — | — | Yes | Yes |
— | — | — | — |
E | 3 | Yes | — | — | — | Yes | — | — | — | — | — | — | Yes |
— | — | — | — |
ECMAScript |
4 (5) | Partial |
— | — | Library |
— | Yes | — | — | Yes | — | Yes | Yes |
Library |
Editor |
— | Reactive, |
Erlang | 3 | Yes | — | — | Yes | Yes | Yes | — | — | — | — | — | — | Yes | — | — | — |
Elixir | 4 | Yes | — | — | — | Yes | Yes | Yes | — | — | — | — | — | Yes | — | — | — |
Elm | 6 | Yes | — | Yes | Yes | — | Yes (pure) |
— | Yes | — | — | — | — | Yes | — | — | Reactive |
F# | 7 (8) | Yes |
— | Library |
Yes | — | Yes | — | Yes | Yes | — | Yes | Yes |
— | — | — | Reactive |
Fortran | 4 (5) | Yes | — | — | — | — | Yes |
— | Yes |
— | — | — | Yes |
— | — | — | Array (multi-dimensional) |
Go | 4 | Yes | — | — | — | — | — | — | — | Yes | — | Yes | — | Yes | — | — | — |
Haskell | 8 (15) | Yes | Library |
Library |
Yes | Library |
Yes (lazy) (pure) |
Yes |
Yes | Yes | Library |
— | Partial |
Yes | Yes | Library |
Literate, reactive, dependent types (partial) |
Io | 4 | Yes |
— | — | — | — | Yes | — | — | Yes | — | — | Yes |
— | — | — | — |
J [citation needed ] |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | Yes |
— | — | — | — |
Java | 6 | Yes | Library |
Library |
— | — | Yes | — | Yes | Yes | — | Yes | Yes |
— | — | — | — |
Julia | 9 (17) | Yes | Library |
Library |
Library |
Yes | Yes (eager) | Yes | Yes | Yes | Library |
Yes | Partial |
Yes | — | Library |
Multiple dispatch, Array (multi-dimensional); optionally lazy |
Kotlin | 8 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | Yes | Yes | — | — | — |
LabVIEW | 4 | Yes | — | Yes | — | — | — | — | — | — | — | — | Yes | — | Yes | — | — |
Lava | 2 | — | — | — | — | — | — | — | — | — | — | — | Yes |
— | Yes | — | — |
LispWorks (version 6.0 with support for symmetric multi-processing, rules, logic (Prolog), CORBA) | 9 | Yes | — | — | — | Yes | Yes | Yes | — | Yes | Yes | Yes | Yes |
— | — | Yes | — |
Lua [citation needed ] |
3 | — | — | — | — | — | Yes | — | — | Yes | — | — | Yes |
— | — | — | — |
MATLAB | 6 (10) | Toolbox |
Toolbox |
Yes |
— | Toolbox |
— | Yes |
Yes |
— | — | Yes |
Yes |
— | Yes |
— | Array (multi-dimensional) |
Nemerle | 7 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | Yes |
— | — | — | — |
Object Pascal | 4 | Yes | — | — | — | — | Yes | — | — | Yes | — | — | Yes |
— | — | — | — |
OCaml | 4 | — | — | — | — | — | Yes | — | Yes | Yes | — | — | Yes |
— | — | — | — |
Oz | 11 | Yes | Yes | Yes | Yes | Yes | Yes | — | — | Yes | Yes | — | Yes |
Yes | — | Yes | — |
Perl [citation needed ] |
8 (9) | Yes |
— | Yes |
— | — | Yes | Yes | — | Yes | — | Yes |
Yes |
Yes | — | — | — |
PHP |
4 | — | — | — | — | — | Yes | — | — | Yes | — | Yes | Yes |
— | — | — | — |
Poplog | 3 | — | — | — | — | — | Yes | — | — | Yes | Yes | — | — | — | — | — | — |
Prograph | 3 | — | — | Yes | — | — | — | — | — | — | — | — | Yes |
— | Yes | — | — |
Python | 5 (10) | Library |
Library |
— | — | Library |
Yes | Yes |
Yes |
Yes | Library |
Yes | Yes |
— | Editor |
— | Structured |
R | 4 (6) | Library |
— | — | — | Library |
Yes | — | — | Yes | — | Yes | Yes | Yes |
— | — | Array (multi-dimensional) |
Racket | 10 | Yes |
Yes |
Yes |
— | Yes |
Yes | Yes | — | Yes | Yes | Yes | Yes | — | — | — | Lazy |
Raku | 10 | Yes |
Library |
Yes |
— | Library |
Yes | Yes |
Yes |
Yes | — | Yes |
Yes |
Yes | — | — | Multiple dispatch, lazy lists, reactive. |
ROOP | 3 | — | — | — | — | — | — | — | — | Yes | Yes | — | — | — | — | Yes | — |
Ruby | 5 | — | — | — | — | — | Yes | Yes | — | Yes | — | Yes | Yes |
— | — | — | — |
Rust (version 1.0.0-alpha) | 6 | Yes |
— | — | — | — | Yes | Yes |
Yes |
Yes | — | — | Yes | — | — | — | Linear, affline, and ownership types |
Sather [citation needed ] |
2 | — | — | — | — | — | Yes | — | — | — | — | — | Yes |
— | — | — | — |
Scala |
9 | Yes |
— | Yes |
Yes | — | Yes | Yes | Yes | Yes | — | Yes | Yes |
— | — | — | — |
Simula [citation needed ] |
2 | — | — | — | — | — | — | — | — | Yes | — | — | Yes |
— | — | — | — |
SISAL | 3 | Yes | — | Yes | — | — | Yes | — | — | — | — | — | — | — | — | — | — |
Spreadsheets | 2 | — | — | — | — | — | Yes | — | — | — | — | — | — | — | Yes | — | — |
Swift | 7 | Yes | — | — | — | — | Yes | Yes | Yes | Yes | — | Yes | Yes |
— | — | — | Block-structured |
Tcl with Snit extension [citation needed ] |
3 | — | — | — | — | — | Yes |
— | — | Yes | — | — | Yes |
— | — | — | — |
Visual Basic .NET | 6 (7) | Yes | — | Library |
— | — | Yes | — | Yes | Yes | — | Yes | Yes |
— | — | — | Reactive |
Windows PowerShell | 6 | — | — | — | — | — | Yes | — | Yes | Yes | — | Yes | Yes |
Yes | — | — | — |
Wolfram Language & Mathematica | 13 |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
— | Yes | Knowledge Based |
See also
[edit ]- Programming paradigm
- List of programming languages by type
- Domain-specific language
- Domain-specific multimodeling
Notes
[edit ]- ^ rendezvous and monitor-like based
- ^ 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 class-based
- ^ a b c d e template metaprogramming
- ^ a b c using TPL Dataflow
- ^ only lambda support (lazy functional programming)
- ^ a b c using Reactive Extensions (Rx)
- ^ multiple dispatch, method combinations
- ^ a b c d e actor programming
- ^ promises, native extensions
- ^ using Node.js' cluster module or child_process.fork method, web workers in the browser, etc.
- ^ a b c d Prototype-based
- ^ using Reactive Extensions (RxJS)
- ^ in Node.js via their events module
- ^ in browsers via their native EventTarget API
- ^ a b c purely functional
- ^ parameterized classes
- ^ immutable
- ^ Uses structs with function polymorphism and multiple dispatch
- ^ Akka Archived 2013年01月19日 at the Wayback Machine
Citations
[edit ]- ^ Bragg, S.D.; Driskill, C.G. (20–22 September 1994). "Diagrammatic-graphical programming languages and DoD-STD-2167A". Proceedings of AUTOTESTCON '94 (IEEEXplore). Institute of Electrical and Electronics Engineers (IEEE). pp. 211–220. doi:10.1109/AUTEST.1994.381508. ISBN 978-0-7803-1910-3. S2CID 62509261.
- ^ 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
- ^ "AraRat" (PDF). Archived from the original (PDF) on 2019年08月19日. Retrieved 2019年09月15日.
- ^ OpenMPI
- ^ Boost.MPI
- ^ Boost.MPL
- ^ LC++
- ^ Castor Archived 2013年01月25日 at the Wayback Machine
- ^ Reflect Library
- ^ N3534
- ^ Boost.Spirit
- ^ Clojure - Concurrent Programming
- ^ Clojure - core.async
- ^ Clojure - Functional Programming
- ^ Clojure - Macros
- ^ Clojure - core.logic
- ^ Clojure - Threading Macros Guide
- ^ "Light Table". 2019年04月08日.
- ^ Multimethods and Hierarchies
- ^ Agents and Asynchronous Actions
- ^ "concurrency". CLiki.
- ^ [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] Archived 2018年04月26日 at the Wayback Machine 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 Archived 2019年02月10日 at the Wayback Machine gives an overview of object-oriented programming techniques in JavaScript.
- ^ "React – A JavaScript library for building user interfaces". 2019年04月08日.
- ^ "TNG-Hooks". GitHub . 2019年04月08日.
- ^ "Lodash documentation". 2019年04月08日.
- ^ "mori". 2019年04月08日.
- ^ "Light Table". 2019年04月08日.
- ^ "TNG-Hooks". GitHub . 2019年04月08日.
- ^ "Prolog embedding". Haskell.org.
- ^ "Functional Reactive Programming". HaskellWiki.
- ^ Cloud Haskell
- ^ "Template Haskell". HaskellWiki.
- ^ "Logict: A backtracking logic-programming monad". Haskell.org.
- ^ Kollmansberger, Steve; Erwig, Martin (30 May 2006). "Haskell Rules: Embedding Rule Systems in Haskell" (PDF). Oregon State University .
- ^ https://jcp.org/en/jsr/detail?id=331 JSR 331: Constraint Programming API
- ^ https://github.com/GoogleCloudPlatform/DataflowJavaSDK Google Cloud Platform Dataflow SDK
- ^ "JuliaOpt/JuMP.jl". GitHub. JuliaOpt. 11 February 2020. Retrieved 12 February 2020.
- ^ "GitHub - MikeInnes/DataFlow.jl". GitHub . 2019年01月15日.
- ^ "GitHub - JuliaGizmos/Reactive.jl: Reactive programming primitives for Julia". GitHub . 2018年12月28日.
- ^ https://github.com/davidanthoff/Query.jl Query almost anything in julia
- ^ https://github.com/lilinjn/LilKanren.jl A collection of Kanren implementations in Julia
- ^ "GitHub - abeschneider/PEGParser.jl: PEG Parser for Julia". GitHub . 2018年12月03日.
- ^ "GitHub - gitfoxi/Parsimonious.jl: A PEG parser generator for Julia". GitHub . 2017年08月03日.
- ^ Lazy https://github.com/MikeInnes/Lazy.jl
- ^ "Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
- ^ "Write Constraints". mathworks.com. Retrieved 21 October 2016.
- ^ "Getting Started with SimEvents". mathworks.com. Retrieved 21 October 2016.
- ^ "Execute loop iterations in parallel". mathworks.com. Retrieved 21 October 2016.
- ^ "Execute MATLAB expression in text - MATLAB eval". mathworks.com. Retrieved 21 October 2016.
- ^ "Determine class of object". mathworks.com. Retrieved 21 October 2016.
- ^ "Class Metadata". mathworks.com. Retrieved 21 October 2016.
- ^ "Object-Oriented Programming". mathworks.com. Retrieved 21 October 2016.
- ^ "Simulink". mathworks.com. Retrieved 21 October 2016.
- ^ interpreter based threads
- ^ Higher Order Perl
- ^ PHP Manual, Chapter 17. Functions
- ^ PHP Manual, Chapter 19. Classes and Objects (PHP 5)
- ^ PHP Manual, Anonymous functions
- ^ "Parallel Processing and Multiprocessing in Python". Python Wiki. Retrieved 21 October 2016.
- ^ "threading — Higher-level threading interface". docs.python.org. Retrieved 21 October 2016.
- ^ "python-constraint". pypi.python.org. Retrieved 21 October 2016.
- ^ "DistributedProgramming". Python Wiki. Retrieved 21 October 2016.
- ^ "Chapter 9. Metaprogramming". chimera.labs.oreilly.com. Archived from the original on 23 October 2016. Retrieved 22 October 2016.
- ^ "Metaprogramming". readthedocs.io. Retrieved 22 October 2016.
- ^ "PEP 443 – Single-dispatch generic functions". python.org. Retrieved 22 October 2016.
- ^ "PEP 484 – Type Hints". python.org. Retrieved 22 October 2016.
- ^ "PyDatalog" . Retrieved 22 October 2016.
- ^ "Light Table". 2019年04月08日.
- ^ "Futureverse".
- ^ "future batchtools".
- ^ "Magrittr: A Forward Pipe Operator for R". cran.r-project.org\access-date=13 July 2017. 17 November 2020.
- ^ Racket Guide: Concurrency and Synchronization
- ^ The Rosette Guide
- ^ FrTime: A Language for Reactive Programs
- ^ Racket Guide: Distributed Places
- ^ Lazy Racket
- ^ Channels and other mechanisms
- ^ "Problem Solver module".
- ^ Feed operator
- ^ https://github.com/perl6/doc/issues/1744#issuecomment-360565196 Cro module
- ^ "Meta-programming: What, why and how". 2011年12月14日.
- ^ https://perl6advent.wordpress.com/2009/12/18/day-18-roles/ Parametrized Roles
- ^ "Meta-object protocol (MOP)".
- ^ https://docs.perl6.org/language/classtut Classes and Roles
- ^ "The Rust macros guide". Rust. Retrieved 19 January 2015.
- ^ "The Rust compiler plugins guide". Rust. Retrieved 19 January 2015.
- ^ The Rust Reference §6.1.3.1
- ^ An Overview of the Scala Programming Language
- ^ Scala Language Specification
- ^ "Tcl Programming/Introduction". en.wikibooks.org. Retrieved 22 October 2016.
- ^ "TCLLIB - Tcl Standard Library: snitfaq". sourceforge.net. Retrieved 22 October 2016.
- ^ Notes for Programming Language Experts, Wolfram Language Documentation.
- ^ External Programs, Wolfram Language Documentation.
References
[edit ]- Jim Coplien, Multiparadigm Design for C++, Addison-Wesley Professional, 1998.