class="wikitable sortable" |
Name | Pure | Lazy evaluation | Typing | Abstract data types | Algebraic data types | Data is immutable | Type classes | Garbage collection || First appeared |
---|
Common Lisp | {{No}}[{{cite web|title=LISP Introduction|url=http://www.math-cs.gordon.edu/courses/cps323/LISP/lisp.html|access-date=26 November 2013}}] | {{Partial|Simulated with thunks[{{cite web|last=Antoniotti|first=Marco|title=CLAZY: Lazy Calling in Common Lisp|url=http://common-lisp.net/project/clazy/|access-date=26 November 2013}}]}} | style="background:#FC6; text-align:center"|Dynamic[{{cite journal|last=Tratt|first=Laurence|title=Dynamically Typed Languages|journal=Advances in Computers|date=July 2009|volume=77|pages=149–184|url=http://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/|access-date=26 November 2013|doi=10.1016/s0065-2458(09)01205-4|url-access=subscription}}] | {{Yes}}[{{cite web|title=LISP Tutorial Lecture 3: Data Abstraction|url=http://www.cs.sfu.ca/CourseCentral/310/pwfong/Lisp/3/tutorial3.html}}] | {{Partial|Extension}}[{{cite web|title=Algebraic data types in Common Lisp|website=GitHub |url=https://github.com/stylewarning/cl-algebraic-data-type|access-date=11 May 2020}}] | {{No}}[{{cite web|title=Mutable Data Structures|url=http://caml.inria.fr/pub/docs/fpcl/fpcl-07.pdf|access-date=28 November 2013}}] | {{Dunno}} | {{Yes}} | 1984 |
Scheme | {{No}}[{{cite web|title=Similar Functional Languages|url=http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora202.html|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=(Scheme) 17. Lazy Evaluation|url=http://www.shido.info/lisp/scheme_lazy_e.html|access-date=30 April 2020}}] | style="background:#FC6; text-align:center"|Dynamic | {{Yes}}[{{cite web|title=Records - Revised6 Report on the Algorithmic Language Scheme|url=http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html|access-date=11 May 2020}}] | {{Partial|Simulated with thunks}}[{{cite web|title=Algebraic Data Types in Scheme|url=https://pavpanchekha.com/blog/adtscm.html|access-date=11 May 2020}}] | {{No}}[{{cite web|title=Programs with State|url=http://www.cs.uni.edu/~wallingf/teaching/cs3540/sessions/session26.html|access-date=29 November 2013}}] | {{No}} | {{Yes}} | 1975 |
Racket | {{No}} | {{Yes2}}Default in Lazy Racket[{{cite web|url=https://docs.racket-lang.org/lazy/index.html|title=Lazy Racket|access-date=8 February 2020|first=Eli|last=Barzilay}}] | style="background:#99F; text-align:center"|Dynamic by default, gradual with Typed Racket[{{cite web|url=https://docs.racket-lang.org/ts-reference/index.html|title=Typed Racket|access-date=8 February 2020|first1=Sam|last1=Tobin-Hochstadt|first2=Vincent|last2=St-Amour|first3=Eric|last3=Dobson|first4=Asumu|last4=Takikawa}}] | {{Yes}}[{{cite web|url=https://docs.racket-lang.org/guide/define-struct.html|title=The Racket Guide: Programmer-Defined Datatypes|access-date=8 February 2020}}] | {{Yes2}}Yes, with Algebraic Racket[{{Cite web|url=https://docs.racket-lang.org/algebraic/index.html|title=Algebraic Racket|access-date=8 February 2020|first=Eric|last=Griffis}}] | {{Partial}}[{{Cite web|url=https://beautifulracket.com/explainer/data-structures.html|title=Beautiful Racket: Data Structures|access-date=8 February 2020|first=Matthew|last=Buttrick}}] | {{No}} | {{Yes}} | 1995 |
Clojure | {{No}}[{{cite web|title=Clojure Functional Programing|url=http://clojure.org/functional_programming}}] | {{Yes}}[{{cite web|title=Clojure - lazy|url=http://clojure.org/lazy|access-date=27 November 2013}}] | style="background:#FC6; text-align:center"|Dynamic[{{cite web|title=Exploring clojure: dynamic typing|date=7 December 2012 |url=http://tgoossens.wordpress.com/2012/12/07/dynamically-exploring-clojure/|access-date=26 November 2013}}] | {{Yes}}[{{cite web|last=Engelberg|first=Mark|title=Thoughts On Programming|date=21 April 2009 |url=http://programming-puzzler.blogspot.com/2009/04/adts-in-clojure.html|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=clojure-contrib, typing example|url=https://code.google.com/p/clojure-contrib/source/browse/trunk/src/clojure/contrib/types/examples.clj?spec=svn596&r=596|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=clojure: functional programming overview|url=http://clojure.org/functional_programming|access-date=26 November 2013}}] | {{No}} | {{Yes}} | 2007 |
Standard ML | {{No}}[{{cite web|title=Introduction to Functional Programming|url=http://www.cl.cam.ac.uk/~jrh13/slides/funprog-jrh/l8.pdf|access-date=26 November 2013}}] | {{No}}[{{cite web|title=Lazy and Eager Evaluation|url=http://homepages.inf.ed.ac.uk/dts/fps/lecture-notes/lazy.pdf|access-date=26 November 2013}}][{{cite web|last=Harper, MacQueen, Milner|title=Standard ML|url=http://www.lfcs.inf.ed.ac.uk/reports/86/ECS-LFCS-86-2/ECS-LFCS-86-2.pdf|work=Section 3.6}}] | style="background:#8CF; text-align:center"|Static[Wikibooks:Standard ML Programming/Types] | {{Yes}} | {{Yes}} | {{Yes}}[{{cite web|title=Mutable and optional data|url=http://courses.cs.washington.edu/courses/cse341/04wi/lectures/08-ml-refs.html|access-date=28 November 2013}}] | {{No}} | {{Yes}} | 1983 |
OCaml | {{No}}[{{cite web|title=Functional Programming – OCaml|url=http://ocaml.org/learn/tutorials/functional_programming.html|access-date=26 November 2013}}] | {{Yes}} | style="background:#8CF; text-align:center"|Static[{{cite web|last=Hickey|first=Jason|title=Introduction to Objective Caml|url=http://files.metaprl.org/doc/ocaml-book.pdf|work=Section 2.4|publisher=Cambridge University Press|access-date=26 November 2013|url-status=dead|archive-url=https://web.archive.org/web/20131002091023/http://files.metaprl.org/doc/ocaml-book.pdf|archive-date=2 October 2013}}] | {{Yes}}[{{cite web|title=Type and exception definitions|url=http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual016.html}}] | {{Yes}}[{{cite web|url=http://ocaml.org/learn/description.html#DataTypes| title=Learn OCaml - Data Types}}] | {{Yes}}[{{cite web|url=http://ocaml.org/learn/description.html#Imperativefeatures | title=Learn OCaml - Imperative Features}}] | {{Partial|Simulated with parametric modules}}[{{cite web|title=Implementing Type-Classes as OCaml Modules|url=https://accu.org/index.php/journals/2445|access-date=11 May 2020}}] | {{Yes}} | 1996 |
F# | {{No}}[{{cite web | url=http://fsharpforfunandprofit.com/learning-fsharp/| access-date=6 December 2013 | title=Learning F#}}] | {{Yes}}[{{cite web|title=Lazy Computations (F#)|url=http://msdn.microsoft.com/en-us/library/vstudio/dd233247.aspx|publisher=Microsoft Developer Network|access-date=26 November 2013}}] | style="background:#8CF; text-align:center"|Static[{{cite web|title=About F#|url=http://fsharp.org/about/index.html|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=Structures - F#|url=https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/structures|access-date=11 May 2020}}] | {{Yes}}[{{cite web|title=Discriminated Unions|date=15 September 2021 |url=https://msdn.microsoft.com/en-us/library/dd233226.aspx}}] | {{Yes}}[{{cite web|title=The F# 3.0 Language Specification: 1.1.2 Making Data Simple|url=http://fsharp.org/about/files/spec.pdf|access-date=26 November 2013}}] | {{No}} | {{Yes}} | 2005 |
Haskell | {{Yes}}[{{cite web|title=Haskell Wiki|url=http://www.haskell.org|access-date=26 November 2013}}] | {{Yes2}}Default[{{cite web|title=Haskell Wiki Lazy Evaluation|url=http://www.haskell.org/haskellwiki/Lazy_evaluation|access-date=26 November 2013}}] | style="background:#8CF; text-align:center"|Static[{{cite web|title=Haskell Typing|url=http://www.haskell.org/haskellwiki/Typing|publisher=HaskellWiki|access-date=26 November 2013}}] | {{Yes}} | {{Yes}}[{{cite web|title=Haskell Wiki Abstract Data Type|url=http://www.haskell.org/haskellwiki/Abstract_data_type|access-date=26 November 2013}}] | {{Yes}}[{{cite web|url=http://www.haskell.org/haskellwiki/Functional_programming#Immutable_data|title=Haskell Wiki|access-date=27 November 2013}}] | {{Yes}}[{{cite web|url=http://www.haskell.org/tutorial/classes.html|title=Type Classes and Overloading}}] | {{Yes}} | 1990 |
Scala | {{No}}[{{cite web|title=Scala Overview|url=http://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/ScalaOverview.pdf|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=Scala by Example|url=http://www.scala-lang.org/docu/files/ScalaByExample.pdf|access-date=26 November 2013}}] | style="background:#8CF; text-align:center"|Static | {{Yes}}[{{cite web|title=Scala Reference|url=http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf|access-date=26 November 2013}}] | {{Yes}} | {{Yes}}[{{cite web|title=Mutable and Immutable Collections|url=http://docs.scala-lang.org/overviews/collections/overview.html|access-date=26 November 2013}}] | {{Yes}}[{{cite web|title=The Neophyte's Guide to Scala Part 12: Type Classes|url=http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes.html|access-date=29 November 2013}}] | {{Yes}} | 2004 |
JavaScript | {{No}}[List of multi-paradigm programming languages#Language overview]{{unreliable source?|date=March 2015}} | {{Partial|Extension}}[{{cite web|last=Tao|first=Dan|title=Lazy.js|url=http://danieltao.com/lazy.js/|work=Dan Tao|access-date=26 November 2013}}] | style="background:#FC6; text-align:center"|Dynamic[{{cite web|title=JavaScript Overview|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/JavaScript_Overview|work=Mozilla Developer Network|access-date=26 November 2013}}] | {{Partial|Extension}}[{{cite web|last=Frank|first=Thomas|title=Add some klass to JavaScript|url=http://www.thomasfrank.se/klass.html|work=thomasfrank.com|access-date=26 November 2013|archive-url=https://web.archive.org/web/20131208100043/http://thomasfrank.se/klass.html|archive-date=8 December 2013|url-status=dead}}] | {{Partial|Extension}}[{{cite web|last=Faubion|first=Nathan|title=ADT|url=https://npmjs.org/package/adt|work=NPM|publisher=Joyent, nodejitsu|access-date=26 November 2013}}] | {{Partial}}[Immutable object#JavaScript][{{cite web|title=Javascript Data structures|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures|work=Mozilla Developer Network|access-date=26 November 2013}}] | {{Dunno}} | {{Yes}} | 1995 |
Clean | {{Yes}}[{{cite web | url=http://clean.cs.ru.nl/FAQ | title=FAQ - Clean}}] | {{Yes}}, with optional strictness annotations[{{cite book|last1=Plasmeijer|first1=Rinus|last2=Van Eekelen|first2=Marko|last3=Van Groningen|first3=John|title=Clean Version 2.2 Language Report|date=December 2011|publisher=Department of Software Technology, University of Nijmegen|url=http://clean.cs.ru.nl/download/doc/CleanLangRep.2.2.pdf|access-date=23 May 2018}}] | style="background:#99F; text-align:center"|Static with uniqueness/optionally dynamic[{{cite web | url=http://clean.cs.ru.nl/Clean | title=Clean}}] | {{Yes}} | {{Yes}} | {{Yes}}, except for unique types | {{Yes}} | {{Yes}} | 1987 |
Miranda | {{Yes}}[{{cite web | url=http://miranda.org.uk/ | title=Miranda Official Website}}] | {{Yes2}}Default[{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy | title=An Overview of Miranda}}] | style="background:#8CF; text-align:center"|Static | {{Yes}}[{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract | title=An Overview of Miranda}}] | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | 1986 |
SASL | {{Yes}}[Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.] | {{Yes}} | style="background:#FC6; text-align:center"|Dynamic[{{cite book | url=https://books.google.com/books?id=W2baKp7710sC&q=sasl+dynamic+typing&pg=PA128 | title=Kahn networks at the dawn of functional programming| isbn=9780521518253| last1=Kahn| first1=Gilles| last2=Bertot| first2=Yves| last3=Huet| first3=Gérard| last4=Lévy| first4=Jean-Jacques| last5=Plotkin| first5=Gordon| date=2009-09-24| publisher=Cambridge University Press}}] | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | 1972 |
Elixir | {{No}} | {{Partial|Stream module[{{cite web | url=https://hexdocs.pm/elixir/Stream.html| title=Stream — Elixir v1.17.2}} ]}} | style="background:#FC6; text-align:center"|Dynamic | {{Yes}} | {{No}} | {{Yes}} | {{Dunno}} | {{Yes}} | 2012 |
Erlang | {{No}} | {{No}}[{{cite web | url=http://www.erlang.org/doc/reference_manual/expressions.html#id76539| access-date=27 November 2013 | title=Erlang Reference Manual}}] | style="background:#FC6; text-align:center"|Dynamic | {{Yes}}[{{cite web | url=http://www.erlang.org/eeps/eep-0029.html | title=Erlang Programming Language - Abstract Patterns}}] | {{No}} | {{Yes}}[{{cite web | url=https://stackoverflow.com/questions/2715517/how-do-i-modify-a-record-in-erlang | access-date=15 December 2013 | title=Stack Overflow - How do I modify a record in erlang?}}] | {{Dunno}} | {{Yes}} | 1986 |
Elm | {{Yes}} | {{No}} | style="background:#8CF; text-align:center"|Static[{{cite web | url=http://elm-lang.org/blog/Interactive-Programming.elm | access-date=29 November 2013 | title=Elm Blog - Interactive Programming | archive-url=https://web.archive.org/web/20131006235603/http://elm-lang.org/blog/Interactive-Programming.elm | archive-date=6 October 2013 | url-status=dead }}] | {{dunno}} | {{Yes}}[{{cite web | url=http://elm-lang.org/learn/Syntax.elm#algebraic-data-types | access-date=29 November 2013 | title=Elm Syntax - Algebraic Data Types | archive-url=https://web.archive.org/web/20160313052210/http://elm-lang.org/learn/syntax.elm#algebraic-data-types | archive-date=13 March 2016 | url-status=dead }}] | {{Yes}} | {{No}} | {{Yes}} | 2012 |
Futhark | {{Yes}} | {{No}} | style="background:#8CF; text-align:center"|Static[{{cite web | url=https://futhark.readthedocs.io/en/latest/language-reference.html#type-inference | access-date=24 July 2023 | title=Type Inference}}] | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | 2014 |
Python | {{No}}[{{cite web | url=https://docs.python.org/3/howto/functional.html | title=Functional Programming in Python}}] | {{Partial|Simulated with generators}} | style="background:#FC6; text-align:center"|Dynamic[{{cite web | url=https://docs.python.org/3/faq/general.html#what-is-python | title=What is Python?}}] | {{Yes}}[{{cite web | url=http://www.cs.utexas.edu/~byoung/cs313e/slides5-adt.pdf | title=Abstract Data Types and Stacks}}] | {{No}} | {{Partial}}[Immutable object#Python] | {{Dunno}} | {{Yes}} | 1991 |
Idris | {{Yes}}[{{cite web|title=Idris Overview|url=http://www.idris-lang.org/|access-date=6 December 2013}}] | {{Yes}} | style="background:#8CF; text-align:center"|Static | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | 2007 |
Nix | {{Yes}} | {{No}} | style="background:#8CF; text-align:center"|Static{{Citation needed|date=January 2025}} | {{No}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | 2003 |
Wolfram Language
|{{No}}
|{{No}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{No}}
|{{Yes}}
| 1988 |
Kotlin
|{{No}}
|{{Partial|Lazy delegation[{{cite web | url=https://kotlinlang.org/docs/reference/delegated-properties.html | title=Kotlin - Delegated Properties}}] and Sequence[{{cite web | url=https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/ | title=kotlin-stdlib - kotlin.sequences}}]}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{No}}
|{{Yes}}
|{{No}}
|{{Yes}}
| 2011 |
Swift
|{{No}}
|{{No}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{No}}
|{{Partial|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}}[{{cite web | url=https://docs.julialang.org/en/v1/manual/noteworthy-differences/ | title=Noteworthy Differences from Other Languages - The Julia Language }}]
|style="background:#FC6; text-align:center"|Dynamic[{{cite web | url=https://docs.julialang.org/en/v1/manual/types/ | title=Types - The Julia Language }}]
|{{Yes}}
|{{No}}
|{{Partial}}
|{{Dunno}}
|{{Yes}}
| 2012 |
PureScript
|{{Yes}}
|{{No}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{Yes}}
| 2013 |
Rust
|{{No}}
|{{Partial|Lazy iterators}}[{{cite web | url=https://doc.rust-lang.org/book/ch13-02-iterators.html | title=The Rust Programming Language, Processing a Series of Items with Iterators }}] and external libraries[{{cite web | url=https://crates.io/crates/lazy | title=Rust crate 'lazy'}}]
|style="background:#8CF; text-align:center"|Static[{{cite web |url=https://doc.rust-lang.org/book/ch03-02-data-types.html | title=The Rust Programming Language, Data Types}}]
|{{Yes}}[{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=The Rust Programming Language, Traits}}]
|{{Yes}}[{{cite web | url=https://doc.rust-lang.org/book/ch06-00-enums.html | title=The Rust Programming Language, Enums}}]
|{{Yes}}[{{cite web | url=https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html | title=The Rust Programming Language, Variables and Mutability}}]
|{{Yes}}, through traits
|{{No}}
| 2010 |
Bosque
|{{No}}
|{{No}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{Dunno}}
|{{Yes}}
|2019 |
D
| {{Partial|Optional}}[{{cite web|title=D pure functions|url=https://dlang.org/spec/function.html#pure-functions|access-date=3 February 2024}}][{{cite web|title=D safe functions|url=https://dlang.org/spec/function.html#safe-functions|access-date=3 February 2024}}]
| {{Partial|Optional}}[{{cite web|title=Laziness - Dlang Tour|url=https://tour.dlang.org/tour/en/basics/laziness|access-date=7 April 2020}}]
| style="background:#8CF; text-align:center"|Static[{{cite web|title=Type System|url=https://dlang.org/spec/type.html|access-date=7 April 2020}}]
| {{dunno}}
| {{Yes}}
| {{Yes}}[{{cite web|title=Immutable - Dlang Tour|url=https://tour.dlang.org/tour/en/basics/immutability|access-date=7 April 2020}}]
| {{No}}
| {{Yes}}[{{cite web|title=Garbage Collection|url=https://dlang.org/spec/garbage.html|access-date=7 April 2020}}]
| 2001 |
Gleam | {{No}}[{{cite web | url=https://gleam.run/frequently-asked-questions/#will-gleam-have-type-classes | title=Frequently asked questions – Gleam }}] | {{Partial|Experimental external libraries}} | style="background:#8CF; text-align:center"|Static | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | 2019 |