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

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

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

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

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

 言語 一般的な実行モデル 影響を受けた言語 プログラムパラダイム 型付け 登場時期Ada ネイティブAlgol, Pascal, C++ (Ada 95), Smalltalk (Ada 95)並行性, 分散コンピューティング, ジェネリック, 命令型, オブジェクト指向 宣言型の安全な強い静的型付け 1983C ネイティブAlgol, B命令型安全でない弱い静的型付け 1973C++ ネイティブC, Simula, Algol 68命令型, オブジェクト指向, ジェネリック 宣言型の安全でない強い静的型付け 1980C#JITインタプリタhttps://msdn.microsoft.com/ja-jp/magazine/mt614271.aspx?f=255&MSPPError=-2147217396/ネイティブDelphi, Java, C++, Ruby命令型, オブジェクト指向, ジェネリック, マルチプラットフォーム, 関数型強い安全である/ない静的型付け安全で強い動的型付け (C#4 dynamic) 2000COBOL ネイティブFLOW-MATIC, 命令型, オブジェクト指向弱い/強い型付け 1959Common Lisp ネイティブLISP, Smalltalk命令型, 関数型, オブジェクト指向安全で強い動的型付け 1984D ネイティブC , C++, Java, C#, Eiffel, Python, Ruby命令型, オブジェクト指向, ジェネリック, 契約プログラミング, 関数型強い型付け 1999Eiffel ネイティブAda, Simulaオブジェクト指向, ジェネリック 宣言型の安全な強い静的型付け, 契約プログラミング 1985Erlang ネイティブProlog, Ericsson Pascal, CSP関数型, 並行性, 分散コンピューティング, マルチプラットフォーム強い動的型付け 1986Forth インタプリタ / ネイティブ 無し命令型, スタック指向 型無し 1977Fortran ネイティブ 無し, Algol(FORTRAN 77以降)命令型, 手続き型, オブジェクト指向 宣言型の安全な強い静的型付け 1957GoネイティブC言語、Python、Oberon-2、Limbo、Active Oberon、Communicating Sequential Processes、Pascal、Oberon-2、Smalltalk、Newsqueak、Modula-2 命令型、（オブジェクト指向）、手続き型、リフレクション、イベント駆動型、並列コンピューティング強い静的型付け、型推論2009Java インタプリタ / JITC++, Objective-C, C#Java 5.0 では、いくつかの機能（Foreach文、オートボクシング、可変長引数、アノテーション、列挙型）が C# のようなライバル言語で有効性が証明されてから追加された。命令型, オブジェクト指向, マルチプラットフォーム, ジェネリック強い静的型付け 1994JavaScript インタプリタC, Self, awk, Perl命令型, オブジェクト指向, 関数型強い動的型付け 1995Haskell インタプリタ / ネイティブMiranda, ML関数型、ジェネリック強い静的型付け、型推論 1998Mathematica インタプリタLISP関数型, 手続き型強い動的型付け 1986Objective-C ネイティブC, Smalltalk命令型, オブジェクト指向強い動的/静的型付け 1986Object Pascal ネイティブPascal命令型, オブジェクト指向 宣言型の安全で(ただし安全でないのも許可してる)強い静的型付け 1985OCaml インタプリタ / ネイティブML, LISPオブジェクト指向, 関数型, 命令型, ジェネリック 構造型の安全で静的型付け、型推論 1996Perl JITC, shell, AWK, sed, LISP関数型, オブジェクト指向, 手続き型強い動的型付け 1987PHP インタプリタPerl, C命令型, オブジェクト指向強い動的型付け 1995Prolog インタプリタPLANNER, LISP論理型安全で強い動的型付け（単一化） 1972Python インタプリタABC, Perl, Modula-3命令型, オブジェクト指向, 関数型強い動的型付け(ダック・タイピング) 1991Ruby インタプリタPerl, Smalltalk, LISP,CLU命令型, オブジェクト指向, 関数型強い動的型付け(ダック・タイピング) 1995Rust ネイティブAlef, C#, C++, Cyclone, Erlang, Haskell, Limbo, OCaml, Scheme, Standard ML, Swift命令型, オブジェクト指向, 関数型, ジェネリック, 並行性強い静的型付け、型推論 2009Scala インタプリタ / ネイティブJavaオブジェクト指向, 関数型, ジェネリック強い静的型付け、部分的な型推論 2003Scheme インタプリタ / ネイティブLISP, Algol 60関数型動的型付け 1975Simula ネイティブAlgol 60命令型, オブジェクト指向,シミュレーション用安全で強い動的型付け, ダック 1961Smalltalk JITSketchpad, Simulaオブジェクト指向, 関数型, 並列コンピューティング, イベント駆動型, 命令型, 宣言型安全で強い動的型付け, ダック 1971Swift ネイティブObjective-C, Rust, Haskell, Ruby, Python, C#, CLU命令型, オブジェクト指向, 関数型、ジェネリック強い静的型付け、型推論 2014Visual Basic ネイティブQuickBASICコンポーネント指向, イベント駆動型 宣言型の安全で強い静的/動的型付け 1991Visual Basic .NET JITVisual Basicオブジェクト指向, イベント駆動型強い静的型付け 2001

 構文の表現力 
プログラミング言語に関する文献には、それらの相対的な表現力に関する非公的な主張は多くみられるものの、各言語の構文を互いに比較して意味ある結果を出すことができる公認された枠組みは無い。On the Expressive Power of Programming Languages、Matthias Felleisen、ESOP '90 3rd European Symposium on Programmingより。 

 言語 文の数の比コードコンプリートのデータから。 文の数の比は 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. 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)」にある。

 脚注 

**ひかく
Category:ソフトウェアの比較