Wikiwand AI

Comparison of functional programming languages

From Wikipedia, the free encyclopedia

The table shows a comparison of functional programming languages which compares various features and designs of different functional programming languages.

More information Name, Pure ...
NamePureLazy evaluationTypingAbstract data typesAlgebraic data typesData is immutableType classesGarbage collectionFirst appeared
Common LispNo[1]Simulated with thunks[2]Dynamic[3]Yes[4]Extension[5]No[6]?Yes1984
SchemeNo[7]Yes[8]Dynamic[7]Yes[9]Simulated with thunks[10]No[11]NoYes1975
RacketNoDefault in Lazy Racket[12]Strong, Dynamic, statically typed with gradual typing in Typed Racket[13]Yes[14]Yes, with Algebraic Racket[15]Partial[16]NoYes1995
ClojureNo[17]Yes[18]Dynamic[19]Yes[20]Yes[21]Yes[22]NoYes2007
Standard MLNo[23]No[24][25]Static[26]YesYesYes[27]NoYes1983
OCamlNo[28]Yes[28]Static[29]Yes[30]Yes[31]Yes[32]Simulated with parametric modules[33]Yes1996
F#No[34]Yes[35]Static[36]Yes[37]Yes[38]Yes[39]NoYes2005
HaskellYes[40]Default[41]Static[42]Yes[40]Yes[43]Yes[44]Yes[45]Yes1990
ScalaNo[46]Yes[47]Static[46]Yes[48]Yes[48]Yes[49]Yes[50]Yes2004
JavaScriptNoExtension[51]Dynamic[52]Extension[53]Extension[54]Partial[55][56]?Yes1995
CleanYes[57]Yes, with optional strictness annotations[58]Static with uniqueness/optionally dynamic[59]Yes[58]Yes[58]Yes, except for unique types[58]Yes[58]Yes1987
MirandaYes[60]Default[61]Static[60]Yes[62]Yes[60]YesNoYes1986
SASLYes[63]YesDynamic[64]YesYesYesNoYes1972
ElixirNoStream module[65]DynamicYesNoYes?Yes2012
ErlangNoNo[66]DynamicYes[67]NoYes[68]?Yes1986
ElmYesNoStatic[69]?Yes[70]Yes[69]NoYes2012
FutharkYesNoStatic[71]YesYesYes[69]NoYes2014
PythonNo[72]Simulated with generatorsDynamic[73]Yes[74]NoPartial[75]?Yes1991
IdrisYes[76]Yes[76]Static[76]Yes[76]Yes[76]Yes[76]Yes[76]Yes2007
NixYes[77]Yes[77]Dynamic[77]NoYesYesNoYes2003
Wolfram Language No No Static Yes Yes Yes No Yes 1988
Kotlin No 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] ? Yes 2012
PureScript Yes No Static Yes Yes Yes Yes Yes 2013
Rust No Lazy iterators[82] and external libraries[83] Static[84] Yes[85] Yes[86] Yes[87] Yes, through traits[85] No 2010
Bosque No No Static Yes Yes Yes ? Yes 2019
D Optional[88][89] Optional[90] Static[91] ? Yes Yes[92] No Yes[93] 2001
GleamNo[94]Experimental external librariesStaticYesYesYesNoYes2019
Close

References

Related Articles

Timelines

Top Qs

Fact Checks