Content deleted Content added
Add Futhark |
m Open access bot: url-access updated in citation with #oabot. |
||
(47 intermediate revisions by 10 users not shown) | |||
Line 1:
{{Short description|none}}
The table shows a '''comparison of functional programming languages''' which compares various features and designs of different [[functional programming]] languages.
Line 6 ⟶ 5:
{| class="wikitable sortable"
|-
! Name !! [[Purely functional programming|Pure]] !! [[Lazy
|-
| [[Common Lisp]] || {{No}}<ref name=math-cs.gordon.edu>{{cite web|title=LISP Introduction|url=http://www.math-cs.gordon.edu/courses/cps323/LISP/lisp.html|access-date=26 November 2013}}</ref> || {{Partial
|-
| [[Scheme (programming language)|Scheme]] || {{No}}<ref name=caml.inria.fr>{{cite web|title=Similar Functional Languages|url=http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora202.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=(Scheme) 17. Lazy Evaluation|url=http://www.shido.info/lisp/scheme_lazy_e.html|access-date=30 April 2020}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref name="caml.inria.fr" /> || {{Yes}}<ref>{{cite web|title=Records - Revised<sup>6</sup> Report on the Algorithmic Language Scheme|url=http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib.html|access-date=11 May 2020}}</ref> || {{Partial
|-
| [[Racket (programming language)|Racket]] || {{No}} || {{
|-
| [[Clojure]] || {{No}}<ref>{{cite web|title=Clojure Functional Programing|url=http://clojure.org/functional_programming}}</ref> || {{Yes}}<ref>{{cite web|title=Clojure - lazy|url=http://clojure.org/lazy|access-date=27 November 2013}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref>{{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}}</ref> || {{Yes}}<ref>{{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}}</ref> || {{Yes}}<ref name="clojure-contrib">{{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}}</ref> || {{Yes}}<ref name=clojure.org>{{cite web|title=clojure: functional programming overview|url=http://clojure.org/functional_programming|access-date=26 November 2013}}</ref> || {{
|-
| [[Standard ML]] || {{No}}<ref name=cl.cam.ac.uk>{{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}}</ref> || {{No}}<ref>{{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}}</ref><ref>{{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}}</ref> || style="background:#8CF; text-align:center"|Static<ref>[[Wikibooks:Standard ML Programming/Types]]</ref> || {{Yes}} || {{Yes}}|| {{Yes}}<ref name="courses">{{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}}</ref> || {{No}} || {{Yes}} || 1983
|-
| [[OCaml]] || {{No}}<ref name=ocaml-functional>{{cite web|title=Functional Programming – OCaml|url=http://ocaml.org/learn/tutorials/functional_programming.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref name=ocaml-functional /> || style="background:#8CF; text-align:center"|Static<ref>{{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}}</ref> || {{Yes}}<ref>{{cite web|title=Type and exception definitions|url=http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual016.html}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#DataTypes| title=Learn OCaml - Data Types}}</ref> || {{Yes}}<ref>{{cite web|url=http://ocaml.org/learn/description.html#Imperativefeatures | title=Learn OCaml - Imperative Features}}</ref> || {{Partial
|-
| [[F Sharp (programming language)|F#]] || {{No}}<ref>{{cite web | url=http://fsharpforfunandprofit.com/learning-fsharp/| access-date=6 December 2013 | title=Learning F#}}</ref>|| {{Yes}}<ref name="msdn">{{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}}</ref> || style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=About F#|url=http://fsharp.org/about/index.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|title=Structures - F#|url=https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/structures|access-date=11 May 2020}}</ref> || {{Yes}}<ref>{{cite web|title=Discriminated Unions|date=15 September 2021 |url=https://msdn.microsoft.com/en-us/library/dd233226.aspx}}</ref> || {{Yes}}<ref name=f-sharp-lang-spec>{{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}}</ref> || {{No}} || {{Yes}} || 2005
|-
| [[
|-
| [[Scala (programming language)|Scala]] || {{No}}<ref name=scala-lang.org.archives.files.ScalaOverview>{{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}}</ref> || {{Yes}}<ref name=scala-lang.org.files.ScalaExample>{{cite web|title=Scala by Example|url=http://www.scala-lang.org/docu/files/ScalaByExample.pdf|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="scala-lang.org.archives.files.ScalaOverview" /> || {{Yes}}<ref name="scala-lang.org/files/archive">{{cite web|title=Scala Reference|url=http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="scala-lang.org/files/archive" /> || {{Yes}}<ref name=scala-lang.org.collections.overview>{{cite web|title=Mutable and Immutable Collections|url=http://docs.scala-lang.org/overviews/collections/overview.html|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{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}}</ref> || {{Yes}} || 2004
|-
| [[JavaScript]] || {{No}}<ref>[[List of multi-paradigm programming languages#Language overview]]</ref>{{unreliable source?|date=March 2015}} || {{Partial|Extension}}
|-
| [[Clean (programming language)|Clean]] || {{Yes}}<ref name="clean-faq">{{cite web | url=http://clean.cs.ru.nl/FAQ | title=FAQ - Clean}}</ref> || {{Yes}}, with optional strictness annotations<ref name="clean-report">{{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}}</ref> || style="background:#99F; text-align:center"|Static with [[Uniqueness type|uniqueness]]/optionally dynamic<ref name="clean-wiki">{{cite web | url=http://clean.cs.ru.nl/Clean | title=Clean}}</ref> || {{Yes}}<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}}, except for unique types<ref name="clean-report"/> || {{Yes}}<ref name="clean-report"/> || {{Yes}} || 1987
|-
| [[Miranda (programming language)|Miranda]] || {{Yes}}<ref name=miranda.org.uk>{{cite web | url=http://miranda.org.uk/ | title=Miranda Official Website}}</ref> || {{Yes2}}Default<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Lazy | title=An Overview of Miranda}}</ref> || style="background:#8CF; text-align:center"|Static<ref name=miranda.org.uk/> || {{Yes}}<ref name="http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract">{{cite web | url=http://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html#Abstract | title=An Overview of Miranda}}</ref> || {{Yes}}<ref name="miranda.org.uk" /> || {{
|-
| [[SASL (programming language)|SASL]] || {{Yes}}<ref>Turner, D.A. "An Implementation of SASL". University of St. Andrews, Department of Computer Science Technical Report. TR/75/4.</ref> || {{
|-
| [[Elixir (programming language)|Elixir]] || {{No}} || {{Partial
|-
| [[Erlang (programming language)|Erlang]] || {{No}} || {{No}}<ref name=erlang.org>{{cite web | url=http://www.erlang.org/doc/reference_manual/expressions.html#id76539| access-date=27 November 2013 | title=Erlang Reference Manual}}</ref> || style="background:#FC6; text-align:center"|Dynamic || {{Yes}}<ref>{{cite web | url=http://www.erlang.org/eeps/eep-0029.html | title=Erlang Programming Language - Abstract Patterns}}</ref> || {{No}} || {{Yes}}<ref name=stackoverflow.com>{{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?}}</ref> || {{Dunno}} ||
|-
| [[Elm (programming language)|Elm]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=elm-lang.org.blog.interactiveProgramming>{{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 }}</ref> || {{dunno}} || {{Yes}}<ref name=elm-lang.org.learn.syntax>{{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 }}</ref> || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2012
|-
| [[Futhark (programming language)|Futhark]] || {{Yes}} || {{No}} || style="background:#8CF; text-align:center"|Static<ref name=futhark-lang.org.docs.inference>{{cite web | url=https://futhark.readthedocs.io/en/latest/language-reference.html#type-inference | access-date=24 July 2023 | title=Type Inference}}</ref> || {{Yes}} || {{Yes}} || {{Yes}}<ref name=elm-lang.org.blog.interactiveProgramming /> || {{No}} || {{Yes}} || 2014
|-
| [[Python (programming language)|Python]] || {{No}}<ref>{{cite web | url=https://docs.python.org/3/howto/functional.html | title=Functional Programming in Python}}</ref> || {{Partial
|-
| [[Idris (programming language)|Idris]] || {{Yes}}<ref name=idris-lang.org>{{cite web|title=Idris Overview|url=http://www.idris-lang.org/|access-date=6 December 2013}}</ref> || {{Yes}}<ref name="idris-lang.org" /> || style="background:#8CF; text-align:center"|Static<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}}<ref name="idris-lang.org" /> || {{Yes}} || 2007
|-
| [[Nix (package manager)|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 (programming language)|Kotlin]]
|{{No}}
|{{Partial
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
Line 54 ⟶ 66:
|{{Yes}}
|{{No}}
|{{Yes}}
| 2011
|-
|[[Swift (programming language)|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 (programming language)|Julia]]
Line 62 ⟶ 87:
|{{No}}
|{{Partial}}<ref name=julia-typing/>
|{{Dunno
|{{Yes}}
| 2012
|-
|[[PureScript]]
Line 72 ⟶ 99:
|{{Yes}}
|{{Yes}}
|{{Yes}}
| 2013
|-
|[[Rust (programming language)|Rust]]
|{{No}}
|{{Partial|Lazy iterators}}
|style="background:#8CF; text-align:center"|Static<ref>{{cite web |url=https://doc.rust-lang.org/book/ch03-02-data-types.html | title=The Rust Programming Language, Data Types}}</ref>
|{{Yes}}<ref name="rust-traits">{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=The Rust Programming Language, Traits}}</ref>
Line 81 ⟶ 110:
|{{Yes}}<ref>{{cite web | url=https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html | title=The Rust Programming Language, Variables and Mutability}}</ref>
|{{Yes}}, through traits<ref name="rust-traits"/>
|{{No}}
| 2010
|-
|[[Bosque (programming language)|Bosque]]
|{{No}}
|{{No}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
|{{Yes}}
|{{Yes}}
|{{Dunno}}
|{{Yes}}
|2019
|-
| [[D (programming language)|D]]
| {{Partial|Optional}}<ref>{{cite web|title=D pure functions|url=https://dlang.org/spec/function.html#pure-functions|access-date=3 February 2024}}</ref><ref>{{cite web|title=D safe functions|url=https://dlang.org/spec/function.html#safe-functions|access-date=3 February 2024}}</ref>
| {{Partial|Optional}}<ref>{{cite web|title=Laziness - Dlang Tour|url=https://tour.dlang.org/tour/en/basics/laziness|access-date=7 April 2020}}</ref>
| style="background:#8CF; text-align:center"|Static<ref>{{cite web|title=Type System|url=https://dlang.org/spec/type.html|access-date=7 April 2020}}</ref>
| {{dunno}}
| {{Yes}}
| {{Yes}}<ref>{{cite web|title=Immutable - Dlang Tour|url=https://tour.dlang.org/tour/en/basics/immutability|access-date=7 April 2020}}</ref>
| {{No}}
| {{Yes}}<ref>{{cite web|title=Garbage Collection|url=https://dlang.org/spec/garbage.html|access-date=7 April 2020}}</ref>
| 2001
|-
| [[Gleam (programming language)|Gleam]] || {{No}}<ref name = Gleam>{{cite web | url=https://gleam.run/frequently-asked-questions/#will-gleam-have-type-classes | title=Frequently asked questions – Gleam }}</ref> || {{Partial|Experimental external libraries}} || style="background:#8CF; text-align:center"|Static || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 2019
|}
|