Programming Language Comparison
Programming languages are used for controlling the behavior of a machine (often a computer). Like natural languages, programming languages have syntactic and semantic rules used to define meaning.
There are thousands of programming languages[1]
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 programmers use dozens of different languages during their career.
General comparison
The following table compares general and technical information for a selection of commonly used programming languages.
See the individual languages' articles for further information. Please
note that the following table may be missing some information.
| Language |
Paradigm(s)   |
Type strength |
Type checking |
Type safety |
Compatibility |
contracts |
| ActionScript 3.0 |
imperative, object-oriented, event-driven |
strong |
static |
safe |
|
No |
| Ada |
concurrent, distributed, generic, imperative, object-oriented |
strong |
static |
safe |
nominative |
No |
| ALGOL 58 |
imperative |
strong |
static |
safe |
|
No |
| ALGOL 60 |
imperative |
strong |
static |
safe |
|
No |
| ALGOL 68 |
concurrent, imperative |
strong |
? |
safe |
structural |
No |
| APL |
array-oriented |
strong |
dynamic |
safe |
|
No |
| BASIC |
|
|
|
|
|
No |
| BLISS |
functional |
none |
n/a |
n/a |
n/a |
No |
| C |
imperative |
weak |
static |
unsafe |
|
Yes |
| C++ |
imperative, object-oriented, generic |
strong |
static |
unsafe |
nominative |
Yes |
| C# |
imperative, object-oriented, generic |
strong |
static |
safe (but unsafe allowed) |
|
Yes |
| Clean |
functional, generic |
strong with type inference |
static |
|
|
No |
| COBOL |
imperative, object-oriented |
strong |
static |
|
|
No |
| ColdFusion |
procedural, functional, object-oriented |
weak |
dynamic (duck) |
|
|
No |
| Common Lisp |
imperative, functional, object-oriented |
strong |
dynamic |
safe |
|
Yes |
| D |
imperative, object-oriented, generic |
strong |
static |
unsafe |
|
Yes, included |
| Eiffel |
imperative, object-oriented, generic |
strong |
static |
safe |
nominative |
Yes, included |
| Erlang |
functional, concurrent, distributed |
strong |
dynamic |
|
|
No |
| F# |
functional, object-oriented, imperative, generic |
strong with type inference |
static |
safe |
nominative |
No |
| Forth |
imperative, stack-oriented |
none |
n/a |
n/a |
n/a |
No |
| Fortran |
imperative, procedural, object-oriented |
strong |
static |
safe |
nominative |
No |
| GraphTalk |
logic-oriented, object-oriented |
weak |
|
|
|
No |
| Groovy |
imperative, object-oriented, functional, aspect-oriented |
strong |
dynamic (duck) |
safe |
n/a |
Yes |
| Haskell |
functional, generic, lazy evaluation |
strong with type inference |
static |
|
|
No |
| Io |
imperative, object-oriented |
strong |
dynamic |
|
|
No |
| Java |
imperative, object-oriented, generic |
strong |
static |
safe |
nominative |
Yes |
| JavaScript |
imperative, object-oriented, functional |
weak |
dynamic |
|
|
Yes |
| Joy |
functional, stack-oriented |
none |
n/a |
n/a |
n/a |
No |
| Lisp |
functional |
strong |
dynamic |
|
|
No |
| Lua |
procedural, imperative, reflective |
strong |
dynamic (duck) |
safe |
|
No |
| Mathematica |
functional, procedural |
strong |
dynamic |
|
|
No |
| Oberon |
imperative, object-oriented |
strong |
static |
safe |
|
No |
| Objective-C |
imperative, object-oriented |
strong |
static |
|
|
No |
| Objective Caml |
object-oriented, functional, imperative, generic |
strong with type inference |
static |
safe |
structural |
No |
| Object Pascal (Delphi) |
imperative, object-oriented |
strong |
static |
safe (but unsafe allowed) |
nominative |
No |
| Oz |
logic, functional, imperative, object-oriented, concurrent - multi paradigm |
|
dynamic |
|
|
No |
| Pascal |
imperative |
strong |
static |
safe |
|
No |
| Perl |
functional, object-oriented, procedural |
strong |
dynamic |
|
|
Yes |
| PHP |
imperative, object-oriented, reflective |
weak |
dynamic |
|
|
No |
| Prolog |
logic-oriented |
strong |
dynamic |
|
|
No |
| Python |
imperative, object-oriented, functional, aspect-oriented |
strong |
dynamic (duck) |
|
|
Yes |
| Ruby |
imperative, object-oriented, functional, aspect-oriented |
strong |
dynamic (duck) |
|
|
Yes |
| Scala |
object-oriented, functional, generic |
strong with partial type inference |
static |
|
|
No |
| Scheme |
functional |
strong |
dynamic (latent) |
|
|
Yes |
| Smalltalk |
object-oriented, functional, concurrent, event-driven, imperative, declarative |
strong |
dynamic (duck) |
safe |
|
No |
| Tcl |
functional, object-oriented, imperative, procedural, event-driven |
|
dynamic |
|
|
No |
| Visual Basic |
component-oriented, event-driven |
strong |
static |
safe |
nominative |
Limited (VB5/6 only) |
| Visual Basic .NET |
object-oriented, event-driven |
strong |
static |
|
|
No |
| Visual Prolog |
logical, object-oriented, functional, event-driven, imperative, declarative |
strong |
static |
safe |
nominative |
No |
| Windows PowerShell |
imperative, object-oriented, functional, pipeline |
strong |
dynamic (duck) |
safe |
|
No |
| XL |
concept programming, imperative (by default), object-oriented (multiple models), |
strong |
static |
safe |
nominative |
No |
Usage
Expressiveness
| Language |
Statements ratio[2] |
Lines ratio[3] |
| 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.[4]
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 The Computer Language Benchmarks Game.
Benchmarks
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 challenges. See this page about flawed benchmarks and comparisons. 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
References
- ^ As of May 2006 Diarmuid Pigott's Encyclopedia of Computer Languages hosted at Murdoch University, Australia lists 8512 computer languages.
- ^ 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.
- ^ 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.
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.
- ^ From On the Expressive Power of Programming Languages, Matthias Felleisen, ESOP '90 3rd European Symposium on Programming.
External links
- 99-bottles-of-beer.net One program in over a thousand variations and multiple languages.
- The Computer Language Benchmarks Game at Alioth
- Language Study — Syntax across languages.
- Programming Language Comparison — A comparison of nine programming languages and related information.
- Computer Language Shootout Scorecard — Comparison of benchmark results for dozens of languages.
- Scriptometer scores — Multiple comparisons of 26 programming languages.
- Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java — PDF — 2003 study
- An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl — PDF — March 2000 refereed journal paper
- 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)
- ABAP2Java.com Comparision and Translation of ABAP and Java
- Comparing Web Languages in Theory and Practice — PDF — Research to fulfill Kristofer J. Carlson's master's degree requirements.
- The Encyclopedia of Computer Languages — As of May 2006, the encyclopedia lists 8512 computer languages with 17837 bibliographic records featuring 11064 extracts.
- PLEAC Programming Language Examples Alike Cookbook.
- The hundred-year language by Paul Graham. Keynote from PyCon2003 (about Python): how languages evolve and what increase in CPU speed might bring us.
- TIOBE Programming Community Index The TIOBE Programming Community index gives an indication of the popularity of programming languages.
- OHLOH Language Statistics The programming languages page on Ohloh gives an actively updated indication of the popularity of programming languages in open-source projects.
- Comparison Cheat Sheet between Languages
This article is licensed under the GNU Free Documentation License. It uses material from Wikipedia Encyclopedia article "Comparison of Programming Languages"
|