コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

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

出典: フリー百科事典『ウィキペディア(Wikipedia)』

プログラミング言語の比較(プログラミングげんごのひかく)の記事では、コンピュータ・プログラミング言語の比較について説明する。

コンピュータ・)プログラミング言語は、コンピュータのプログラム(コンピュータ・プログラム)を記述する(プログラミングする)ための形式言語である。形式言語であるので、一般に、自然言語とは異なり形式的で曖昧さが避けられ人工的に定義された構文(統語・syntax。統語論の記事を参照)を持ち、自然言語とは異なり計算理論のための意味論(semantics)を持つ。

現在何千ものプログラミング言語があり、多くの職業プログラマや多くの非職業プログラマが生涯の間に何十もの異なった言語を使用している。一方で、多くの職業プログラマや多くの非職業プログラマが、好みを理由として、あるいは、異なった言語を学習できないためか、一種類ないし僅かな類似した言語のみを使用している。毎年新しいものが作られているものの、ほとんどの言語は一般的にはなっていない。

全体の比較

[編集]

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

言語 一般的な実行モデル 影響を受けた言語 プログラムパラダイム 型付け 登場時期
Ada ネイティブ Algol, Pascal, C++ (Ada 95), Smalltalk (Ada 95) 並行性, 分散コンピューティング, ジェネリック, 命令型, オブジェクト指向 宣言型の安全な強い静的型付け 1983
C ネイティブ Algol, B 命令型 安全でない弱い静的型付け 1973
C++ ネイティブ C, Simula, Algol 68 命令型, オブジェクト指向, ジェネリック 宣言型の安全でない強い静的型付け 1980
C# JIT
インタプリタ[1]/ネイティブ[2]
Delphi, Java, C++, Ruby 命令型, オブジェクト指向, ジェネリック, マルチプラットフォーム, 関数型 強い安全である/ない静的型付け
安全で強い動的型付け (C#4 dynamic)
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 関数型, 並行性, 分散コンピューティング, マルチプラットフォーム 強い動的型付け 1986
Forth インタプリタ / ネイティブ 無し 命令型, スタック指向 型無し 1977
Fortran ネイティブ 無し, Algol(FORTRAN 77以降) 命令型, 手続き型, オブジェクト指向 宣言型の安全な強い静的型付け 1957
Go ネイティブ C言語Python、Oberon-2、Limbo、Active Oberon、Communicating Sequential ProcessesPascalOberon-2Smalltalk、Newsqueak、Modula-2 命令型、(オブジェクト指向[3])、手続き型リフレクションイベント駆動型並列コンピューティング 強い静的型付け、型推論 2009
Java インタプリタ / JIT C++, Objective-C, C#[4] 命令型, オブジェクト指向, マルチプラットフォーム, ジェネリック 強い静的型付け 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
Simula ネイティブ Algol 60 命令型, オブジェクト指向,シミュレーション 安全で強い動的型付け, ダック 1961
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

構文の表現力

[編集]

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

言語 文の数の比[6] 行数の比[7]
C 1 1
C++ 2.5 1
Fortran 2.5 0.8
Java 2.5 1.5
Perl 6 6
Python 6 6.5
Smalltalk 6 6.25
MS Visual Basic 4.5 ?

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

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

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

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

脚注

[編集]
  1. ^ https://msdn.microsoft.com/ja-jp/magazine/mt614271.aspx?f=255&MSPPError=-2147217396
  2. ^ Native AOT deployment overview - .NET”. 2024年6月23日閲覧。
  3. ^ Frequently Asked Questions (FAQ) - The Go Programming Language”. golang.org. 2019年6月21日閲覧。
  4. ^ Java 5.0 では、いくつかの機能(Foreach文オートボクシング可変長引数アノテーション列挙型)が C# のようなライバル言語で有効性が証明されてから追加された。[1][2][3]
  5. ^ On the Expressive Power of Programming Languages、Matthias Felleisen、ESOP '90 3rd European Symposium on Programmingより。
  6. ^ コードコンプリートのデータから。 文の数の比は 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.
  7. ^ 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.