Multi-paradigm programming language

A multi-paradigm programming language is a programming language that supports more than one programming paradigm. As Leda designer Tim Budd holds it: "The idea of a multiparadigm language is to provide a framework in which programmers can work in a variety of styles, freely intermixing constructs from different paradigms." The design goal of such languages is to allow programmers to use the best tool for a job, admitting that no one paradigm solves all problems in the easiest or most efficient way.

An example is Oz, which has subsets that are a logic language (Oz descends from logic programming), a functional language, an object-oriented language, a dataflow concurrent language, and more. Oz was designed over a ten-year period to combine in a harmonious way concepts that are traditionally associated with different programming paradigms.

Multiparadigm languages

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

Paradigm summaries

This only serves for quick reference for programming paradigms listed here
*Dataflow - forced recalculation of formulas when data values change (e.g. Spreadsheets)
*Visual programming language - manipulating program elements graphically rather than by specifying them textually (e.g. Simulink)
*Declarative programming - describes actions (e.g. HTML describe a page but not how to actually display it)
*Imperative programming - explicit statements that change a program state
*Functional programming - uses evaluation of mathematical functions and avoids state and mutable data
*Object-Oriented programming - uses classes and instances, inheritance, encapsulation and polymorphism
*Prototype-based programming - object-oriented programming that avoids classes and implements inheritance via the cloning of instances
*Parallel computing - simultaneous execution with the necessary communication and synchronization between processes/threads
*Actor model - concurrent computation with "actors" that makes local decisions in response to the environment (capable of selfish or competitive behavior)
*Pipeline programming - no nested function calls, but a simple flow structures with easy to visualize/understand data flow through the program
*Constraint programming - relations between variables are expressed as constraints (or constraint networks), directing allowable solutions (uses constraint satisfaction or simplex algorithm)
*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
*Logic programming - uses logical facts to create a model that can prove consistency, deduce further truths or answer questions about the model (e.g. Dogs are animals! Dogs are red! Are some animals red?)
*Reflective programming - special case of metaprogramming (modification of programs as data by another program or ability to do part of the work in compile time instead of running time) in which the program modifies or extends itself

Two paradigms

