Jump to content

Comparison of programming languages: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
iso standard for eiffel
fixed
Line 171: Line 171:
| safe
| safe
| nominative
| nominative
| {{yes: ECMA-367, and ISO/IEC 25436:2006}}
| {{yes}}: ECMA-367, and ISO/IEC 25436:2006
|-
|-
! [[Erlang programming language|Erlang]]
! [[Erlang programming language|Erlang]]

Revision as of 17:26, 28 January 2008

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" Standardized?
ActionScript 3.0 imperative, object-oriented, event-driven strong static safe No
Ada concurrent, distributed, generic, imperative, object-oriented strong static safe nominative Yes, ANSI, ISO
ALGOL 58 imperative strong static safe No
ALGOL 60 imperative strong static safe No
ALGOL 68 concurrent, imperative strong static or dynamic (tagged union) safe structural No
APL array-oriented strong dynamic safe Yes, ISO
BASIC procedural varies by dialect Yes, ANSI
BLISS procedural none n/a n/a n/a No
Boo strong with type inference No
C imperative weak static unsafe Yes
C++ imperative, object-oriented, generic strong static unsafe nominative Yes
C# imperative, object-oriented, generic strong with type inference static safe (but unsafe allowed) Yes
Chrome imperative, object-oriented, generic strong with type inference static safe (but unsafe allowed) No
Clean functional, generic strong with type inference static No
COBOL imperative, object-oriented strong static Yes
ColdFusion procedural, object-oriented weak dynamic (duck) No
Common Lisp imperative, functional, object-oriented strong dynamic safe Yes
D imperative, object-oriented, generic strong static unsafe No
Eiffel imperative, object-oriented, generic strong static safe nominative Yes: ECMA-367, and ISO/IEC 25436:2006
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 Yes, ANSI
Fortran imperative, procedural, object-oriented strong static safe nominative Yes
GraphTalk logic-oriented, object-oriented weak No
Groovy imperative, object-oriented, aspect-oriented strong dynamic (duck) safe n/a No
Haskell functional, generic, lazy evaluation strong with type inference static No
Io imperative, object-oriented strong dynamic No
J array-oriented, function-level, tacit strong dynamic safe No
Java imperative, object-oriented, generic strong static safe nominative No
JavaScript imperative, object-oriented weak dynamic Yes
Joy functional, stack-oriented none n/a n/a n/a No
Lisp procedural, reflective; others vary by dialect strong dynamic No, save Common Lisp
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 Yes
Objective Caml object-oriented, functional, imperative, generic strong with type inference static safe structural No
Object Pascal (Delphi) imperative, object-oriented, generic strong static safe (but unsafe allowed) nominative No
Oz logic, functional, imperative, object-oriented, concurrent - multi paradigm dynamic No
Pascal imperative strong static safe Yes
Perl procedural, reflective, functional, object-oriented strong dynamic No
PHP imperative, object-oriented, reflective weak dynamic No
Prolog logic-oriented strong dynamic Yes, ISO
Python imperative, object-oriented, functional, aspect-oriented strong dynamic (duck) No[2]
Ruby imperative, object-oriented, aspect-oriented strong dynamic (duck) No
S-Lang imperative, procedural strong dynamic safe No
Scala object-oriented, functional, generic strong with partial type inference static No
Scheme functional strong dynamic (latent) Yes
Smalltalk object-oriented, concurrent, event-driven, imperative, declarative strong dynamic (duck) safe Yes, ANSI
Tcl imperative, procedural, event-driven dynamic No
Visual Basic component-oriented, event-driven strong static safe nominative No
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, pipeline strong dynamic (duck) safe No
XL concept programming, imperative (by default), object-oriented (multiple models), strong static safe nominative No

Usage

Language Intended use Design goals
ActionScript 3.0 Web design
Ada Embedded, Realtime applications Reliability
ALGOL Application Readability, Structure
APL Data processing Terseness, Expressiveness
BASIC Educational Simplicity
BLISS System Type free
Boo Application Python-like syntax, extensibility
C System Low level access, Minimal constraint
C++ Application, System Abstraction, Efficiency, Compatibility
C# Application Rapid application development
Chrome Application Extends Object Pascal to work on .NET
Clean General Correctness, Modularity
COBOL Business and Financial Applications Readability
ColdFusion Web Development Rapid Application Development, Ease of use
Common Lisp General Standardize Lisp
D Application, System Compilability, Correctness, Compatibility
Eiffel Application Correctness, Efficiency, "Design by contract"
Erlang Telecom and distributed applications Fault tolerance, Scalability
F# Application
Forth Application, Embedded systems Compact implementations
Fortran Scientific and numeric applications Runtime efficiency, Simple syntax
GraphTalk
Groovy Application JVM compatibility
Haskell Educational Side-effect free
Io Application, Host-driven Scripting
J Data processing, General Programming Terseness, Expressiveness, Powerful Data Manipulation
Java Application "Write once run anywhere"
JavaScript Client side web scripting
Joy Functional programming research Concatenative
Lisp General Simple notation for Lambda calculus, Homoiconicity
Lua Host-driven Scripting
Mathematica Numeric computation and visualization
Oberon Application, Type-safe systems programming Simplicity, safety and efficiency
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 Educational Multi-paradigm
Pascal Application, Educational Readability, Discipline, Modularity
Perl Text processing, Scripting Terseness, Expressiveness
PHP Web Application, CLI Robustness and Simplicity
Prolog Problem solving, Artificial intelligence Declarative programming
Python Application, Educational, Scripting Simplicity, Readability, Expressiveness, Modularity
Ruby Application, Scripting, (Good Web Support) Expressiveness, Readability
S-Lang Application, Numerical, Scripting Small footprint, Embedded, Fast Numerics
Scala Educational
Scheme General, Educational Minimalistic, Lexical Scoping
Smalltalk Application, Educational Uniformity, Pure object oriented
SNOBOL Text processing
Tcl Application, Scripting
Visual Basic Application Rapid application development, Simplicity
Visual Basic .NET Application Rapid application development, Simplicity
Windows PowerShell Automation, Scripting
XL

Expressiveness

Language Statements ratio[3] Lines ratio[4]
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.[5] 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

  1. ^ As of May 2006 Diarmuid Pigott's Encyclopedia of Computer Languages hosted at Murdoch University, Australia lists 8512 computer languages.
  2. ^ 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
  3. ^ 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.
  4. ^ 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.
  5. ^ From On the Expressive Power of Programming Languages, Matthias Felleisen, ESOP '90 3rd European Symposium on Programming.