プログラミング言語の比較

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

プログラミング言語の比較(プログラミングげんごのひかく)では、プログラミング言語の比較をする。

プログラミング言語は機械(またはコンピュータ)を制御するために使用される。プログラミング言語も自然言語のように意味を定義するために構文的、意味的な規則を使用する。

現在何千ものプログラミング言語があり、多くの職業プログラマが生涯の間に何十もの異なった言語を使用している。毎年新しいものが作られているものの、ほとんどの言語は一般的にはなっていない。

全体の比較[編集]

以下の表は主要なプログラミング言語の全体的および技術的な情報を比較している。詳細は個々の言語のページを参照のこと。

言語 一般的な実行モデル 影響を受けた言語 プログラムパラダイム 型付け 登場時期
Ada ネイティブ Algol, Pascal, C++ (Ada 95), Smalltalk (Ada 95) 並行性, 分散コンピューティング, ジェネリック, 命令型, オブジェクト指向 宣言型の安全な強い静的型付け 1983
C ネイティブ Algol, B 命令型 安全でない弱い静的型付け 1973
C++ ネイティブ C, Simula, Algol 68 命令型, オブジェクト指向, ジェネリック 宣言型の安全でない強い静的型付け 1980
C# JIT Delphi, Java, C++, Ruby 命令型, オブジェクト指向, ジェネリック, マルチプラットフォーム 強い安全である/ない静的型付け 2000
COBOL ネイティブ FLOW-MATIC, COMTRAN 命令型, オブジェクト指向 弱い/強い型付け 1959
Common Lisp ネイティブ LISP, Smalltalk 命令型, 関数型, オブジェクト指向 安全で強い動的型付け 1984
D ネイティブ C , C++, Java, C#, Eiffel, Python, Ruby 命令型, オブジェクト指向, ジェネリック, 契約プログラミング, 関数型 強い型付け 1999
Eiffel ネイティブ Ada, Simula オブジェクト指向, ジェネリック 宣言型の安全な強い静的型付け, 契約プログラミング 1985
Erlang ネイティブ Prolog, Ericsson Pascal, CSP 関数型, 並行性, 分散コンピューティング, マルチプラットフォーム 強い動的型付け late 1980s
Forth インタプリタ / ネイティブ 無し 命令型, スタック指向 型無し 1977
Fortran ネイティブ 無し, Algol(FORTRAN 77以降) 命令型, 手続き型, オブジェクト指向 宣言型の安全な強い静的型付け 1957
Java インタプリタ / JIT C++, Objective-C, C#[1] 命令型, オブジェクト指向, マルチプラットフォーム, ジェネリック 強い静的型付け 1994
JavaScript インタプリタ C, Self, awk, Perl 命令型, オブジェクト指向, 関数型 強い動的型付け 1995
Haskell インタプリタ / ネイティブ Miranda, ML 関数型ジェネリック 強い静的型付け言語、型推論 1998
Mathematica インタプリタ LISP 関数型, 手続き型 強い動的型付け 1986
Objective-C ネイティブ C, Smalltalk 命令型, オブジェクト指向 強い動的/静的型付け 1986
Object Pascal ネイティブ Pascal 命令型, オブジェクト指向 宣言型の安全で(ただし安全でないのも許可してる)強い静的型付け 1985
OCaml インタプリタ / ネイティブ ML, LISP オブジェクト指向, 関数型, 命令型, ジェネリック 構造型の安全で静的型付け、型推論 1996
Perl JIT C, shell, AWK, sed, LISP 関数型, オブジェクト指向, 手続き型 強い動的型付け 1987
PHP インタプリタ Perl, C 命令型, オブジェクト指向 強い動的型付け 1995
Prolog インタプリタ PLANNER, LISP 論理型 安全で強い動的型付け(単一化) 1972
Python インタプリタ ABC, Perl, Modula-3 命令型, オブジェクト指向, 関数型 強い動的型付け(ダック・タイピング) 1991
Ruby インタプリタ Perl, Smalltalk, LISP,CLU 命令型, オブジェクト指向, 関数型 強い動的型付け(ダック・タイピング) 1995
Rust ネイティブ Alef, C#, C++, Cyclone, Erlang, Haskell, Limbo, OCaml, Scheme, Standard ML, Swift 命令型, オブジェクト指向, 関数型, ジェネリック, 並行性 強い静的型付け、型推論 2009
Scala インタプリタ / ネイティブ Java オブジェクト指向, 関数型, ジェネリック 強い静的型付け、部分的な型推論 2003
Scheme インタプリタ / ネイティブ LISP, Algol 60 関数型 動的型付け 1975
Smalltalk JIT Sketchpad, Simula オブジェクト指向, 関数型, 並列コンピューティング, イベント駆動型, 命令型, 宣言型 安全で強い動的型付け, ダック 1971
Swift ネイティブ Objective-C, Rust, Haskell, Ruby, Python, C#, CLU 命令型, オブジェクト指向, 関数型ジェネリック 強い静的型付け、型推論 2014
Visual Basic ネイティブ QuickBASIC コンポーネント指向, イベント駆動型 宣言型の安全で強い静的/動的型付け 1991
Visual Basic .NET JIT Visual Basic オブジェクト指向, イベント駆動型 強い静的型付け 2001

構文の表現力[編集]

プログラミング言語に関する文献には、それらの相対的な表現力に関する非公的な主張は多くみられるものの、各言語の構文を互いに比較して意味ある結果を出すことができる公認された枠組みは無い。[2]

言語 文の数の比[3] 行数の比[4]
C 1 1
C++ 2.5 1
Fortran 2.5 .8
Java 2.5 1.5
Perl 6 6
Python 6 6.5
Smalltalk 6 .625
MS Visual Basic 4.5  ?

次の表は、二つ異なる文献からの表現力の二つの尺度を示す。

この表は同等のプログラムを書いた時のソースコードの「行数」あるいは「文の数」を C語のソース÷他言語のソース で示している。例えば Perlと Cを比べると Cの方が 6倍多くの行数を必要としている。

ただしこれは公的な値ではなく、また生成されたプログラムの実行速度やメモリ要求量を示しているものではない。多くの場合、実行速度やメモリ要求量で見た性能は全く異なっている。

これら表現力あるいは他の性能について、さらなる計測値は、GZip byte の「コンピュータ言語のベンチマークゲーム(the Computer Language Benchmarks Game)」にある。

脚注[編集]

[ヘルプ]
  1. ^ Java 5.0 では、いくつかの機能(Foreach文オートボクシング可変長引数アノテーション列挙型)が C# のようなライバル言語で有効性が証明されてから追加された。[1][2][3]
  2. ^ On the Expressive Power of Programming Languages、Matthias Felleisen、ESOP '90 3rd European Symposium on Programmingより。
  3. ^ コードコンプリートのデータから。 文の数の比は 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.