*dataflow, visual
**LabVIEW
*functional, imperative
**APL
*functional, logic
**ALF
*functional, object-oriented (class-based)
**Dylan Fact|date=March 2007
**Sather Fact|date=March 2007
**Claire
*functional, visual
**Spreadsheets
*imperative, object-oriented (class-based)
**AmigaE Fact|date=March 2007
**PHP [ [http://ch2.php.net/manual/en/index.php PHP Manual] , [http://ch2.php.net/manual/en/language.functions.php Chapter 17. Functions] ] [ [http://ch2.php.net/manual/en/index.php PHP Manual] , [http://ch2.php.net/manual/en/language.oop5.php Chapter 19. Classes and Objects (PHP 5)] ]
**Simula Fact|date=March 2007
*object-oriented (class-based), (prototype-based)
**Metaobject protocols
*object-oriented (class-based), visual
**Lava

Three paradigms

* imperative, generic, object-oriented (class-based)
**Java
* concurrent, dataflow, functional
** SISAL
* concurrent, functional, distributed
** Erlang
* concurrent, functional, logic
** Curry
* concurrent, imperative, object-oriented (class-based)
**ChucK Fact|date=March 2007
* dataflow, object-oriented (class-based), visual
** Prograph
* functional, imperative, logic
** Poplog
* functional, imperative, object-oriented (class-based)
** BETA Fact|date=March 2007
** F# Fact|date=January 2008
** J Fact|date=March 2007
** Perl Fact|date=March 2007
** Pliant Fact|date=March 2007
** Python [ [http://www-128.ibm.com/developerworks/library/l-prog.html Charming Python: Functional programming in Python, Part 1 ] ]
** Ruby
** Tcl with itcl or XOTcl extensions Fact|date=March 2007
* functional, imperative, object-oriented (prototype-based)
**ECMAScript [ [http://www.crockford.com/javascript/little.html The Little JavaScripter] demonstrates fundamental commonality with Scheme, a functional language.] [ [http://mckoss.com/jscript/object.htm Object Oriented Programming in JavaScript] gives an overview of object-oriented programming techniques in JavaScript.]
***ActionScript
***DMDScript
***E4X
***JavaScript
***JScript
** Lua Fact|date=March 2007
** Tcl with Snit extension Fact|date=March 2007
* generic (template metaprogramming), imperative, object-oriented (class-based)
** C++
** D

Four paradigms

* functional (only lambda support), imperative, generic, object-oriented (class-based)
** C#
* functional, imperative, generic (template metaprogramming), object-oriented (class-based)
** Objective Caml
* functional, imperative, concurrent (Actor model), object-oriented (class-based)
**ScalaMartin Odersky et al, An Overview of the Scala Programming Language, 2nd Edition]
* functional, imperative, concurrent (Actor model), object-oriented (prototype-based)
** Io
* functional, imperative, logic, object-oriented (class-based)
** Leda
* functional, imperative, object-oriented (prototype-based), dialected
** REBOL
* imperative, logic, object-oriented (class-based), rule-based
** ROOP
* functional, imperative, object-oriented (class-based), reflective
** Common Lisp Fact|date=March 2007 (although there are other paradigms implemented as libraries)

Five paradigms

* functional, imperative, generic, object-oriented (class-based), metaprogramming
** Nemerle
* functional, imperative, object-oriented (class-based), metaprogramming, reflective
** [http://www.falconpl.org Falcon programming language]
* concurrent (rendezvous and monitor-like based), distributed, generic, imperative, object-oriented (class-based)
** Ada [ [http://www.adaic.org/standards/05rm/html/RM-TTL.html Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3] , [http://www.adaic.org/standards/05rm/html/RM-9.html Section 9: Tasks and Synchronization] ] [ [http://www.adaic.org/standards/05rm/html/RM-TTL.html Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3] [http://www.adaic.org/standards/05rm/html/RM-E.html Annex E: Distributed Systems] ] [ [http://www.adaic.org/standards/05rm/html/RM-TTL.html Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3] , [http://www.adaic.org/standards/05rm/html/RM-12.html Section 12: Generic Units] ] [ [http://www.adaic.org/standards/05rm/html/RM-TTL.html Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3] , [http://www.adaic.org/standards/05rm/html/RM-6.html Section 6: Subprograms] ] [ [http://www.adaic.org/standards/05rm/html/RM-TTL.html Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3] , [http://www.adaic.org/standards/05rm/html/RM-3-9.html 3.9 Tagged Types and Type Extensions] ]
* functional, imperative, pipeline, object-oriented (class-based), reflective
** Windows PowerShell
* functional, generic (template metaprogramming), imperative, object-oriented (class-based), reflective
** Curl

Eight paradigms

* concurrent, constraint, dataflow, distributed, functional (evaluation: eager, lazy), imperative, logic, object-oriented (class-based)
** Oz Fact|date=March 2007
*** Mozart Programming System (a multiplatform Oz)

ee also

*Programming paradigm
*Categorical list of programming languages
*Domain-specific programming language
*Service-Oriented Modeling Framework (SOMF)

References


*"Multiparadigm Design for C++", by Jim Coplien, 1998.
*"Concepts, Techniques, and Models of Computer Programming", by Peter Van Roy and Seif Haridi, 2004.


Wikimedia Foundation. 2010.

Look at other dictionaries:

  • Programming language — lists Alphabetical Categorical Chronological Generational A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that… …   Wikipedia

  • Programming language theory — (commonly known as PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of programming languages and programming language features. It is a multi disciplinary field, both… …   Wikipedia

  • C Sharp (programming language) — The correct title of this article is C# (programming language). The substitution or omission of the # sign is because of technical restrictions. C# Paradigm(s) multi paradigm: structured, imperative …   Wikipedia

  • F Sharp (programming language) — The correct title of this article is F#. The substitution or omission of the # sign is because of technical restrictions. F# Paradigm(s) multi paradigm: functional, imperative, object oriented Appeared in 2002 (2002) …   Wikipedia

  • F-Script (programming language) — Infobox programming language name = F Script paradigm = multi paradigm: object oriented, array year = designer = Philippe Mougin developer = latest release version = 1.3.4 latest release date = July 7, 2006 typing = dynamic implementations = F… …   Wikipedia

  • Python (programming language) — infobox programming language name = Python paradigm = multi paradigm: object oriented, imperative, functional year = 1991 designer = Guido van Rossum developer = Python Software Foundation latest release version = 2.6 latest release date =… …   Wikipedia

  • Racket (programming language) — Racket Paradigm(s) Multi paradigm: Functional, Procedural, Modular, Object oriented, Reflective, Meta Appeared in 1994 Developer …   Wikipedia

  • Scala (programming language) — Infobox programming language name = Scala paradigm = Multi paradigm: functional, object oriented year = 2003 designer = Martin Odersky developer = Programming Methods Laboratory of EPFL latest release version = 2.7.1 latest release date = May 5,… …   Wikipedia

  • Dylan (programming language) — Dylan Paradigm(s) multi paradigm: functional, object oriented Appeared in Early 1990s Developer Apple Computer Typing discipl …   Wikipedia

  • CPL (programming language) — CPL Paradigm(s) multi paradigm: procedural, imperative, structured, functional Appeared in 1963 Designed by Christopher Strachey et al. Influenced by ALGOL 60 …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”