プログラミング言語の比較 (プログラミングげんごのひかく)の記事では、コンピュータ・プログラミング言語 の比較について説明する。
(コンピュータ ・)プログラミング言語は、コンピュータのプログラム (コンピュータ・プログラム)を記述する(プログラミング する)ための形式言語 である。形式言語であるので、一般に、自然言語 とは異なり形式的で曖昧さが避けられ人工的に定義された構文(統語・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] 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 Processes 、Pascal 、Oberon-2 、Smalltalk 、Newsqueak、Modula-2 命令型 、(オブジェクト指向 [2] )、手続き型 、リフレクション 、イベント駆動型 、並列コンピューティング 強い 静的型付け 、型推論 2009 Java インタプリタ / JIT C++ , Objective-C , C# [3] 命令型 , オブジェクト指向 , マルチプラットフォーム , ジェネリック 強い 静的型付け 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
構文の表現力 プログラミング言語に関する文献には、それらの相対的な表現力に関する非公的な主張は多くみられるものの、各言語の構文を互いに比較して意味ある結果を出すことができる公認された枠組みは無い。[4]
言語 文の数の比[5] 行数の比[6] 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 )」にある。
脚注 ^ https://msdn.microsoft.com/ja-jp/magazine/mt614271.aspx?f=255&MSPPError=-2147217396 ^ “Frequently Asked Questions (FAQ) - The Go Programming Language ”. golang.org . 2019年6月21日 閲覧。 ^ Java 5.0 では、いくつかの機能(Foreach文 、オートボクシング 、可変長引数 、アノテーション 、列挙型 )が C# のようなライバル言語で有効性が証明されてから追加された。[1] [2] [3] ^ 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. 低水準言語 高水準言語
1950年代 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代
架空の言語