Language Comparison Table: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: added the REXX language. -- ~~~~) |
(added swift) |
||
Line 1,061: | Line 1,061: | ||
| |
| |
||
| |
| |
||
|- |
|||
! {{anchor|Swift|[[Swift]]}} |
|||
|[[imperative programming|imperative]], [[object-oriented]], [[reflective programming|reflective]], [[generic programming|generic]], [[functional programming|functional]] |
|||
|{{no}} |
|||
|strong |
|||
| |
|||
|inferred, optional explicit annotations |
|||
|nominative |
|||
|static |
|||
|by value |
|||
|{{partial|Reference counting}} |
|||
|Application |
|||
|Compatibility with [[Objective-C]] runtime |
|||
|- |
|- |
||
! {{anchor|Tcl|[[Tcl]]}} |
! {{anchor|Tcl|[[Tcl]]}} |
Revision as of 05:50, 3 June 2014
Language | Paradigm(s) | Standardized | Type strength | Type safety | Expression of types | Type compatibility | Type checking | Parameter Passing Methods Available | Garbage collection | Intended use | Design goals |
---|---|---|---|---|---|---|---|---|---|---|---|
ACL2 | functional | Yes | strong | unsafe | dynamic | Yes | Theorem proving | Be logically sound, mimic Common Lisp | |||
ActionScript | imperative, object-oriented,distributed | Yes, ECMA | strong | safe | static | Yes | Web design | ||||
Ada | concurrent, distributed, generic, imperative, object-oriented | Yes | strong | safe | explicit | nominative | static | by value, by reference (compiler chosen if not determined by the data type) | GC is allowed, but not mandated | Embedded, real-time, mission-critical, long-lived, and large scale systems | Reliability and maintenance, Programming as a human activity, Efficiency Language Reference Manual |
ALGOL 68 | concurrent, imperative | Yes, GOST 27974-88 | soft, weak, meek, firm and strong - depending on context. | safe | explicit | structural | static or dynamic (programmer chosen) | by value or by reference (programmer chosen) | Yes | Application | Completeness and clarity of design, Orthogonal design, Security, Efficiency (Static mode checking, Mode-independent parsing, Independent compilation, Loop optimization, Representations in minimal & larger character sets) |
AmbientTalk | concurrent | strong | safe | explicit | duck | dynamic | by value | Mobile ad hoc networks | |||
AutoHotkey | imperative | No | untyped | by value or by reference | No | End User Programming | simplicity, speed, stability | ||||
BASIC | procedural | Yes, ANSI, ISO | varies by dialect | varies by dialect | Education | Simplicity | |||||
C | imperative | Yes, ANSI C89, ISO C90/C99 | weak | unsafe | explicit | nominative | static | by value, by reference (through pointers) | Optional through external tools | System, Embedded | Low level access, Minimal constraint |
C# | imperative, object-oriented, generic, reflective, functional, event-driven | Yes, ECMA, ISO | strong | safe (unsafe allowed) | implicit | nominative | static, dynamic (for interop) | Yes | Application | Rapid application development | |
C++ | imperative, object-oriented, generic | Yes, ISO C++98/C++11 | strong | safe (unsafe allowed) | explicit, partially implicit | nominative, structural | static, dynamic | by value, by reference (through reference types) | Optional through external tools | Application, System | Abstraction, Efficiency, Compatibility |
Chapel | concurrent, generic, object-oriented, imperative, distributed, reflective | No, still under development, a preliminary language specification exists | strong | safe | explicit, partially inferred | nominative | static | by value, by reference | No | High Performance Computing | Programmer productivity (compared to C/Fortran), performance |
Clean | functional, generic | No | strong | implicit | static | Yes | General | Correctness, Modularity | |||
Clojure | functional, concurrent | strong | safe | dynamic, static | Yes | ||||||
COBOL | imperative, object-oriented | Yes, ANSI 68, 74, 85 (and subsequent revisions); ISO 2002, 201X | strong | safe | explicit | static | by value, by reference | No | Business and Financial Applications | Readability | |
ColdFusion | procedural, object-oriented | No | weak | implicit | dynamic | Web Development | Rapid Application Development, Ease of use | ||||
Common Lisp | imperative, functional, object-oriented | Yes | strong | safe | dynamic, static | Yes | General | Standardize Lisp | |||
D | imperative, object-oriented, generic | No | strong | safe | explicit, optional inferred | nominative, structural | static, dynamic | by value, by reference (through reference types) | Yes | Application, System | Compilability, Correctness, Efficiency |
Dao | object-oriented | strong | safe, unsafe allowed | implicit, explicit | static, dynamic | Yes | |||||
Dylan | imperative, object-oriented, functional, procedural | strong | safe | static, dynamic | Yes | ||||||
E | imperative, object-oriented, object-capability, communicating event loops | No
, still in development |
strong (runtime) | safe | optional explicit | duck | dynamic | by value | Yes | Secure collaboration, distributed systems, running untrusted applications, high-level "scripting" | Familiarity to C/Java/JS users; less error-prone concurrency & security |
eC | imperative, object-oriented, generic, reflective | No | weak | unsafe | explicit, partially implicit | nominative, complex conversions system | static, dynamic | according to data type, or explicitly by value, by reference | Reference counting | Applications, GUIs, System, Games | Elegance, Performance, Simplicity, Lightness, 99.9% C compatibility |
Eiffel | imperative, object-oriented, generic | Yes | strong | safe | nominative | static | Yes | Application | Correctness, Efficiency, Design by contract | ||
Ela | functional | No | strong | safe | implicit | duck | dynamic | by value | Yes | Application | |
Elm | functional, functional reactive programming, declarative, pattern matching | No | strong | safe | inferred, optional explicit annotations | static | immutable data structures, syntactically by value, time-varying with Signals | Yes | Web Development, GUIs, Applications, Games | Simple, Modular, Safe, Reactive | |
Elena | object-oriented | strong | safe | implicit | dynamic | Yes | |||||
Erlang | functional, concurrent, distributed, declarative - pattern matching, imperative | No | strong | safe | implicit | dynamic | immutable data structures, syntactically by value but safe sharing of compound data types | Yes | Telecom and distributed applications | Fault tolerance, Reliability - Nonstop Running, Hot Code Change, Safety, Concurrency, Distribution, Scalability | |
Factor | stack-oriented | No | safe | implicit | duck | dynamic | by reference | Yes | x | ||
Forth | imperative, stack-oriented | Yes, ANSI | none | n/a | n/a | n/a | n/a | No | Application, Embedded systems | Compact implementations, Low level access, Interactive programming | |
Fortran | imperative, procedural, object-oriented | Yes | strong | safe | nominative | static | No | Scientific and numeric applications | Runtime efficiency, Simple syntax | ||
Gambas | object-oriented | No | strong | safe | explicit | dynamic | by value, by reference | Application, Scripting | Rapid application development, Visual Basic alternative | ||
Go | concurrent | No
, language specification available |
strong | safe | explicit, optionally inferred | nominative; structural for interface types | static | by value | Yes | ||
Groovy | imperative, object-oriented, aspect-oriented | No | strong | safe | implicit | nominative | dynamic | Yes | Application | JVM compatibility | |
Haskell | functional, generic, lazy evaluation | Yes, Haskell 2010 Report, Haskell 98 Report | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | Yes | Application, Research | lazy evaluation, Teaching and research, completely formally described Report Preface | |
icon | procedural, structured, goal directed, string scanning, co-expressions | No | strong | Safe | implicit | nominative | dynamic | by value and safe reference depending if the type is mutable or immutable | Yes | Text analysis, text editing, document formatting, artificial intelligence, expert systems, rapid prototyping, symbolic mathematics, text generation, and data laundry | Facilitates ease of programming, short concise programs, automatic storage allocation and management, provide a rich base of basic data types and structures, and platform independence. Also see Unicon for the unified extended dialect of Icon. |
Io | object-oriented, prototype | No | strong | dynamic | Yes | ||||||
J | array programming, function-level programming, tacit | No | strong | safe | inferred | structural | dynamic | by value, by name, by address for memory mapped files (and, indirectly, for foreign languages) | Yes | Data processing, expressing concepts algorithms and architectures | Describe computers mathematically and concisely |
Java | imperative, object-oriented, generic, reflective | Yes, Java SE Specifications | strong | safe | explicit | nominative | static | by value | Yes | Application | Write once run anywhere |
JavaScript | imperative, object-oriented, functional, reflective | Yes, ECMAScript standard | weak | implicit | dynamic | by value | Yes | Client side web scripting | |||
Joy | functional, stack-oriented | No | strong | safe | dynamic | functional research | concatenative | ||||
LFE | functional, concurrent, distributed, declarative - pattern matching, imperative | No | strong | safe | implicit | dynamic | immutable data structures, syntactically by value but safe sharing of compound data types | Yes | Telecom and distributed applications | Fault tolerance, Reliability - Nonstop Running, Hot Code Change, Safety, Concurrency, Distribution, Scalability | |
Lisp | functional, reflective; others vary by dialect | No | strong | dynamic | Yes | General | Simple notation for Lambda calculus, Homoiconicity | ||||
Logo | procedural, functional | No | strong | safe | implicit | structural | dynamic | Yes | Education | Simple syntax, Turtle graphics, Interactive programming | |
Lua | procedural, imperative, reflective | No | strong | safe | implicit | dynamic | Yes | Host-driven Scripting | Small, embedded, configuration. | ||
Lucid | dataflow, functional | No | strong | safe | dynamic | stream processing | dataflow | ||||
Mathematica | functional, procedural | No | strong | dynamic | Yes | Numeric and symbolic computation, visualization | |||||
MATLAB | procedural, imperative, array programming | No, however the language is also implemented in Octave and FreeMat | strong | unsafe | dynamic | by value | Yes | Numeric computation and visualization | At the beginning designed as interpreter for easy use of fortran libraries, nowadays high performance numerical analysis and visualization | ||
MAXScript | imperative, object-oriented, procedural | No | strong | safe | implicit | dynamic | by value, by reference | 3D Art Tools, Scripting | Simplicity, Accessibilty | ||
Modula-3 | imperative, object-oriented, procedural, generic | No | strong | safe (unsafe allowed) | explicit | structural | static | by value, by reference | Yes | Application, Systems | Simple, Object oriented |
MUMPS | procedural | Yes, ISO | untyped | not applicable | by value, by reference | Yes | Built-in Persistent Storage | ||||
Nial | functional, array programming | No | strong | dynamic | Data processing | ||||||
Nimrod | procedural, functional, generic | No | strong | safe | static | Yes | General, Application, Systems | Efficient, Expressive, Elegant in that order. | |||
Oberon-2 | procedural, imperative, object-oriented | No | strong | safe | explicit | structural | static | by value, by reference | Yes | Teaching, System | Simplicity |
Objeck | object-oriented,functional | No | strong | safe | explicit | nominative | static | by value | Yes | General, Education | Minimalist, Cross-Platform, Modular |
Object Pascal (Delphi) | imperative, object-oriented, generic | No | strong | safe (unsafe allowed) | explicit | nominative | static, dynamic | by reference, by value | some types | Application, System | Readability, Rapid application development, Modularity |
Objective-C | imperative, object-oriented, reflective | No | weak | explicit | static | by value | Yes (as of 2.0) | Application | Smalltalk like, Component based code reuse, C compatibility | ||
OCaml | object-oriented, functional, imperative, generic | No, the manual includes language specification | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | by value | Yes | Application | Efficiency, Robustness, Correctness |
Oz | logic programming, functional, imperative, object-oriented, concurrent | No | strong | safe | implicit | structural | dynamic | by reference (though often immutable) | Yes | Application, Education, Distribution | |
PARI/GP | imperative, procedural | No | weak | unsafe | implicit | nominal | dynamic | by value, by reference | Yes | Mathematics, especially number theory | |
Pascal | imperative, procedural | Yes, Extended Pascal standardized under ISO | strong | safe | explicit | static (some dialects also dynamic) | by reference, by value | No | General, Application, Education, System | Readability, Discipline, Modularity | |
Perl | imperative, procedural, reflective, functional, object-oriented, generic | No | weak | implicit | dynamic, static | by reference | Reference counting | Text processing, Scripting | Terseness, Expressiveness | ||
Perl 6 | imperative, procedural, reflective, functional, object-oriented, generic, lazy evaluation, multiple dispatch, metaprogramming | Yes, Perl 6 Synopses | strong | safe, unsafe | optional explicit | nominal (duck and structural available via constraints, patterns, generics, and gradual typing) | dynamic, static | by value, by reference | Yes | Application, text processing, scripting | Expressiveness, generality |
Pike | imperative, procedural, functional, object-oriented, reflective, event-driven | No | strong | safe | explicit | structural | dynamic, static | by value, by reference | Yes | Application, scripting | optimized execution, efficient networking |
PHP | imperative, object-oriented, reflective | No | weak | dynamic | by value, by reference | Yes | Web Application, CLI | Robustness and Simplicity | |||
Pop11 | imperative, object-oriented, functional | No | strong | safe | implicit | dynamic | Yes | Application, Education | |||
Prolog | logic programming | Yes, ISO | strong | dynamic | Yes | Problem solving, Artificial intelligence | declarative | ||||
Pure | dynamic, functional | strong | structural | dynamic | Yes | ||||||
Python | imperative, object-oriented, functional, aspect-oriented, reflective | No, language reference included with each version's documentation | strong | safe | implicit | dynamic | by value (Call by object reference) | Yes | Application, Education, Scripting | Simplicity, Readability, Expressiveness, Modularity | |
Racket | functional, imperative, object-oriented, reflective | No | strong | safe | implicit or explicit (see Typed Racket) | dynamic or static | by value | Yes | General | Extensibility, Simplicity, Modularity | |
RapidQ | imperative, component-oriented programming, event-driven | No | strong (none for Variant type) | safe | static | by reference, by value | Application | Rapid application development, Simplicity, BASIC compatibility | |||
R | functional, imperative, reflective, array | No | strong | safe | implicit | Duck, structural | dynamic | value by need, by name (programmer chosen) | Yes | Statistics, Numerical computation, Visualization, Education | Expressiveness, interactive manipulation and analysis of datasets |
REXX | dynamic, procedural, functional | Yes, there is a standard, but some implementations don't adhere to it | strong | safe | inferred | nominal | dynamic | by value | garbage collection is allowed, but not mandated | general, application, algorithms, scripting, host/sub-system scripting/interfacing, data/text processing, programming as a human activity | designed to make programming easier, to foster high quality programs by making writing them as simple and enjoyable as possible, designing each part of the language for people to use is more important than providing easy implementation |
Ruby | imperative, object-oriented, functional, reflective | Yes, JIS X 3017 (2011), ISO/IEC 30170 (2012) | strong | implicit | dynamic | by value (Call by object reference) | Yes | Application, Scripting | Expressiveness, Readability | ||
Scala | object-oriented, functional, generic | No | strong | safe | partially implicit | nominative, structural | static | by value, by name | Yes | General, Education | concise, type-safe, integrate object-oriented and functional paradigms, extensible |
Scheme | functional | Yes, R5RS, R6RS | strong | safe | implicit | dynamic (latent) | by value | Yes | General, Education | Minimalistic, Lexical Scoping | |
Seed7 | extensible, object-oriented, imperative, structured, generic, reflective | No | strong | safe | explicit | nominative | static | by value, by reference, by name | Yes (no garbage collection process that stops the world) | General, Application, System | Extensibility, Portability, Reliability, Efficiency, Elegance |
Sidef | weak | implicit | dynamic | by value, by reference | No | ||||||
Slate | object-oriented, imperative, functional, reflective, prototype, multi-dispatch | No | strong | safe | implicit, optional | structural (aka duck) | dynamic | by reference | Yes | Application, Embedded, Scripting | Uniformity, Pure object-oriented, expressiveness, readability |
Smalltalk | object-oriented, concurrent, event-driven, imperative, declarative | Yes, ANSI | strong | safe | implicit | protocol (aka duck) | dynamic | by value (Call by object reference) | Yes | Application, Education | Uniformity, Pure object oriented |
SPARK | concurrent, imperative, object-oriented | No, Language definition is proprietary - main copyright is held by [Altran-Praxis]. | strong | safe | explicit | nominative | static | by value, by reference | Allowed | High integrity applications | Logically sound, simple formal definition, expressive power, security, applications verifiable and have bounded space and time. |
Standard ML | functional, imperative, generic | Yes, SML '97 | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | by value | Yes | ||
Swift | imperative, object-oriented, reflective, generic, functional | No | strong | inferred, optional explicit annotations | nominative | static | by value | Template:Partial | Application | Compatibility with Objective-C runtime | |
Tcl | imperative, procedural, event-driven, object-oriented (native from Tcl 8.6 or via extensions before that) | No | weak | safe | implicit | duck | dynamic | by value (also by name and by reference through passing of variable names and upvar command)
|
Only of unnamed entities, e.g., values | Embedded, Application, Scripting | Extend, Embed and Integrate |
Trith | functional, stack-oriented, concatenative | No | strong | safe | implicit | duck | dynamic | by value | Yes | Embedded, Application, Scripting, Education | Simplicity, Expressiveness, Terseness, Linked Data |
Unicon | procedural, structured, goal directed, string scanning, co-expressions, object-oriented | No | strong | Safe | implicit | nominative | dynamic | by value and safe reference depending if the type is mutable or immutable | Yes | Text analysis, text editing, document formatting, artificial intelligence, expert systems, rapid prototyping, symbolic mathematics, text generation, and data laundry. | Facilitates ease of programming, short concise programs, automatic storage allocation and management, provide a rich base of basic data types and structures, and platform independence . Unicon provides additional capabilities over Icon integrating object oriented capabilities, messaging and external communications, event monitoring, and more in a consistent framework. |
V | functional, stack-oriented, concatenative | No | strong | safe | dynamic | functional research | concatenative | ||||
Visual Basic | component-oriented programming, event-driven | No | strong | safe | nominative | static | by reference, by value (explicit) | Yes | Application | Rapid application development, Simplicity | |
Visual Basic .NET | imperative, object-oriented, generic, reflective, functional, event-driven | No | strong | safe | implicit | nominative | static, dynamic (for interop) | by reference, by value (both explicit) | Yes | Application | Rapid application development |
Windows PowerShell | imperative, object-oriented, functional, pipeline, reflective | No | strong | safe | implicit | dynamic | Scripting | ||||
Language | Paradigm(s) | Standardized | Type strength | Type safety | Expression of types | Type compatibility | Type checking | Parameter Passing Methods Available | Garbage collection | Intended use | Design goals |