Language Comparison Table: Difference between revisions
Content added Content deleted
m (→External resources: WP link) |
(Added garbage collected colum, included the ones I knew off the top of my head, left ones I was unsure about blank, please fill them in if you know) |
||
Line 10: | Line 10: | ||
! [[Type checking]] |
! [[Type checking]] |
||
! [[Parameter Passing]] Methods Available |
! [[Parameter Passing]] Methods Available |
||
! [[Garbage Collection|Garbage Collected]] |
|||
! Intended use |
! Intended use |
||
! Design goals |
! Design goals |
||
Line 22: | Line 23: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Web design |
| Web design |
||
| |
| |
||
Line 34: | Line 36: | ||
| static |
| static |
||
| by value, by reference (compiler chosen if not determined by the data type) |
| by value, by reference (compiler chosen if not determined by the data type) |
||
| {{no}} (implementation optional) |
|||
| Embedded, real-time, mission-critical, long-lived, and large scale systems |
| Embedded, real-time, mission-critical, long-lived, and large scale systems |
||
| Program reliability and maintenance, Programming as a human activity, Efficiency [http://www.adaic.com/standards/05rm/html/RM-0-3.html Language Reference Manual] |
| Program reliability and maintenance, Programming as a human activity, Efficiency [http://www.adaic.com/standards/05rm/html/RM-0-3.html Language Reference Manual] |
||
Line 46: | Line 49: | ||
| static or dynamic |
| static or dynamic |
||
| |
| |
||
| {{no}} |
|||
| Application |
| 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) |
| 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) |
||
Line 58: | Line 62: | ||
| |
| |
||
| |
| |
||
| {{yes}} |
|||
| Education |
| Education |
||
| Simplicity |
| Simplicity |
||
Line 70: | Line 75: | ||
| static |
| static |
||
| by value, by reference (through reference types) |
| by value, by reference (through reference types) |
||
| {{no}} |
|||
| System, Embedded |
| System, Embedded |
||
| Low level access, Minimal constraint |
| Low level access, Minimal constraint |
||
Line 82: | Line 88: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Rapid application development |
| Rapid application development |
||
Line 94: | Line 101: | ||
| static, dynamic |
| static, dynamic |
||
| by value, by reference (through reference types) |
| by value, by reference (through reference types) |
||
| {{no}} |
|||
| Application, System |
| Application, System |
||
| Abstraction, Efficiency, Compatibility |
| Abstraction, Efficiency, Compatibility |
||
Line 106: | Line 114: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| General |
| General |
||
| Correctness, Modularity |
| Correctness, Modularity |
||
Line 118: | Line 127: | ||
| static |
| static |
||
| |
| |
||
| {{no}} |
|||
| Business and Financial Applications |
| Business and Financial Applications |
||
| Readability |
| Readability |
||
Line 129: | Line 139: | ||
| |
| |
||
| dynamic |
| dynamic |
||
⚫ | |||
| |
| |
||
| Web Development |
| Web Development |
||
Line 142: | Line 153: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| General |
| General |
||
| Standardize [[Lisp]] |
| Standardize [[Lisp]] |
||
Line 154: | Line 166: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Application, System |
| Application, System |
||
| Compilability, Correctness, Efficiency |
| Compilability, Correctness, Efficiency |
||
Line 166: | Line 179: | ||
| <!-- Check -->dynamic |
| <!-- Check -->dynamic |
||
| <!-- Passing -->by value |
| <!-- Passing -->by value |
||
| <!-- GC -->{{yes}} |
|||
| <!-- Uses -->Secure collaboration, distributed systems, running untrusted applications, high-level “scripting” |
| <!-- Uses -->Secure collaboration, distributed systems, running untrusted applications, high-level “scripting” |
||
| <!-- Design goals -->Familiarity to [[C]]/[[Java]]/[[JavaScript|JS]] users; less error-prone concurrency & security |
| <!-- Design goals -->Familiarity to [[C]]/[[Java]]/[[JavaScript|JS]] users; less error-prone concurrency & security |
||
Line 178: | Line 192: | ||
| static, dynamic |
| static, dynamic |
||
| according to data type, or explicitly by value, by reference |
| according to data type, or explicitly by value, by reference |
||
| |
|||
| Applications, GUIs, System, Games |
| Applications, GUIs, System, Games |
||
| Elegance, Performance, Simplicity, Lightness, 99.9% [[C]] compatibility |
| Elegance, Performance, Simplicity, Lightness, 99.9% [[C]] compatibility |
||
Line 190: | Line 205: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Correctness, Efficiency, Design by contract |
| Correctness, Efficiency, Design by contract |
||
Line 202: | Line 218: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Telecom and distributed applications |
| Telecom and distributed applications |
||
| Fault tolerance, Scalability |
| Fault tolerance, Scalability |
||
Line 214: | Line 231: | ||
| n/a |
| n/a |
||
| |
| |
||
| {{no}} |
|||
| Application, Embedded systems |
| Application, Embedded systems |
||
| Compact implementations, Low level access, Interactive programming |
| Compact implementations, Low level access, Interactive programming |
||
Line 226: | Line 244: | ||
| static |
| static |
||
| |
| |
||
| {{no}} |
|||
| Scientific and numeric applications |
| Scientific and numeric applications |
||
| Runtime efficiency, Simple syntax |
| Runtime efficiency, Simple syntax |
||
Line 238: | Line 257: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Application |
| Application |
||
| [[JVM]] compatibility |
| [[JVM]] compatibility |
||
Line 250: | Line 270: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Application, Research |
| Application, Research |
||
| [[lazy evaluation]], Teaching and research, completely formally described [http://haskell.org/onlinereport/preface-jfp.html Report Preface] |
| [[lazy evaluation]], Teaching and research, completely formally described [http://haskell.org/onlinereport/preface-jfp.html Report Preface] |
||
Line 262: | Line 283: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| |
| |
||
| |
| |
||
Line 274: | Line 296: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| |
|||
| Data processing |
| Data processing |
||
| Terseness, Expressiveness, Powerful Data Manipulation |
| Terseness, Expressiveness, Powerful Data Manipulation |
||
Line 286: | Line 309: | ||
| static |
| static |
||
| by value |
| by value |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Write once run anywhere |
| Write once run anywhere |
||
Line 298: | Line 322: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Client side web scripting |
| Client side web scripting |
||
| |
| |
||
Line 309: | Line 334: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| [[functional programming]] research |
| [[functional programming]] research |
||
Line 322: | Line 348: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| General |
| General |
||
| Simple notation for Lambda calculus, Homoiconicity |
| Simple notation for Lambda calculus, Homoiconicity |
||
Line 334: | Line 361: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Education |
| Education |
||
| Simple syntax, Turtle graphics, Interactive programming |
| Simple syntax, Turtle graphics, Interactive programming |
||
Line 346: | Line 374: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Host-driven Scripting |
| Host-driven Scripting |
||
| Small, embedded, configuration. |
| Small, embedded, configuration. |
||
Line 357: | Line 386: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| stream processing |
| stream processing |
||
Line 370: | Line 400: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Numeric computation and visualization |
| Numeric computation and visualization |
||
| |
|||
|- |
|- |
||
! [[MAXScript]] |
! [[MAXScript]] |
||
Line 381: | Line 413: | ||
| dynamic |
| dynamic |
||
| by value, by reference |
| by value, by reference |
||
| |
|||
| 3D Art Tools, Scripting |
| 3D Art Tools, Scripting |
||
| Simplicity, Accessibilty |
| Simplicity, Accessibilty |
||
Line 393: | Line 426: | ||
| static |
| static |
||
| by value, by reference |
| by value, by reference |
||
| {{yes}} |
|||
| Application, Systems |
| Application, Systems |
||
| Simple, Object oriented |
| Simple, Object oriented |
||
Line 404: | Line 438: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| Data processing |
| Data processing |
||
Line 417: | Line 452: | ||
| static |
| static |
||
| by value, by reference |
| by value, by reference |
||
| {{yes}} |
|||
| Teaching, System |
| Teaching, System |
||
| Simplicity |
| Simplicity |
||
Line 429: | Line 465: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Application, System |
| Application, System |
||
| Readability, Rapid application development, Modularity |
| Readability, Rapid application development, Modularity |
||
Line 441: | Line 478: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} (as of 2.0) |
|||
| Application |
| Application |
||
| [[Smalltalk]] like, Component based code reuse, [[C]] compatibility |
| [[Smalltalk]] like, Component based code reuse, [[C]] compatibility |
||
Line 453: | Line 491: | ||
| static |
| static |
||
| by value |
| by value |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Efficiency, Robustness, Correctness |
| Efficiency, Robustness, Correctness |
||
Line 465: | Line 504: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Education |
| Education |
||
| |
| |
||
Line 476: | Line 516: | ||
| |
| |
||
| static |
| static |
||
| by value, by reference |
|||
⚫ | |||
| {{no}} |
|||
| Education |
| Education |
||
| Readability, Discipline, Modularity |
| Readability, Discipline, Modularity |
||
Line 489: | Line 530: | ||
| dynamic |
| dynamic |
||
| by reference |
| by reference |
||
| {{yes}} (reference counting) |
|||
| Text processing, Scripting |
| Text processing, Scripting |
||
| Terseness, Expressiveness |
| Terseness, Expressiveness |
||
Line 501: | Line 543: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Web Application, CLI |
| Web Application, CLI |
||
| Robustness and Simplicity |
| Robustness and Simplicity |
||
Line 513: | Line 556: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Problem solving, Artificial intelligence |
| Problem solving, Artificial intelligence |
||
| [[declarative programming]] |
| [[declarative programming]] |
||
Line 525: | Line 569: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Application, Education, Scripting |
| Application, Education, Scripting |
||
| Simplicity, Readability, Expressiveness, Modularity |
| Simplicity, Readability, Expressiveness, Modularity |
||
Line 537: | Line 582: | ||
| static |
| static |
||
| by reference, by value |
| by reference, by value |
||
| |
|||
| Application |
| Application |
||
| Rapid application development, Simplicity, [[BASIC]] compatibility |
| Rapid application development, Simplicity, [[BASIC]] compatibility |
||
Line 549: | Line 595: | ||
| dynamic |
| dynamic |
||
| by reference |
| by reference |
||
| {{yes}} |
|||
| Application, Scripting |
| Application, Scripting |
||
| Expressiveness, Readability |
| Expressiveness, Readability |
||
Line 561: | Line 608: | ||
| static |
| static |
||
| |
| |
||
| {{yes}} |
|||
| Education |
| Education |
||
| |
| |
||
Line 573: | Line 621: | ||
| dynamic (latent) |
| dynamic (latent) |
||
| by value |
| by value |
||
| {{yes}} |
|||
| General, Education |
| General, Education |
||
| Minimalistic, Lexical Scoping |
| Minimalistic, Lexical Scoping |
||
Line 585: | Line 634: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Application, Education |
| Application, Education |
||
| Uniformity, Pure object oriented |
| Uniformity, Pure object oriented |
||
Line 597: | Line 647: | ||
| dynamic |
| dynamic |
||
| |
| |
||
| {{yes}} |
|||
| Application, Scripting |
| Application, Scripting |
||
| |
| |
||
Line 608: | Line 659: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| [[functional programming]] research |
| [[functional programming]] research |
||
Line 621: | Line 673: | ||
| static |
| static |
||
| by reference, by value (explicit) |
| by reference, by value (explicit) |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Rapid application development, Simplicity |
| Rapid application development, Simplicity |
||
Line 633: | Line 686: | ||
| static |
| static |
||
| by reference, by value (both explicit) |
| by reference, by value (both explicit) |
||
| {{yes}} |
|||
| Application |
| Application |
||
| Rapid application development, Simplicity |
| Rapid application development, Simplicity |
||
Line 644: | Line 698: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| Scripting |
| Scripting |
||
Line 657: | Line 712: | ||
! [[Type checking]] |
! [[Type checking]] |
||
! [[Parameter Passing]] Methods Available |
! [[Parameter Passing]] Methods Available |
||
! [[Garbage Collection|Garbage Collected]] |
|||
! Intended use |
! Intended use |
||
! Design goals |
! Design goals |
Revision as of 17:52, 5 February 2009
Language | Paradigm(s) | Standardized | Type strength | Type safety | Expression of types | Type compatibility | Type checking | Parameter Passing Methods Available | Garbage Collected | Intended use | Design goals |
---|---|---|---|---|---|---|---|---|---|---|---|
ActionScript | imperative programming, object-oriented, event-driven programming | Yes
, ECMA |
strong | safe | static | Yes | Web design | ||||
Ada | concurrent, distributed programming, generic programming, imperative programming, object-oriented | Yes
, ANSI, ISO, ANSI/MIL-STD-1815A-1983, ISO/IEC 8652, ISO/IEC TR 24718, GOST 27831-88 |
strong | safe | explicit | nominative | static | by value, by reference (compiler chosen if not determined by the data type) | No
(implementation optional) |
Embedded, real-time, mission-critical, long-lived, and large scale systems | Program reliability and maintenance, Programming as a human activity, Efficiency Language Reference Manual |
ALGOL 68 | concurrent, imperative programming | Yes | strong | safe | explicit | structural | static or dynamic | No | 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) | |
BASIC | procedural programming | Yes | varies by dialect | Yes | Education | Simplicity | |||||
C | imperative programming | Yes | weak | unsafe | explicit | nominative | static | by value, by reference (through reference types) | No | System, Embedded | Low level access, Minimal constraint |
C# | imperative programming, object-oriented, generic programming, reflective programming | Yes | strong | safe (but unsafe allowed) | implicit | nominative | static | Yes | Application | Rapid application development | |
C++ | imperative programming, object-oriented, generic programming | Yes
, ISO |
strong | safe (but unsafe allowed) | explicit, partially implicit | nominative, structural | static, dynamic | by value, by reference (through reference types) | No | Application, System | Abstraction, Efficiency, Compatibility |
Clean | functional programming, generic programming | No | strong | implicit | static | Yes | General | Correctness, Modularity | |||
COBOL | imperative programming, object-oriented | Yes | strong | static | No | Business and Financial Applications | Readability | ||||
ColdFusion | procedural programming, object-oriented | No | weak | implicit | dynamic | Web Development | Rapid Application Development, Ease of use | ||||
Common Lisp | imperative programming, functional programming, object-oriented | Yes | strong | safe | dynamic | Yes | General | Standardize Lisp | |||
D | imperative programming, object-oriented, generic programming | No | strong | safe | explicit | static | Yes | Application, System | Compilability, Correctness, Efficiency | ||
E | imperative, object-oriented, object-capability, communicating event loops | No
, still in development |
strong (runtime) | safe | optional explicit | structural | 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 programming, object-oriented, generic programming, reflective programming | No | weak | unsafe | explicit, partially implicit | nominative, complex conversions system | static, dynamic | according to data type, or explicitly by value, by reference | Applications, GUIs, System, Games | Elegance, Performance, Simplicity, Lightness, 99.9% C compatibility | |
Eiffel | imperative programming, object-oriented, generic programming | Yes | strong | safe | nominative | static | Yes | Application | Correctness, Efficiency, Design by contract | ||
Erlang | functional programming, concurrent, distributed programming | No | strong | dynamic | Yes | Telecom and distributed applications | Fault tolerance, Scalability | ||||
Forth | imperative programming, 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 programming, procedural programming, object-oriented | Yes | strong | safe | nominative | static | No | Scientific and numeric applications | Runtime efficiency, Simple syntax | ||
Groovy | imperative programming, object-oriented, aspect-oriented programming | No | strong | safe | implicit | dynamic | Yes | Application | JVM compatibility | ||
Haskell | functional programming, generic programming, lazy evaluation | Yes | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | Yes | Application, Research | lazy evaluation, Teaching and research, completely formally described Report Preface | |
Io | object-oriented, prototype | No | strong | dynamic | Yes | ||||||
J | array programming, function-level programming, tacit programming | No | strong | safe | dynamic | Data processing | Terseness, Expressiveness, Powerful Data Manipulation | ||||
Java | imperative programming, object-oriented, generic programming, reflective programming | No | strong | safe | explicit | nominative | static | by value | Yes | Application | Write once run anywhere |
JavaScript | imperative programming, object-oriented, functional programming, reflective programming | Yes | weak | implicit | dynamic | Yes | Client side web scripting | ||||
Joy | functional programming, stack-oriented | No | strong | safe | dynamic | functional programming research | concatenative | ||||
Lisp | functional programming, reflective programming; others vary by dialect | No | strong | dynamic | Yes | General | Simple notation for Lambda calculus, Homoiconicity | ||||
Logo | procedural programming, functional programming | No | strong | safe | implicit | structural | dynamic | Yes | Education | Simple syntax, Turtle graphics, Interactive programming | |
Lua | procedural programming, imperative programming, reflective | No | strong | safe | implicit | dynamic | Yes | Host-driven Scripting | Small, embedded, configuration. | ||
Lucid | dataflow programming, functional programming | No | strong | safe | dynamic | stream processing | dataflow | ||||
Mathematica | functional programming, procedural programming | No | strong | dynamic | Yes | Numeric computation and visualization | |||||
MAXScript | imperative programming, object-oriented, procedural programming | No | strong | safe | implicit | dynamic | by value, by reference | 3D Art Tools, Scripting | Simplicity, Accessibilty | ||
Modula-3 | imperative programming, object-oriented, procedural programming, generic programming | No | strong | safe (unsafe allowed) | explicit | structural | static | by value, by reference | Yes | Application, Systems | Simple, Object oriented |
Nial | functional programming, array programming | No | strong | dynamic | Data processing | ||||||
Oberon-2 | procedural programming, imperative programming, object-oriented | No | strong | safe | explicit | structural | static | by value, by reference | Yes | Teaching, System | Simplicity |
Object Pascal (Delphi) | imperative programming, object-oriented, generic programming | No | strong | safe (but unsafe allowed) | explicit | nominative | static | Yes | Application, System | Readability, Rapid application development, Modularity | |
Objective-C | imperative programming, object-oriented, reflective programming | Yes | weak | explicit | static | Yes
(as of 2.0) |
Application | Smalltalk like, Component based code reuse, C compatibility | |||
Ocaml | object-oriented, functional programming, imperative programming, generic programming | No | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | by value | Yes | Application | Efficiency, Robustness, Correctness |
Oz | logic programming, functional programming, imperative programming, object-oriented, concurrent programming | No | dynamic | Yes | Education | ||||||
Pascal | imperative programming, procedural programming | Yes
(Extended Pascal standardized under ISO) |
strong | safe | explicit | static | by value, by reference | No | Education | Readability, Discipline, Modularity | |
Perl | imperative programming, procedural programming, reflective programming, functional programming, object-oriented, generic programming | No | weak | implicit | dynamic | by reference | Yes
(reference counting) |
Text processing, Scripting | Terseness, Expressiveness | ||
PHP | imperative programming, object-oriented, reflective programming | No | weak | dynamic | Yes | Web Application, CLI | Robustness and Simplicity | ||||
Prolog | logic programming | Yes
, ISO |
strong | dynamic | Yes | Problem solving, Artificial intelligence | declarative programming | ||||
Python | imperative programming, object-oriented, functional programming, aspect-oriented programming, reflective programming | No | strong | safe | implicit | dynamic | Yes | Application, Education, Scripting | Simplicity, Readability, Expressiveness, Modularity | ||
RapidQ | imperative programming, component-oriented programming, event-driven programming | No | strong (none for Variant type) | safe | static | by reference, by value | Application | Rapid application development, Simplicity, BASIC compatibility | |||
Ruby | imperative programming, object-oriented, aspect-oriented programming, reflective programming | No | strong | implicit | dynamic | by reference | Yes | Application, Scripting | Expressiveness, Readability | ||
Scala | object-oriented, functional programming, generic programming | No | strong | partially implicit | static | Yes | Education | ||||
Scheme | functional programming | Yes
, R5RS, R6RS |
strong | safe | implicit | dynamic (latent) | by value | Yes | General, Education | Minimalistic, Lexical Scoping | |
Smalltalk | object-oriented, concurrent programming, event-driven programming, imperative programming, declarative programming | Yes
, ANSI |
strong | safe | implicit | dynamic | Yes | Application, Education | Uniformity, Pure object oriented | ||
Tcl | imperative programming, procedural programming, event-driven programming | No | dynamic | Yes | Application, Scripting | ||||||
V | functional programming, stack-oriented, concatenative | No | strong | safe | dynamic | functional programming research | concatenative | ||||
Visual Basic | component-oriented programming, event-driven programming | No | strong | safe | nominative | static | by reference, by value (explicit) | Yes | Application | Rapid application development, Simplicity | |
Visual Basic .NET | object-oriented, event-driven programming | No | strong | static | by reference, by value (both explicit) | Yes | Application | Rapid application development, Simplicity | |||
Windows PowerShell | imperative programming, object-oriented, functional programming, pipeline programming, reflective programming | 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 Collected | Intended use | Design goals |