Comparison of programming languages
3406469
225885005
2008-07-15T21:21:51Z
Ghettoblaster
6603820
/* External links */
{{ProgLangCompare}}
[[Programming language]]s are used for controlling the behavior of a machine (often a [[computer]]). Like [[natural language|natural languages]], programming languages conform to rules for [[syntax]] and [[semantics]].
There are [[list of programming languages|thousands of programming languages]]<ref>As of May [[2006]] Diarmuid Pigott's [http://hopl.murdoch.edu.au/ Encyclopedia of Computer Languages] hosted at [[Murdoch University]], [[Australia]] lists 8512 computer languages.</ref> and new ones are created every year. Few languages ever become sufficiently popular that they are used by more than a few people, but many professional [[programmer]]s use dozens of different languages during their career.
__TOC__
{{-}}
==General comparison==
The following table compares general and technical information for a selection of commonly used [[programming language]]s. See the individual languages' articles for further information. Please note that the following table may be missing some information.
{| class="wikitable sortable"
|-
! Language
! [[Programming paradigm|Paradigm]](s)
! [[Standardization|Standardized]]?
|-
! [[ActionScript|ActionScript 3.0]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[event-driven programming|event-driven]]
| {{Yes}}, ECMA
|-
! [[Ada (programming language)|Ada]]
| [[concurrent programming language|concurrent]], [[distributed programming|distributed]], [[generic programming|generic]], [[imperative programming|imperative]], [[object-oriented programming|object-oriented]]
| {{yes}}, ANSI, ISO
|-
! [[ALGOL 58]]
| [[imperative programming|imperative]]
| {{no}}
|-
! [[ALGOL 60]]
| [[imperative programming|imperative]]
| {{yes}}, ISO<ref>[http://www.open-std.org/jtc1/sc22/docs/oldwgs/wg6.html ISO 1538:1984]</ref>
|-
! [[ALGOL 68]]
| [[concurrent programming language|concurrent]], [[imperative programming|imperative]]
| {{no}}
|-
! [[APL (programming language)|APL]]
| [[array programming|array-oriented]]
| {{yes}}, ISO
|-
! [[BASIC (programming language)|BASIC]]
| [[Procedural programming|procedural]]
| {{yes}}, [http://portal.acm.org/citation.cfm?id=988221 ANSI], ISO
|-
! [[BLISS (programming language)|BLISS]]
| [[Procedural programming|procedural]]
| {{no}}
|-
! [[Boo (programming language)|Boo]]
|
| {{no}}
|-
! [[C (programming language)|C]]
| [[imperative programming|imperative]]
| {{yes}}, [[ANSI_C|ANSI C89, ISO C90/C99]]
|-
! [[C++]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{yes}}, ISO
|-
! [[C Sharp (programming language)|C#]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]], [[reflective programming|reflective]]
| {{yes}}, ECMA, ISO
|-
! [[Chrome (programming language)|Chrome]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{no}}
|-
! [[Clean (programming language)|Clean]]
| [[functional programming|functional, generic]]
| {{no}}
|-
! [[Cobol|COBOL]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]]
| {{yes}}
|-
! [[Coldfusion|ColdFusion]]
| [[Procedural programming|procedural]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[Common Lisp|Common Lisp]]
| [[imperative programming|imperative]], [[functional programming|functional]], [[object-oriented programming|object-oriented]]
| {{yes}}
|-
! [[Curl programming language|Curl]]
| [[event-driven programming|event-driven]], [[functional programming|functional]], [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]], [[reflective programming|reflective]]
| {{no}}
|-
! [[D (programming language)|D]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{no}}
|-
! [[Dylan (programming language)|Dylan]]
| [[functional programming|functional]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[Eiffel (programming language)|Eiffel]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{yes}}, ECMA, ISO<ref>ECMA-367; ISO/IEC 25436:2006</ref>
|-
! [[Erlang programming language|Erlang]]
| [[functional programming|functional]], [[concurrent programming language|concurrent]], [[distributed programming|distributed]]
| {{no}}
|-
! [[FP (programming language) |FP]]
| [[Functional programming|functional]]
| {{no}}
|-
! [[F Sharp programming language|F#]]
| [[Functional programming|functional]], [[object-oriented programming|object-oriented]], [[imperative programming|imperative]], [[generic programming|generic]]
| {{no}}
|-
! [[Forth (programming language)|Forth]]
| [[Imperative programming|imperative]], [[Stack-oriented programming language|stack-oriented]]
| {{yes}}, ANSI
|-
! [[Fortran]]
| [[Imperative programming|imperative]], [[Procedural programming|procedural]], [[Object-oriented programming|object-oriented]]
| {{yes}}
|-
! [[GraphTalk]]
| [[Logic programming|logic-oriented]], [[Object-oriented programming|object-oriented]]
| {{no}}
|-
! [[Groovy programming language|Groovy]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[aspect-oriented programming|aspect-oriented]]
| {{no}}
|-
! [[Haskell (programming language)|Haskell]]
| [[functional programming|functional]], [[generic programming|generic]], [[lazy evaluation]]
| {{no}}
|-
! [[Io programming language|Io]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[J (programming language)|J]]
| [[array programming|array-oriented]], [[function-level programming|function-level]], [[tacit programming|tacit]]
| {{no}}
|-
! [[Java (programming language)|Java]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]], [[reflective programming|reflective]]
| {{no}}
|-
! [[JavaScript]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[functional programming|functional]], [[reflective programming|reflective]]
| {{yes}}
|-
! [[Joy (programming language)|Joy]]
| [[Functional programming|functional]], [[Stack-oriented programming language|stack-oriented]]
| {{no}}
|-
! [[Lisp (programming language)|Lisp]]
| [[Functional programming|functional]], [[Reflection (computer science)|reflective]]; others vary by dialect
| {{no|only Common Lisp}}
|-
! [[Lua (programming language)|Lua]]
| [[procedural programming|procedural]], [[imperative programming|imperative]], [[Reflection (computer science)|reflective]]
| {{no}}
|-
! [[Mathematica]]
| [[Functional programming|functional]], [[Procedural programming|procedural]]
| {{no}}
|-
! [[MATLAB|MATLAB M-code]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[Modula-2 programming language|Modula-2]]
| [[imperative programming|imperative]], [[generic programming|generic]]
| {{Yes}}, ISO<ref>ISO/IEC 10514-1:1996</ref>
|-
! [[Modula-3 programming language|Modula-3]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{no}}
|-
! [[Oberon programming language|Oberon]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[Objective-C]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[reflective programming|reflective]]
| {{yes}}
|-
! [[Objective Caml]]
| [[object-oriented programming|object-oriented]], [[Functional programming|functional]], [[imperative programming|imperative]], [[generic programming|generic]]
| {{no}}
|-
! [[Object Pascal]] ([[Borland Delphi|Delphi]])
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{no}}
|-
! [[Oz (programming language)|Oz]]
| [[logic programming|logic]], [[functional programming|functional]], [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[concurrent programming|concurrent]]
| {{no}}
|-
! [[Pascal (programming language)|Pascal]]
| [[imperative programming|imperative]], [[Procedural programming|procedural]]
| {{yes}}
|-
! [[Perl]]
| [[Imperative programming|imperative]], [[Procedural programming|procedural]], [[reflective programming|reflective]], [[functional programming|functional]], [[object-oriented programming|object-oriented]], [[generic programming|generic]]
| {{no}}
|-
! [[PHP]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[reflective programming|reflective]]
| {{no}}
|-
! [[PL/I]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]],
| {{Yes}}
|-
! [[Prolog]]
| [[logic programming|logic]]
| {{Yes}}, ISO
|-
! [[Python (programming language)|Python]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[functional programming|functional]], [[aspect-oriented programming|aspect-oriented]], [[reflective programming|reflective]]
| {{no}}<ref>Language changes are done using a formally documented procedure, starting with a Python Enhancement Proposal (PEP)s. Python version releases are accompanied with a Language Reference Manual showing syntax and semantics; a reference implementation, and test suite. These are used to generate other Python implementations such as Jython and IronPython</ref>
|-
! [[Ruby (programming language)|Ruby]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[aspect-oriented programming|aspect-oriented]], [[reflective programming|reflective]]
| {{no}}
|-
! [[S programming language|S]]
| [[imperative programming|imperative]], [[Procedural programming|procedural]], [[functional programming|functional]], [[object-oriented programming|object-oriented]]
| {{no}}
|-
! [[S-Lang (programming language)|S-Lang]]
| [[imperative programming|imperative]], [[Procedural programming|procedural]]
| {{no}}
|-
! [[Scala programming language|Scala]]
| [[object-oriented programming|object-oriented]], [[functional programming|functional]], [[generic programming|generic]]
| {{no}}
|-
! [[Scheme (programming language)|Scheme]]
| [[functional programming|functional]]
| {{yes}}
|-
! [[Smalltalk]]
| [[object-oriented programming|object-oriented]], [[concurrent programming|concurrent]], [[event-driven programming|event-driven]], [[imperative programming|imperative]], [[declarative programming|declarative]]
| {{Yes}}, [http://www.techstreet.com/cgi-bin/detail?product_id=56122 ANSI]
|-
! [[Tcl]]
| [[imperative programming|imperative]], [[Procedural programming|procedural]], [[event-driven programming|event-driven]]
| {{no}}
|-
! [[Visual Basic|Visual Basic]]
| [[Component-oriented programming|component-oriented]], [[event-driven programming|event-driven]]
| {{no}}
|-
! [[Visual Basic .NET|Visual Basic .NET]]
| [[object-oriented programming|object-oriented]], [[event-driven programming|event-driven]]
| {{no}}
|-
! [[Visual Prolog]]
| [[logical programming|logical]], [[object-oriented programming|object-oriented]], [[functional programming|functional]], [[event-driven programming|event-driven]], [[imperative programming|imperative]], [[declarative programming|declarative]]
| {{no}}
|-
! [[Windows PowerShell]]
| [[imperative programming|imperative]], [[object-oriented programming|object-oriented]], [[functional programming|functional]], [[pipeline programming|pipeline]], [[reflective programming|reflective]]
| {{no}}
|-
! [[XL (programming language)|XL]]
| [[concept programming]], [[imperative programming|imperative (by default)]], [[object-oriented programming|object-oriented (multiple models)]],
| {{no}}
|-class="sortbottom"
! Language
! [[Programming paradigm|Paradigm]](s)
! [[Standardization|Standardized]]?
|}
==Type systems==
{| class="wikitable sortable"
|-
! Language
! [[Type system#Strong and weak typing|Type strength]]
! [[Type system#Safely and unsafely typed systems|Type safety]]
! Expression of types <!-- related to compatibility but not the same -->
! [[Type system#Compatibility: equivalence and subtyping|"Compatibility"]]
! Type checking
|-
! [[ActionScript|ActionScript 3.0]]
| strong
| safe
|
|
| static
|-
! [[Ada (programming language)|Ada]]
| strong
| safe
| explicit
| nominative
| static
|-
! [[ALGOL 58]]
| strong
| safe
|
|
| static
|-
! [[ALGOL 60]]
| strong
| safe
|
|
| static
|-
! [[ALGOL 68]]
| strong
| safe
|
| structural
| static or dynamic ([[ALGOL_68#struct.2C_union_.26_.5B:.5D:_Structures.2C_unions_and_arrays|tagged union]])
|-
! [[APL (programming language)|APL]]
| strong
| safe
|
|
| dynamic
|-
! [[BASIC (programming language)|BASIC]]
| varies by dialect
|
|
|
|
|-
! [[BLISS (programming language)|BLISS]]
| none
| n/a
| n/a
| n/a
| n/a
|-
! [[Boo (programming language)|Boo]]
| strong
|
| implicit
|
|
|-
! [[C (programming language)|C]]
| weak
| unsafe
| explicit
| nominative
| static
|-
! [[C++]] ([[ISO/IEC 14882]])
| strong
| safe (but unsafe allowed)
| explicit
| nominative
| static
|-
! [[C Sharp (programming language)|C#]]
| strong
| safe (but unsafe allowed)
| implicit
| nominative
| static and dynamic
|-
! [[Clean (programming language)|Clean]]
| strong
|
| implicit
|
| static
|-
! [[Cobol|COBOL]]
| strong
|
|
|
| static
|-
! [[Coldfusion|ColdFusion]]
| weak
|
| implicit
|
| dynamic
|-
! [[Common Lisp|Common Lisp]]
| strong
| safe
|
|
| dynamic
|-
! [[Curl programming language|Curl]]
| strong
| safe
| implicit, explicit
| nominative
| static and dynamic
|-
! [[D (programming language)|D]]
| strong
| safe
| explicit
|
| static
|-
! [[Dylan (programming language)|Dylan]]
| strong
| safe
|
|
| dynamic
|-
! [[Eiffel (programming language)|Eiffel]]
| strong
| safe
|
| nominative
| static
|-
! [[Erlang programming language|Erlang]]
| strong
|
|
|
| dynamic
|-
! [[F Sharp programming language|F#]]
| strong
| safe
| implicit
| nominative
| static
|-
! [[Forth (programming language)|Forth]]
| none
| n/a
| n/a
| n/a
| n/a
|-
! [[Fortran]]
| strong
| safe
|
| nominative
| static
|-
! [[GraphTalk]]
| weak
|
|
|
|
|-
! [[Groovy programming language|Groovy]]
| strong
| safe
| implicit
|
| dynamic
|-
! [[Haskell (programming language)|Haskell]]
| strong
|
| implicit
| structural
| static
|-
! [[Io programming language|Io]]
| strong
|
|
|
| dynamic
|-
! [[J (programming language)|J]]
| strong
| safe
|
|
| dynamic
|-
! [[Java (programming language)|Java]]
| strong
| safe
| explicit
| nominative
| static
|-
! [[JavaScript]]
| weak
|
| implicit
|
| dynamic
|-
! [[Joy (programming language)|Joy]]
| strong
| safe
|
|
| dynamic
|-
! [[Lisp (programming language)|Lisp]]
| strong
|
|
|
| dynamic
|-
! [[Lua (programming language)|Lua]]
| strong
| safe
| implicit
|
| dynamic
|-
! [[Mathematica]]
| strong
|
|
|
| dynamic
|-
! [[MATLAB|MATLAB M-code]]
|
|
|
|
| dynamic
|-
! [[Modula-2 programming language|Modula-2]]
| strong
| safe (but unsafe allowed)
| explicit
| structural
| static
|-
! [[Modula-3 programming language|Modula-3]]
| strong
| safe (but unsafe allowed)
| explicit
| structural
| static
|-
! [[Oberon programming language|Oberon]]
| strong
| safe
| explicit
|
| static
|-
! [[Objective-C]]
| weak
|
| explicit
|
| static
|-
! [[Objective Caml]]
| strong
| safe
| implicit
| structural
| static
|-
! [[Object Pascal]] ([[Borland Delphi|Delphi]])
| strong
| safe (but unsafe allowed)
| explicit
| nominative
| static
|-
! [[Oxygene (programming language)|Oxygene]]
| strong
| safe (but unsafe allowed)
| implicit
|
| static
|-
! [[Oz (programming language)|Oz]]
|
|
|
|
| dynamic
|-
! [[Pascal (programming language)|Pascal]]
| strong
| safe
| explicit
|
| static
|-
! [[Perl]]
| weak <!-- At least perl 5 is a weakly typed language -->
|
| implicit
|
| dynamic
|-
! [[PHP]]
| weak
|
| implicit
|
| dynamic
|-
! [[Prolog]]
| strong
|
|
|
| dynamic
|-
! [[Python (programming language)|Python]]
| strong
| safe
| implicit
|
| dynamic
|-
! [[Ruby programming language|Ruby]]
| strong
|
| implicit
|
| dynamic
|-
! [[S programming language|S]]
| strong
|
|
|
| dynamic
|-
! [[S-Lang (programming language)|S-Lang]]
| strong
| safe
|
|
| dynamic
|-
! [[Scala programming language|Scala]]
| strong
|
| partially implicit
|
| static
|-
! [[Scheme (programming language)|Scheme]]
| strong
|
|
|
| dynamic (latent)
|-
! [[Smalltalk]]
| strong
| safe
| implicit
|
| dynamic
|-
! [[Tcl]]
|
|
|
|
| dynamic
|-
! [[Visual Basic|Visual Basic]]
| strong
| safe
|
| nominative
| static
|-
! [[Visual Basic .NET|Visual Basic .NET]]
| strong
|
|
|
| static
|-
! [[Visual Prolog]]
| strong
| safe
|
| nominative
| static
|-
! [[Windows PowerShell]]
| strong
| safe
| implicit
|
| dynamic
|-
! [[XL (programming language)|XL]]
| strong
| safe
|
| nominative
| static
|-class="sortbottom"
! Language
! [[Type system#Strong and weak typing|Type strength]]
! [[Type system#Safely and unsafely typed systems|Type safety]]
! Expression of types <!-- related to compatibility but not the same -->
! [[Type system#Compatibility: equivalence and subtyping|"Compatibility"]]
! Type checking
|}
==Usage==
{{Citations missing|date=February 2008}}
{| class="wikitable sortable"
|-
! Language
! Intended use <!--What was this supposed to be used for? Not what is this used for now (that would be hard to verify).-->
! Design goals <!--What approaches were taken other than the paradigms?-->
|-
! [[ActionScript|ActionScript 3.0]]
| Web design
|
|-
! [[Ada (programming language)|Ada]]
| Embedded, Realtime applications
| Reliability
|-
! [[ALGOL]]
| Application
| Readability, Structure
|-
! [[APL (programming language)|APL]]
| Data processing
| Terseness, Expressiveness
|-
! [[AutoIt]]
| Automation, Scripting
| Very quick development
|-
! [[BASIC (programming language)|BASIC]]
| Education
| Simplicity
|-
! [[BLISS (programming language)|BLISS]]
| System
| Type free
|-
! [[Boo (programming language)|Boo]]
| Application
| Python-like syntax, extensibility
|-
! [[C (programming language)|C]]
| System
| Low level access, Minimal constraint
|-
! [[C++]]
| Application, System
| Abstraction, Efficiency, Compatibility
|-
! [[C Sharp (programming language)|C#]]
| Application
| Rapid application development
|-
! [[Chrome (programming language)|Chrome]]
| Application
| Extends Object Pascal to work on .NET
|-
! [[Clean (programming language)|Clean]]
| General
| Correctness, Modularity
|-
! [[Cobol|COBOL]]
| Business and Financial Applications
| Readability
|-
! [[Coldfusion|ColdFusion]]
| Web Development
| Rapid Application Development, Ease of use
|-
! [[Common Lisp|Common Lisp]]
| General
| Standardize [[Lisp (programming language)|Lisp]]
|-
! [[Curl programming language|Curl]]
| [[Rich Internet Applications]]
| Efficiency, Fast Compilation, Expressiveness
|-
! [[D (programming language)|D]]
| Application, System
| Compilability, Correctness, Efficiency
|-
! [[Dylan (programming language)|Dylan]]
| Application, General
| Dynamic but well-suited for commercial software
|-
! [[Eiffel (programming language)|Eiffel]]
| Application
| Correctness, Efficiency, "Design by contract"
|-
! [[Erlang programming language|Erlang]]
| Telecom and distributed applications
| Fault tolerance, Scalability
|-
! [[F Sharp programming language|F#]]
| Application
|
|-
! [[Forth (programming language)|Forth]]
| Application, Embedded systems
| Compact implementations
|-
! [[Fortran]]
| Scientific and numeric applications
| Runtime efficiency, Simple syntax
|-
! [[GraphTalk]]
|
|
|-
! [[Groovy programming language|Groovy]]
| Application
| JVM compatibility
|-
! [[Haskell (programming language)|Haskell]]
| Application
| Lazy evaluation, Explicit side-effect
|-
! [[Io programming language|Io]]
| Application, Host-driven Scripting
|
|-
! [[J (programming language)|J]]
| Data processing
| Terseness, Expressiveness
|-
! [[Java (programming language)|Java]]
| Application
| portability, automatic memory management
|-
! [[JavaScript]]
| Client side web scripting
|
|-
! [[Joy (programming language)|Joy]]
| Functional programming research
| Concatenative
|-
! [[Lisp (programming language)|Lisp]]
| General
| Simple notation for Lambda calculus, [[Homoiconicity]]
|-
! [[Lua (programming language)|Lua]]
| Host-driven Scripting
| Small, embedded, configuration.
|-
! [[Mathematica]]
| Numeric computation and visualization
|
|-
! [[MATLAB|MATLAB M-code]]
| Numeric computation and visualization
|
|-
! [[Modula-2 programming language|Modula-2]]
| Application, systems programming
| Source modules, Co-routines, Brevity.
|-
! [[Modula-3 programming language|Modula-3]]
|
| OO extension of Modula-2
|-
! [[Oberon programming language|Oberon]]
| Application, Type-safe systems programming
| Simplicity, safety and efficiency; Simplifed Modula-2
|-
! [[Objective-C]]
| Application
| Smalltalk like, Component based code reuse, C compatibility
|-
! [[Objective Caml]]
| Application
| Efficiency, Robustness, Correctness
|-
! [[Object Pascal]] (Delphi)
| Application, System
| Readability, Rapid application development, Modularity
|-
! [[Oz (programming language)|Oz]]
| Education
|
|-
! [[Pascal (programming language)|Pascal]]
| Education
| Readability, Discipline, Modularity
|-
! [[Perl]]
| Text processing, Scripting
| Terseness, Expressiveness
|-
! [[PHP]]
| Web Application, CLI
| Robustness and Simplicity
|-
! [[Prolog]]
| Problem solving, Artificial intelligence
| Declarative programming
|-
! [[Python (programming language)|Python]]
| Application, Education, Scripting
| Simplicity, Readability, Expressiveness, Modularity
|-
! [[REALbasic|REALbasic]]
| Application
| Rapid application development, Simplicity, Multi-platform
|-
! [[Ruby programming language|Ruby]]
| Application, Scripting
| Expressiveness, Readability
|-
! [[S-Lang (programming language)|S-Lang]]
| Application, Numerical, Scripting
| Small footprint, Embedded, Fast Numerics
|-
! [[Scala programming language|Scala]]
| Education
|
|-
! [[Scheme (programming language)|Scheme]]
| General, Education
| Minimalistic, Lexical Scoping
|-
! [[Smalltalk]]
| Application, Education
| Uniformity, Pure object oriented
|-
! [[SNOBOL]]
| Text processing
|
|-
! [[Tcl]]
| Application, Scripting
|
|-
! [[Visual Basic|Visual Basic]]
| Application
| Rapid application development, Simplicity
|-
! [[Visual Basic .NET|Visual Basic .NET]]
| Application
| Rapid application development, Simplicity
|-
! [[Windows PowerShell]]
| Automation, Scripting
| Applicability, "One language to program them all"
|-
! [[XL (programming language)|XL]]
|
|
|-class="sortbottom"
! Language
! Intended use <!--What was this supposed to be used for? Not what is this used for now (that would be hard to verify).-->
! Design goals <!--What approaches were taken other than the paradigms?-->
|}
==Expressiveness==
{| class="wikitable" align = "left"
|-
! Language !! Statements ratio<ref>Data from [[Code Complete]]. The ''Statements ratio'' column "shows typical ratios of source statements in several high-level languages to the equivalent code in C. A higher ratio means that each line of code in the language listed accomplishes more than does each line of code in C.</ref>
! Lines ratio<ref>The ratio of line count tests won by each language to the number won by C when using the ''Compare to'' feature at [http://shootout.alioth.debian.org/debian/c.php http://shootout.alioth.debian.org/debian/c.php]. Last updated May, 2006. C gcc was used for C, C++ g++ was used for C++, Fortran G95 was used for Fortran, Java JDK Server was used for Java, and Smalltalk GST was used for Smalltalk.</ref>
|-
| C || 1 || 1
|-
| C++ || 2.5 || 1
|-
| Fortran || 2.5 || 0.8
|-
| Java || 2.5 || 1.5
|-
| MS Visual Basic || 4.5 || ?
|-
| Perl || 6 || 6
|-
| Smalltalk || 6 || 6.25
|-
| Python || 6 || 6.5
|}
The literature on programming languages contains an abundance of informal claims about their relative expressive power, but there's no framework for formalizing such statements nor for deriving interesting consequences.<ref>From [http://citeseer.ist.psu.edu/cache/papers/cs/633/ftp:zSzzSzftp.cs.indiana.eduzSzpubzSzscheme-repositoryzSzdoczSzpubszSzexpress.pdf/felleisen90expressive.pdf On the Expressive Power of Programming Languages], Matthias Felleisen, ESOP '90 3rd European Symposium on Programming.</ref> This chart provides two measures of expressiveness from two different sources. An additional measure of expressiveness, in GZip bytes, can be found with the ''Compare to'' tool on the [http://shootout.alioth.debian.org/ The Computer Language Benchmarks Game].
<br clear="all" />
==Benchmarks==
[[Benchmark (computing)|Benchmarks]] are designed to mimic a particular type of workload on a component or system. The computer programs used for compiling some of the benchmark data in this section may not have been fully optimized, and the relevance of the data is disputed. The most accurate benchmarks are those that are customized to your particular situation. Other people's benchmark data may have some value to others, but proper interpretation brings many [[Benchmark (computing)#Challenges|challenges]]. See [http://shootout.alioth.debian.org/gp4/miscfile.php?file=benchmarking&title=Flawed%20Benchmarks this] page about flawed benchmarks and comparisons. [http://shootout.alioth.debian.org/ The Computer Language Benchmarks Game] site contains a large number of micro-benchmarks of reader-contributed code snippets, with an interface that generates various charts and tables comparing specific programming languages and types of tests.
==See also==
*[[Alphabetical list of programming languages]]
*[[Comparison of basic instructions of programming languages]]
*[[Educational programming language]]
*[[Program Chrestomathy]]
*[[Programming language]]
==References==
<references/>
==Further reading==
*{{cite book|title=A Guide to Programming Languages: Overview and Comparison|first=Ruknet|last=Cezzar|id=ISBN 978-0890068120}}
==External links==
* [http://99-bottles-of-beer.net/ 99-bottles-of-beer.net] One program in over a thousand variations and multiple languages.
* [http://shootout.alioth.debian.org/ The Computer Language Benchmarks Game at Alioth]
* [http://rigaux.org/language-study/syntax-across-languages.html Syntax Across Languages]
* [http://www.jvoegele.com/software/langcomp.html Programming Language Comparison] — A comparison of nine programming languages and related information.
* [http://dada.perl.it/shootout/craps.html Computer Language Shootout Scorecard] — Comparison of benchmark results for dozens of languages.
* [http://merd.sourceforge.net/pixel/language-study/scripting-language/ Scriptometer scores] — Multiple comparisons of 26 programming languages.
* [http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprt2_advances2003.pdf Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java] — PDF — 2003 study
* [http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprt_computer2000.pdf An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl] — PDF — March 2000 refereed journal paper
* [http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprtTR.pdf An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for a search/string-processing program] — PDF — March 2000 technical report (same author, experiment, and data as above, but has additional analysis and charts) <!-- There's a chart on page 8 of 30 of the below document that might go well in this article, but it's very unclear. -->
* [http://www.abap2java.com ABAP2Java.com Comparision and Translation of ABAP and Java]
* [http://faculty.ed.umuc.edu/~meinkej/inss690/carlson.pdf Comparing Web Languages in Theory and Practice] — PDF — Research to fulfill Kristofer J. Carlson's master's degree requirements.
* [http://hopl.murdoch.edu.au/ The Encyclopedia of Computer Languages] — As of May 2006, the encyclopedia lists 8512 computer languages with 17837 bibliographic records featuring 11064 extracts.
* [http://pleac.sourceforge.net/ PLEAC] Programming Language Examples Alike Cookbook.
* [http://www.paulgraham.com/hundred.html The hundred-year language] by Paul Graham. Keynote from PyCon2003 (about [[Python programming language|Python]]): how languages evolve and what increase in CPU speed might bring us.
* [http://www.tiobe.com/tpci.htm TIOBE Programming Community Index] The TIOBE Programming Community index gives an indication of the popularity of programming languages.
* [http://www.ohloh.net/languages OHLOH Language Statistics] The programming languages page on [http://www.ohloh.net Ohloh] gives an actively updated indication of the popularity of programming languages in open-source projects.
* [http://hhh.gavilan.edu/dvantassel/history/history.html History of Programming Language Statements] History and Comparing Programming Languages.
[[Category:Programming language comparisons| ]]
[[Category:Programming language topics]]
* [http://qindex.info/Q_incld/drctry.php?id=webproger&ctgry=2255 Comparison Cheat Sheets between Languages]
[[hi:प्रोग्रामिंग भाषाओं की तुलना]]
[[ko:프로그래밍 언어의 비교]]
[[ja:プログラミング言語の比較]]
[[pt:Comparação entre linguagens de programação]]
[[ru:Сравнение языков программирования]]