プログラミング言語の比較(プログラミングげんごのひかく)では、プログラミング言語の比較をする。
プログラミング言語は機械(またはコンピュータ)を制御するために使用される。プログラミング言語も自然言語のように意味を定義するために構文的、意味的な規則を使用する。
現在何千ものプログラミング言語があり、毎年新しいものが作られているものの、ほとんどの言語は一般的にはなっていない。しかし、多くの職業プログラマが生涯の間に何十もの異なった言語を使用している。
全体の比較 [編集]
以下の表は主要なプログラミング言語の全体的および技術的な情報を比較している。詳細は個々の言語のページを参照のこと。
| 言語 |
一般的な実行モデル |
影響を受けた言語 |
プログラムパラダイム |
型付け |
登場時期 |
| 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 |
| ColdFusion |
JIT |
HTML |
手続き型, 関数型, オブジェクト指向 |
弱い動的型付け (ダック・タイピング) |
1995 |
| Common Lisp |
ネイティブ |
LISP, Smalltalk |
命令型, 関数型, オブジェクト指向 |
安全で強い動的型付け |
1984 |
| D |
ネイティブ |
C , C++, Java, C# |
命令型, オブジェクト指向, ジェネリック, 契約プログラミング |
強い型付け |
2000 |
| 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 |
| Objective Caml |
インタプリタ / ネイティブ |
ML, LISP |
オブジェクト指向, 関数型, 命令型, ジェネリック |
構造型の安全で静的型付け、型推論 |
1996 |
| Object Pascal |
ネイティブ |
Pascal |
命令型, オブジェクト指向 |
宣言型の安全で(ただし安全でないのも許可してる)強い静的型付け |
1985 |
| 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 |
| Scala |
インタプリタ / ネイティブ |
Java |
オブジェクト指向, 関数型, ジェネリック |
強い静的型付け、部分的な型推論 |
2003 |
| Scheme |
インタプリタ / ネイティブ |
LISP, Algol 60 |
関数型 |
動的型付け |
1975 |
| Smalltalk |
JIT |
Sketchpad, Simula |
オブジェクト指向, 関数型, 並列コンピューティング, イベント駆動型, 命令型, 宣言型 |
安全で強い動的型付け, ダック |
1971 |
| Visual Basic |
ネイティブ |
QuickBASIC |
コンポーネント指向, イベント駆動型 |
宣言型の安全で弱い/強い静的/動的型付け |
1991 |
| Visual Basic .NET |
JIT |
Visual Basic |
オブジェクト指向, イベント駆動型 |
強い静的型付け |
2001 |
構文の表現 [編集]
| 言語 |
文の種類の比[2] |
行の比[3] |
| 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 |
? |
プログラミング言語に関する文献はそれらの相対的な表現力に関して多くのくだけた主張を含んでいるものの、文やおもしろい結果を引き出すための一定の形の枠組みがない。[4] この図は2つの異なったソースからの表現力測定を提供する。表現力測定に追加でGzip bytesで比較するツールがComputer Languages Shootoutにある。
脚注 [編集]
- ^ Java 5.0 では、いくつかの機能(Foreach文、オートボクシング、可変引数、アノテーション、列挙型)が C# のようなライバル言語で有効性が証明されてから追加された。[1][2][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.
- ^ 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.
- ^ On the Expressive Power of Programming Languages、Matthias Felleisen、ESOP '90 3rd European Symposium on Programmingより。