出典: フリー百科事典『ウィキペディア(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 Processes 、Pascal 、Oberon-2 、Smalltalk 、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 )」にある。
^ https://msdn.microsoft.com/ja-jp/magazine/mt614271.aspx?f=255&MSPPError=-2147217396
^ “Native AOT deployment overview - .NET ”. 2024年6月23日 閲覧。
^ “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年代
架空の言語