Language Comparison Table: Difference between revisions
Content added Content deleted
m (Trying to concisify some rows) |
(Added "Parameter Passing Methods Available" column, filled in a few languages) |
||
Line 7: | Line 7: | ||
! Expression of types |
! Expression of types |
||
! [[Type compatibility]] |
! [[Type compatibility]] |
||
! Type checking |
! Type checking |
||
! [[Parameter Passing]] Methods Available |
|||
! Intended use |
! Intended use |
||
! Design goals |
! Design goals |
||
Line 19: | Line 20: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Web design |
| Web design |
||
| |
| |
||
Line 30: | Line 32: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| 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 41: | Line 44: | ||
| structural |
| structural |
||
| static or dynamic |
| static or dynamic |
||
| |
|||
| Application |
| Application |
||
| Readability, Structure |
| Readability, Structure |
||
Line 52: | Line 56: | ||
| |
| |
||
| |
| |
||
| |
|||
| Education |
| Education |
||
| Simplicity |
| Simplicity |
||
Line 63: | Line 68: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| by value, by reference |
|||
| System |
| System |
||
| Low level access, Minimal constraint |
| Low level access, Minimal constraint |
||
Line 74: | Line 80: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Rapid application development |
| Rapid application development |
||
Line 85: | Line 92: | ||
| nominative, structural |
| nominative, structural |
||
| static, dynamic |
| static, dynamic |
||
| by value, by reference |
|||
| Application, System |
| Application, System |
||
| Abstraction, Efficiency, Compatibility |
| Abstraction, Efficiency, Compatibility |
||
Line 96: | Line 104: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| General |
| General |
||
| Correctness, Modularity |
| Correctness, Modularity |
||
Line 107: | Line 116: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Business and Financial Applications |
| Business and Financial Applications |
||
| Readability |
| Readability |
||
Line 118: | Line 128: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Web Development |
| Web Development |
||
| Rapid Application Development, Ease of use |
| Rapid Application Development, Ease of use |
||
Line 129: | Line 140: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| General |
| General |
||
| Standardize [[Lisp]] |
| Standardize [[Lisp]] |
||
Line 140: | Line 152: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Application, System |
| Application, System |
||
| Compilability, Correctness, Efficiency |
| Compilability, Correctness, Efficiency |
||
Line 151: | Line 164: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Correctness, Efficiency, Design by contract |
| Correctness, Efficiency, Design by contract |
||
Line 162: | Line 176: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Telecom and distributed applications |
| Telecom and distributed applications |
||
| Fault tolerance, Scalability |
| Fault tolerance, Scalability |
||
Line 173: | Line 188: | ||
| n/a |
| n/a |
||
| n/a |
| n/a |
||
| |
|||
| Application, Embedded systems |
| Application, Embedded systems |
||
| Compact implementations, Low level access, Interactive programming |
| Compact implementations, Low level access, Interactive programming |
||
Line 184: | Line 200: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| Scientific and numeric applications |
| Scientific and numeric applications |
||
| Runtime efficiency, Simple syntax |
| Runtime efficiency, Simple syntax |
||
Line 195: | Line 212: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Application |
| Application |
||
| [[JVM]] compatibility |
| [[JVM]] compatibility |
||
Line 206: | Line 224: | ||
| polymorphic structural |
| polymorphic structural |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| [[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 217: | Line 236: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Data processing |
| Data processing |
||
| Terseness, Expressiveness, Powerful Data Manipulation |
| Terseness, Expressiveness, Powerful Data Manipulation |
||
Line 228: | Line 248: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| by value |
|||
| Application |
| Application |
||
| Write once run anywhere |
| Write once run anywhere |
||
Line 239: | Line 260: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Client side web scripting |
| Client side web scripting |
||
| |
| |
||
Line 250: | Line 272: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| [[functional programming]] research |
| [[functional programming]] research |
||
| [[concatenative]] |
| [[concatenative]] |
||
Line 261: | Line 284: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| General |
| General |
||
| Simple notation for Lambda calculus, Homoiconicity |
| Simple notation for Lambda calculus, Homoiconicity |
||
Line 272: | Line 296: | ||
| structural |
| structural |
||
| dynamic |
| dynamic |
||
| |
|||
| Education |
| Education |
||
| Simple syntax, Turtle graphics, Interactive programming |
| Simple syntax, Turtle graphics, Interactive programming |
||
Line 283: | Line 308: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Host-driven Scripting |
| Host-driven Scripting |
||
| Small, embedded, configuration. |
| Small, embedded, configuration. |
||
Line 294: | Line 320: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Numeric computation and visualization |
| Numeric computation and visualization |
||
| |
| |
||
Line 305: | Line 332: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| Application, System |
| Application, System |
||
| Readability, Rapid application development, Modularity |
| Readability, Rapid application development, Modularity |
||
Line 316: | Line 344: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Smalltalk like, Component based code reuse, C compatibility |
| Smalltalk like, Component based code reuse, C compatibility |
||
Line 327: | Line 356: | ||
| structural |
| structural |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Efficiency, Robustness, Correctness |
| Efficiency, Robustness, Correctness |
||
Line 338: | Line 368: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Education |
| Education |
||
| |
| |
||
Line 349: | Line 380: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Education |
| Education |
||
| Readability, Discipline, Modularity |
| Readability, Discipline, Modularity |
||
Line 359: | Line 391: | ||
| implicit |
| implicit |
||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Text processing, Scripting |
| Text processing, Scripting |
||
| Terseness, Expressiveness |
| Terseness, Expressiveness |
||
Line 371: | Line 404: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Web Application, CLI |
| Web Application, CLI |
||
| Robustness and Simplicity |
| Robustness and Simplicity |
||
Line 382: | Line 416: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Problem solving, Artificial intelligence |
| Problem solving, Artificial intelligence |
||
| [[declarative programming]] |
| [[declarative programming]] |
||
Line 393: | Line 428: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Application, Education, Scripting |
| Application, Education, Scripting |
||
| Simplicity, Readability, Expressiveness, Modularity |
| Simplicity, Readability, Expressiveness, Modularity |
||
Line 404: | Line 440: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Application, Scripting |
| Application, Scripting |
||
| Expressiveness, Readability |
| Expressiveness, Readability |
||
Line 415: | Line 452: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Education |
| Education |
||
| |
| |
||
Line 426: | Line 464: | ||
| |
| |
||
| dynamic (latent) |
| dynamic (latent) |
||
| |
|||
| General, Education |
| General, Education |
||
| Minimalistic, Lexical Scoping |
| Minimalistic, Lexical Scoping |
||
Line 437: | Line 476: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Application, Education |
| Application, Education |
||
| Uniformity, Pure object oriented |
| Uniformity, Pure object oriented |
||
Line 448: | Line 488: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| Application, Scripting |
| Application, Scripting |
||
| |
| |
||
Line 459: | Line 500: | ||
| nominative |
| nominative |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Rapid application development, Simplicity |
| Rapid application development, Simplicity |
||
Line 470: | Line 512: | ||
| |
| |
||
| static |
| static |
||
| |
|||
| Application |
| Application |
||
| Rapid application development, Simplicity |
| Rapid application development, Simplicity |
||
Line 481: | Line 524: | ||
| |
| |
||
| dynamic |
| dynamic |
||
| |
|||
| |
| |
||
| |
| |
||
Line 491: | Line 535: | ||
! Expression of types |
! Expression of types |
||
! [[Type compatibility]] |
! [[Type compatibility]] |
||
! Type checking |
! Type checking |
||
! [[Parameter Passing]] Methods Available |
|||
! Intended use |
! Intended use |
||
! Design goals |
! Design goals |
Revision as of 20:47, 24 July 2008
Language | Paradigm(s) | Standardized | Type strength | Type safety | Expression of types | Type compatibility | Type checking | Parameter Passing Methods Available | Intended use | Design goals |
---|---|---|---|---|---|---|---|---|---|---|
ActionScript | imperative programming, object-oriented, event-driven programming | Yes
, ECMA |
strong | safe | static | 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 |
strong | safe | explicit | nominative | static | 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 | No | strong | safe | structural | static or dynamic | Application | Readability, Structure | ||
BASIC | procedural programming | Yes | varies by dialect | Education | Simplicity | |||||
C | imperative programming | Yes | weak | unsafe | explicit | nominative | static | by value, by reference | System | Low level access, Minimal constraint |
C# | imperative programming, object-oriented, generic programming, reflective programming | Yes | strong | safe (but unsafe allowed) | implicit | nominative | static | 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 | Application, System | Abstraction, Efficiency, Compatibility |
Clean | functional programming, generic programming | No | strong | implicit | static | General | Correctness, Modularity | |||
COBOL | imperative programming, object-oriented | Yes | strong | static | 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 | General | Standardize Lisp | |||
D | imperative programming, object-oriented, generic programming | No | strong | safe | explicit | static | Application, System | Compilability, Correctness, Efficiency | ||
Eiffel | imperative programming, object-oriented, generic programming | Yes | strong | safe | nominative | static | Application | Correctness, Efficiency, Design by contract | ||
Erlang | functional programming, concurrent, distributed programming | No | strong | dynamic | Telecom and distributed applications | Fault tolerance, Scalability | ||||
Forth | imperative programming, stack-oriented | Yes
, ANSI |
none | n/a | n/a | n/a | n/a | Application, Embedded systems | Compact implementations, Low level access, Interactive programming | |
Fortran | imperative programming, procedural programming, object-oriented | Yes | strong | safe | nominative | static | Scientific and numeric applications | Runtime efficiency, Simple syntax | ||
Groovy | imperative programming, object-oriented, aspect-oriented programming | No | strong | safe | implicit | dynamic | Application | JVM compatibility | ||
Haskell | functional programming, generic programming, lazy evaluation | Yes | strong | safe | inferred, optional explicit annotations | polymorphic structural | static | Application | lazy evaluation, Teaching and research, completely formally described Report Preface | |
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 | Application | Write once run anywhere |
JavaScript | imperative programming, object-oriented, functional programming, reflective programming | Yes | weak | dynamic | Client side web scripting | |||||
Joy | functional programming, stack-oriented | No | strong | safe | dynamic | functional programming research | concatenative | |||
Lisp | functional programming, reflective; others vary by dialect | No | strong | dynamic | General | Simple notation for Lambda calculus, Homoiconicity | ||||
Logo | procedural programming, functional programming | No | strong | safe | implicit | structural | dynamic | Education | Simple syntax, Turtle graphics, Interactive programming | |
Lua | procedural programming, imperative programming, reflective | No | strong | safe | implicit | dynamic | Host-driven Scripting | Small, embedded, configuration. | ||
Mathematica | functional programming, procedural programming | No | strong | dynamic | Numeric computation and visualization | |||||
Object Pascal (Delphi) | imperative programming, object-oriented, generic programming | No | strong | safe (but unsafe allowed) | explicit | nominative | static | Application, System | Readability, Rapid application development, Modularity | |
Objective-C | imperative programming, object-oriented, reflective programming | Yes | weak | explicit | static | Application | Smalltalk like, Component based code reuse, C compatibility | |||
Ocaml | object-oriented, functional programming, imperative programming, generic programming | No | strong | safe | implicit | structural | static | Application | Efficiency, Robustness, Correctness | |
Oz | logic programming, functional programming, imperative programming, object-oriented, concurrent programming - multi paradigm | No | dynamic | Education | ||||||
Pascal | imperative programming, procedural programming | Yes
(Extended Pascal standardized under ISO) |
strong | safe | explicit | static | Education | Readability, Discipline, Modularity | ||
Perl | imperative programming, procedural programming, reflective programming, functional programming, object-oriented, generic programming | No | weak | implicit | dynamic | Text processing, Scripting | Terseness, Expressiveness | |||
PHP | imperative programming, object-oriented, reflective programming | No | weak | dynamic | Web Application, CLI | Robustness and Simplicity | ||||
Prolog | logic programming | Yes
, ISO |
strong | dynamic | Problem solving, Artificial intelligence | declarative programming | ||||
Python | imperative programming, object-oriented, functional programming, aspect-oriented programming, reflective programming | No | strong | safe | implicit | dynamic | Application, Education, Scripting | Simplicity, Readability, Expressiveness, Modularity | ||
Ruby | imperative programming, object-oriented, aspect-oriented programming, reflective programming | No | strong | implicit | dynamic | Application, Scripting | Expressiveness, Readability | |||
Scala | object-oriented, functional programming, generic programming | No | strong | partially implicit | static | Education | ||||
Scheme | functional programming | Yes | strong | dynamic (latent) | General, Education | Minimalistic, Lexical Scoping | ||||
Smalltalk | object-oriented, concurrent programming, event-driven programming, imperative programming, declarative programming | Yes
, ANSI |
strong | safe | implicit | dynamic | Application, Education | Uniformity, Pure object oriented | ||
Tcl | imperative programming, procedural programming, event-driven programming | No | dynamic | Application, Scripting | ||||||
Visual Basic | component-oriented programming, event-driven programming | No | strong | safe | nominative | static | Application | Rapid application development, Simplicity | ||
Visual Basic .NET | object-oriented, event-driven programming | No | strong | static | Application | Rapid application development, Simplicity | ||||
Windows PowerShell | imperative programming, object-oriented, functional programming, pipeline programming, reflective programming | No | strong | safe | implicit | dynamic | ||||
Language | Paradigm(s) | Standardized | Type strength | Type safety | Expression of types | Type compatibility | Type checking | Parameter Passing Methods Available | Intended use | Design goals |