Language Comparison Table: Difference between revisions

From Rosetta Code
Content added Content deleted
(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

, GOST 27974-88

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

, ANSI, ISO

varies by dialect Yes Education Simplicity
C imperative programming Yes

, ANSI C89, ISO C90/C99

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

, ECMA, ISO

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

, ECMA-367, ISO/IEC 25436:2006

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

, ISO, ISO/IEC 1539-1:2004

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

, 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
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

External resources