Comparison of functional programming languages: Difference between revisions

Content deleted Content added
Swift uses Automatic Reference Counting (ARC), which differs from tracing garbage collection but is designed to provide similar benefits with better performance.
OAbot (talk | contribs)
m Open access bot: url-access updated in citation with #oabot.
 
(22 intermediate revisions by 9 users not shown)
Line 1:
{{Short description|none}}
{{Orphan|date=July 2016}}
 
The table shows a '''comparison of functional programming languages''' which compares various features and designs of different [[functional programming]] languages.
Line 8 ⟶ 7:
! Name !! [[Purely functional programming|Pure]] !! [[Lazy evaluation]] !! [[Type system|Typing]] !! [[Abstract data type]]s !! [[Algebraic data type]]s !! [[Immutable object|Data is immutable]] !! [[Type class]]es !! Garbage collection || First appeared
|-
| [[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}}, simulated|Simulated with [[thunk]]s<ref name=common-lisp>{{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}}</ref>}} || style="background:#FC6; text-align:center"|Dynamic<ref>{{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}}</ref>|| {{Yes}}<ref name=cs.sfu.ca>{{cite web|title=LISP Tutorial Lecture 3: Data Abstraction|url=http://www.cs.sfu.ca/CourseCentral/310/pwfong/Lisp/3/tutorial3.html}}</ref> || {{Partial|Extension}}, with extension<ref>{{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}}</ref> || {{No}}<ref>{{cite web|title=Mutable Data Structures|url=http://caml.inria.fr/pub/docs/fpcl/fpcl-07.pdf|access-date=28 November 2013}}</ref> || {{Dunno|Not applicable}} || {{Yes}} || {{dunno}}1984
|-
| [[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}}, simulated|Simulated with thunks}}<ref>{{cite web|title=Algebraic Data Types in Scheme|url=https://pavpanchekha.com/blog/adtscm.html|access-date=11 May 2020}}</ref> || {{No}}<ref>{{cite web|title=Programs with State|url=http://www.cs.uni.edu/~wallingf/teaching/cs3540/sessions/session26.html|access-date=29 November 2013}}</ref>|| {{Dunno|Not applicableNo}} || {{Yes}} || {{dunno}}1975
|-
| [[Racket (programming language)|Racket]] || {{No}} || {{YesYes2}}, defaultDefault in Lazy Racket<ref name="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}}</ref> || style="background:#99F; text-align:center"|Dynamic by default, [[gradual typing|gradual]] with Typed Racket<ref name="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}}</ref> || {{Yes}}<ref name="racket struct">{{cite web|url=https://docs.racket-lang.org/guide/define-struct.html|title=The Racket Guide: Programmer-Defined Datatypes|access-date=8 February 2020}}</ref> || {{Yes2}}Yes, with Algebraic Racket<ref name="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}}</ref> || {{partialPartial}}<ref name="racket immutability">{{Cite web|url=https://beautifulracket.com/explainer/data-structures.html|title=Beautiful Racket: Data Structures|access-date=8 February 2020|first=Matthew|last=Buttrick}}</ref> || {{No}} || {{Yes}} || 1995
|-
| [[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> || {{Dunno|Not applicableNo}} || {{Yes}} || 2007
|-
| [[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}} || {{dunno}}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}}, simulated|Simulated with parametric modules}}<ref>{{cite web|title=Implementing Type-Classes as OCaml Modules|url=https://accu.org/index.php/journals/2445|access-date=11 May 2020}}</ref> || {{Yes}} || {{dunno}}1996
|-
| [[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}} || {{dunno}}2005
|-
| [[Haskell]] || {{Yes}}<ref name=haskell.org>{{cite web|title=Haskell Wiki|url=http://www.haskell.org|access-date=26 November 2013}}</ref> || {{Yes2}}Default<ref name=haskell.org.wiki.lazyEval>{{cite web|title=Haskell Wiki Lazy Evaluation|url=http://www.haskell.org/haskellwiki/Lazy_evaluation|access-date=26 November 2013}}</ref> || style="background:#8CF; text-align:center"|Static<ref name="haskell.org.wiki.typing">{{cite web|title=Haskell Typing|url=http://www.haskell.org/haskellwiki/Typing|publisher=HaskellWiki|access-date=26 November 2013}}</ref> || {{Yes}}<ref name="haskell.org" /> || {{Yes}}<ref name=haskell.org.wiki.abstractDataType>{{cite web|title=Haskell Wiki Abstract Data Type|url=http://www.haskell.org/haskellwiki/Abstract_data_type|access-date=26 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/haskellwiki/Functional_programming#Immutable_data|title=Haskell Wiki|access-date=27 November 2013}}</ref> || {{Yes}}<ref>{{cite web|url=http://www.haskell.org/tutorial/classes.html|title=Type Classes and Overloading}}</ref> || {{Yes}} || 1990
|-
| [[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}} || {{dunno}}2004
|-
| [[JavaScript]] || {{No}}<ref>[[List of multi-paradigm programming languages#Language overview]]</ref>{{unreliable source?|date=March 2015}} || {{Partial|Extension}}, with extension<ref>{{cite web|last=Tao|first=Dan|title=Lazy.js|url=http://danieltao.com/lazy.js/|work=Dan Tao|access-date=26 November 2013}}</ref> || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web|title=JavaScript Overview|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/JavaScript_Overview|work=Mozilla Developer Network|publisher=Mozilla Developer Network|access-date=26 November 2013}}</ref> || {{Partial|Extension}}, with extension<ref>{{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}}</ref> || {{Partial|Extension}}, with extension<ref>{{cite web|last=Faubion|first=Nathan|title=ADT|url=https://npmjs.org/package/adt|work=NPM|publisher=Joyent, nodejitsu|access-date=26 November 2013}}</ref> || {{partialPartial}}<ref>[[Immutable object#JavaScript]]</ref><ref>{{cite web|title=Javascript Data structures|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures|work=Mozilla Developer Network|publisher=Mozilla Developer Network|access-date=26 November 2013}}</ref> || {{Dunno|Not applicable}} || {{Yes}} || 1995
|-
| [[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
Line 32 ⟶ 31:
| [[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" /> || {{Yes}} || {{No}} || {{Yes}} || 1986
|-
| [[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> || {{Yes}} || style="background:#FC6; text-align:center"|Dynamic<ref name="From Semantics to Computer Science">{{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}}</ref> || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || 1972
|-
| [[Elixir (programming language)|Elixir]] || {{No}} || {{Partial}}, with the |Stream module<ref name="https://hexdocs.pm/elixir/Stream.html">{{cite web | url=https://hexdocs.pm/elixir/Stream.html | title=Stream - Elixir vv1.117.6.02}} </ref>}} || style="background:#FC6; text-align:center"|Dynamic || {{Yes}} || {{No}} || {{Yes}} || {{Dunno|Not applicable}} || {{Yes}} || {{dunno}}2012
|-
| [[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|Not applicable}} || {{Yes}} || {{dunno}}1986
|-
| [[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}} || {{dunno}}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}}, simulated|Simulated with generators}} || style="background:#FC6; text-align:center"|Dynamic<ref>{{cite web | url=https://docs.python.org/3/faq/general.html#what-is-python | title=What is Python?}}</ref> || {{Yes}}<ref>{{cite web | url=http://www.cs.utexas.edu/~byoung/cs313e/slides5-adt.pdf | title=Abstract Data Types and Stacks}}</ref> || {{No}} || {{partialPartial}}<ref>[[Immutable object#Python]]</ref> || {{Dunno|Not applicable}} || {{Yes}} || 1991
|-
| [[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}} || {{dunno}}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]]
Line 61 ⟶ 60:
|[[Kotlin (programming language)|Kotlin]]
|{{No}}
|{{Partial}}, lazy|Lazy delegation<ref>{{cite web | url=https://kotlinlang.org/docs/reference/delegated-properties.html | title=Kotlin - Delegated Properties}}</ref> and Sequence<ref>{{cite web | url=https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/ | title=kotlin-stdlib - kotlin.sequences}}</ref>}}
|style="background:#8CF; text-align:center"|Static
|{{Yes}}
Line 78 ⟶ 77:
|{{Yes}}
|{{No}}
|{{{{maybePartial|Swift uses [[Automatic Reference Counting (ARC)]], which differs from [[tracing garbage collection]] but is designed to provide similar benefits with better performance.}}
| 2014
|-
Line 88 ⟶ 87:
|{{No}}
|{{Partial}}<ref name=julia-typing/>
|{{Dunno|Not applicable}}
|{{Yes}}
| 2012
Line 105 ⟶ 104:
|[[Rust (programming language)|Rust]]
|{{No}}
|{{Partial|Lazy iterators}}, iterators are lazy,<ref>{{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 }}</ref> and external libraries exist<ref>{{cite web | url=https://crates.io/crates/lazy | title=Rust crate 'lazy'}} </ref>
|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 121 ⟶ 120:
|{{Yes}}
|{{Yes}}
|{{UnknownDunno}}
|{{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
|}