Comparison of functional programming languages information
The table shows a comparison of functional programming languages which compares various features and designs of different functional programming languages.
Name
Pure
Lazy evaluation
Typing
Abstract data types
Algebraic data types
Data is immutable
Type classes
Garbage collection
First appeared
Common Lisp
No[1]
Partial, simulated with thunks[2]
Dynamic[3]
Yes[4]
Partial, with extension[5]
No[6]
Not applicable
Yes
1984
Scheme
No[7]
Yes[8]
Dynamic[7]
Yes[9]
Partial, simulated with thunks[10]
No[11]
Not applicable
Yes
1975
Racket
No
Yes, default in Lazy Racket[12]
Dynamic by default, gradual with Typed Racket[13]
Yes[14]
Yes, with Algebraic Racket[15]
Partial[16]
No
Yes
1995
Clojure
No[17]
Yes[18]
Dynamic[19]
Yes[20]
Yes[21]
Yes[22]
Not applicable
Yes
2007
Standard ML
No[23]
No[24][25]
Static[26]
Yes
Yes
Yes[27]
No
Yes
1983
OCaml
No[28]
Yes[28]
Static[29]
Yes[30]
Yes[31]
Yes[32]
Partial, simulated with parametric modules[33]
Yes
1996
F#
No[34]
Yes[35]
Static[36]
Yes[37]
Yes[38]
Yes[39]
No
Yes
2005
Haskell
Yes[40]
Default[41]
Static[42]
Yes[40]
Yes[43]
Yes[44]
Yes[45]
Yes
1990
Scala
No[46]
Yes[47]
Static[46]
Yes[48]
Yes[48]
Yes[49]
Yes[50]
Yes
2004
JavaScript
No[51][unreliable source?]
Partial, with extension[52]
Dynamic[53]
Partial, with extension[54]
Partial, with extension[55]
Partial[56][57]
Not applicable
Yes
1995
Clean
Yes[58]
Yes, with optional strictness annotations[59]
Static with uniqueness/optionally dynamic[60]
Yes[59]
Yes[59]
Yes, except for unique types[59]
Yes[59]
Yes
1987
Miranda
Yes[61]
Default[62]
Static[61]
Yes[63]
Yes[61]
Yes
No
Yes
1986
SASL
Yes[64]
Yes
Dynamic[65]
Yes
Yes
Yes
No
Yes
1972
Elixir
No
Partial, with the Stream module[66]
Dynamic
Yes
No
Yes
Not applicable
Yes
2012
Erlang
No
No[67]
Dynamic
Yes[68]
No
Yes[69]
Not applicable
Yes
1986
Elm
Yes
No
Static[70]
?
Yes[71]
Yes[70]
No
Yes
2012
Futhark
Yes
No
Static[72]
Yes
Yes
Yes[70]
No
Yes
2014
Python
No[73]
Partial, simulated with generators
Dynamic[74]
Yes[75]
No
Partial[76]
Not applicable
Yes
1991
Idris
Yes[77]
Yes[77]
Static[77]
Yes[77]
Yes[77]
Yes[77]
Yes[77]
Yes
2007
Nix
Yes
No
Static
No
Yes
Yes
No
Yes
2003
Wolfram Language
No
No
Static
Yes
Yes
Yes
No
Yes
1988
Kotlin
No
Partial, lazy delegation[78] and Sequence[79]
Static
Yes
No
Yes
No
Yes
2011
Swift
No
No
Static
Yes
Yes
Yes
No
Swift uses Automatic Reference Counting, which differs from tracing garbage collection but is designed to provide similar benefits with better performance.
2014
Julia
No
No[80]
Dynamic[81]
Yes[81]
No
Partial[81]
Not applicable
Yes
2012
PureScript
Yes
No
Static
Yes
Yes
Yes
Yes
Yes
2013
Rust
No
Partial, iterators are lazy,[82] external libraries exist[83]
Static[84]
Yes[85]
Yes[86]
Yes[87]
Yes, through traits[85]
No
2010
Bosque
No
No
Static
Yes
Yes
Yes
Unknown
Yes
2019
D
Yes, multiple levels of opt-in[88][89]
Yes, but not default[90]
Static[91]
?
Yes
Yes[92]
No
Yes[93]
2001
^"LISP Introduction". Retrieved 26 November 2013.
^Antoniotti, Marco. "CLAZY: Lazy Calling in Common Lisp". Retrieved 26 November 2013.
^Tratt, Laurence (July 2009). "Dynamically Typed Languages". Advances in Computers. 77: 149–184. doi:10.1016/s0065-2458(09)01205-4. Retrieved 26 November 2013.
^"LISP Tutorial Lecture 3: Data Abstraction".
^"Algebraic data types in Common Lisp". GitHub. Retrieved 11 May 2020.
^"Mutable Data Structures" (PDF). Retrieved 28 November 2013.
^ ab"Similar Functional Languages". Retrieved 26 November 2013.
^"(Scheme) 17. Lazy Evaluation". Retrieved 30 April 2020.
^"Records - Revised6 Report on the Algorithmic Language Scheme". Retrieved 11 May 2020.
^"Algebraic Data Types in Scheme". Retrieved 11 May 2020.
^"Programs with State". Retrieved 29 November 2013.
^Barzilay, Eli. "Lazy Racket". Retrieved 8 February 2020.
^"Mutable and optional data". Retrieved 28 November 2013.
^ ab"Functional Programming – OCaml". Retrieved 26 November 2013.
^Hickey, Jason. "Introduction to Objective Caml" (PDF). Section 2.4. Cambridge University Press. Archived from the original (PDF) on 2 October 2013. Retrieved 26 November 2013.
^"Type and exception definitions".
^"Learn OCaml - Data Types".
^"Learn OCaml - Imperative Features".
^"Implementing Type-Classes as OCaml Modules". Retrieved 11 May 2020.
^"Learning F#". Retrieved 6 December 2013.
^"Lazy Computations (F#)". Microsoft Developer Network. Retrieved 26 November 2013.
^"About F#". Retrieved 26 November 2013.
^"Structures - F#". Retrieved 11 May 2020.
^"Discriminated Unions".
^"The F# 3.0 Language Specification: 1.1.2 Making Data Simple" (PDF). Retrieved 26 November 2013.
^ ab"Haskell Wiki". Retrieved 26 November 2013.
^"Haskell Wiki Lazy Evaluation". Retrieved 26 November 2013.
^"Haskell Typing". HaskellWiki. Retrieved 26 November 2013.
^"Haskell Wiki Abstract Data Type". Retrieved 26 November 2013.
^"Haskell Wiki". Retrieved 27 November 2013.
^"Type Classes and Overloading".
^ ab"Scala Overview" (PDF). Retrieved 26 November 2013.
^"Scala by Example" (PDF). Retrieved 26 November 2013.
^ ab"Scala Reference" (PDF). Retrieved 26 November 2013.
^"Mutable and Immutable Collections". Retrieved 26 November 2013.
^"The Neophyte's Guide to Scala Part 12: Type Classes". Retrieved 29 November 2013.
^List of multi-paradigm programming languages#Language overview
^Tao, Dan. "Lazy.js". Dan Tao. Retrieved 26 November 2013.
^"JavaScript Overview". Mozilla Developer Network. Mozilla Developer Network. Retrieved 26 November 2013.
^Frank, Thomas. "Add some klass to JavaScript". thomasfrank.com. Archived from the original on 8 December 2013. Retrieved 26 November 2013.
^Faubion, Nathan. "ADT". NPM. Joyent, nodejitsu. Retrieved 26 November 2013.
^Immutable object#JavaScript
^"Javascript Data structures". Mozilla Developer Network. Mozilla Developer Network. Retrieved 26 November 2013.
^"FAQ - Clean".
^ abcdePlasmeijer, Rinus; Van Eekelen, Marko; Van Groningen, John (December 2011). Clean Version 2.2 Language Report(PDF). Department of Software Technology, University of Nijmegen. Retrieved 23 May 2018.
^"Clean".
^ abc"Miranda Official Website".
^"An Overview of Miranda".
^"An Overview of Miranda".
^Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.
^Kahn, Gilles; Bertot, Yves; Huet, Gérard; Lévy, Jean-Jacques; Plotkin, Gordon (2009-09-24). Kahn networks at the dawn of functional programming. ISBN 9780521518253.
^"Stream - Elixir v.1.6.0".
^"Erlang Reference Manual". Retrieved 27 November 2013.
^"Erlang Programming Language - Abstract Patterns".
^"Stack Overflow - How do I modify a record in erlang?". Retrieved 15 December 2013.
^ abc"Elm Blog - Interactive Programming". Archived from the original on 6 October 2013. Retrieved 29 November 2013.
^"Elm Syntax - Algebraic Data Types". Archived from the original on 13 March 2016. Retrieved 29 November 2013.
^"Type Inference". Retrieved 24 July 2023.
^"Functional Programming in Python".
^"What is Python?".
^"Abstract Data Types and Stacks" (PDF).
^Immutable object#Python
^ abcdefg"Idris Overview". Retrieved 6 December 2013.
^"Kotlin - Delegated Properties".
^"kotlin-stdlib - kotlin.sequences".
^"Noteworthy Differences from Other Languages - The Julia Language".
^ abc"Types - The Julia Language".
^"The Rust Programming Language, Processing a Series of Items with Iterators".
^"Rust crate 'lazy'".
^"The Rust Programming Language, Data Types".
^ ab"The Rust Programming Language, Traits".
^"The Rust Programming Language, Enums".
^"The Rust Programming Language, Variables and Mutability".
^"D pure functions". Retrieved 3 February 2024.
^"D safe functions". Retrieved 3 February 2024.
^"Laziness - Dlang Tour". Retrieved 7 April 2020.
^"Type System". Retrieved 7 April 2020.
^"Immutable - Dlang Tour". Retrieved 7 April 2020.
^"Garbage Collection". Retrieved 7 April 2020.
and 15 Related for: Comparison of functional programming languages information
functionalprogramming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm...
selection of commonly used programminglanguages. See the individual languages' articles for further information. Most programminglanguages will print...
the main programming paradigms, as seen when measuring programminglanguage popularity: Procedural programming – specifies the steps a program must take...
This is a list of notable programminglanguages, grouped by type. The groupings are overlapping; not mutually exclusive. A language can be listed in multiple...
Procedural programming is a programming paradigm, classified as imperative programming, that involves implementing the behavior of a computer program as procedures...
Other functionallanguages, such as Lisp, OCaml and Erlang, support a mixture of procedural and functionalprogramming. Some logic programminglanguages, such...
interacting objects. In functionalprogramming, programs are treated as a sequence of stateless function evaluations. When programming computers or systems...
function. Anonymous functions are ubiquitous in functionalprogramminglanguages and other languages with first-class functions, where they fulfil the...
type-checking overhead, functionalprogramminglanguages are, in general, challenging to compile to efficient machine language code, due to issues such...
functional programminglanguages existed. Miranda was the most widely used, but it was proprietary software. At the conference on FunctionalProgramming Languages...
multi-paradigm, supporting event-driven, functional, and imperative programming styles. It has application programming interfaces (APIs) for working with text...