User:Draychev/programming languages
Appearance
name | license | created | paradigm | influenced-by | typing | GC | tail call | pointers to functions | encapsulation | polymorphism | inheritance | currying | monads |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
C | GPLv3 | 1972 | imperative (procedural), structured | B (BCPL, CPL), ALGOL 68,Assembly, PL/I, Fortran | Static, weak, manifest, nominal | no | no | ptf | encapsulation | polymorphism | inheritance | implementable | monads |
C++ | GPLv3 | 1983 | procedural, functional, object-oriented, generic | no | maybe | ptf | yes | yes | yes | implementable | monads | ||
Java | GNU General Public License, Java Community Process | 1995 | object-oriented (class-based), structured, imperative, generic, reflective, concurrent | yes | no | via interface? | yes | yes | yes | yes in Java 8 | monads | ||
Scala | 3-clause BSD license | 2004 | functional, object-oriented, imperative, concurrent | yes | no | ptf | yes | polymorphism | inheritance | currying | monads | ||
Clojure | Eclipse Public License | 2007 | functional | Common Lisp, Erlang, Haskell, ML, Prolog, Scheme, Java, Ruby | dynamic, strong | yes | no | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Kotlin | Apache 2 | 2011 | Object-oriented, procedural | Java, Scala, Groovy, C#, Gosu | static | yes | no | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Ruby | Ruby, GPLv2 or 2-clause BSD license | 1995 | object-oriented, imperative, functional, reflective | yes | no | ptf | encapsulation | polymorphism | inheritance | currying | monads | ||
JavaScript | license | 1995 | scripting, object-oriented (prototype-based), imperative, functional | Lua, Scheme, Perl, Self, Java, C, Python, AWK, HyperTalk | dynamic, duck | yes | no (maybe in ES6) | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Python | Python Software Foundation License | 1991 | object-oriented, imperative, functional, procedural, reflective | ABC, ALGOL 68, C, C++, Dylan, Haskell, Icon, Java, Lisp, Modula-3, Perl | duck, dynamic, strong, gradual (as of Python 3.5) | yes | no | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Go | BSD-style + patent grant | 2009 | compiled, concurrent, imperative, structured | Alef, APL, BCPL, C, CSP, Limbo, Modula, Newsqueak, Oberon, occam, Pascal, Python, Smalltalk | strong, static, inferred, structural | yes | no | yes | encapsulation | polymorphism | inheritance | currying | monads |
Rust | license | 2010 | compiled, concurrent, functional, imperative, structured | no | no | ptf | encapsulation | polymorphism | inheritance | currying | monads | ||
Erlang | Apache License 2.0 | 1986 | concurrent, functional | Prolog, Smalltalk, PLEX | dynamic, strong | yes | yes | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Haskell | New BSD License (GHC) | 1990 | functional, lazy/non-strict, modular | Clean, FP, Gofer, Hope, Id, ISWIM, KRC, Lisp, Miranda, ML and Standard ML, Orwell, SASL, Scheme, SISAL, Agda, Bluespec,[1] C++11/Concepts, C#/LINQ, CAL,[citation needed] Cayenne,[2] Clean, Clojure, CoffeeScript, Curry, Elm, Epigram, Escher, F#, Frege, Hack, Idris, Isabelle, Java/Generics, LiveScript, Mercury, Omega, Perl 6, Python, Rust, Scala, Swift, Timber, Visual Basic 9.0 | static, strong, inferred | yes | yes | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Racket | LGPL | 1994 | functional, procedural, modular, object-oriented, logic, reflective, meta | Scheme, Eiffel | Dynamic, strong, static | yes | yes | ptf | encapsulation | polymorphism | inheritance | currying | monads |
Perl, Perl 6 | GNU General Public License or Artistic License | 1987 | functional, imperative, object-oriented (class-based), reflective, procedural, event-driven, generic | dynamic, static, gradual | yes | no | ptf | encapsulation | polymorphism | inheritance | currying | monads | |
Swift | 2014 | Multi-paradigm (protocol-oriented programming, object-oriented, functional, imperative, block structured) | C#, CLU, D, Haskell, Objective-C, Python, Rust, Ruby | Static, strong, inferred | no | no | ptf | encapsulation | polymorphism | inheritance | implementable | monads | |
Objective-C | 1983 | Reflective, class-based object-oriented | C, Smalltalk | static, dynamic, weak | no | no | ptf | encapsulation | polymorphism | inheritance | currying | monads | |
Pascal | depends on vendor | 1970 | Imperative, structured | Static, strong, safe | no | no | ptf | encapsulation | polymorphism | inheritance | currying | monads | |
Wolfram | Proprietary | 1988 | functional languages | term-rewriting, functional, procedural, array | no maybe | no maybe | ptf | encapsulation | polymorphism | inheritance | currying | monads |
- ^ Hudak et al. 2007, p. 12-38,43.
- ^ Hudak et al. 2007, pp. 12-45–46.