プログラミング言語/特徴
表示
プログラミング言語の特徴
[編集]プログラミング言語の特徴は、多くのプログラミング言語のブックの「特徴」の節で説明されていますが、表形式にまとめてみました。
| プログラミング言語 | 登場時期 | 処理系 | 型付け | 型推論 | 型アノテーション | 例外 | 関数オーバーロード | 演算子オーバーロード | ラムダ式 | 匿名関数 | キーワード引数 | 可変長引数 | ガベージコレクション | オブジェクト指向 | ミックスイン | 国際規格 | 日本産業規格 | 備考 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fortran | 1954 | コンパイラー | 静的 | ✕ | 必須 | ✕ | ISO/IEC 1539-1:2018 | JIS X3001-1:2009[1] | ||||||||||
| Lisp | 1960 | インタープリター[2] | 動的 | ○[3] | ○ | ○ | ||||||||||||
| COBOL | 1960 | コンパイラー | 静的 | ✕ | 必須 | ○ | ISO/IEC 1989:2014 | JIS X3002:2011 | ||||||||||
| APL | 1964 | インタプリター | ✕ | ISO 8485:1989 | ||||||||||||||
| BASIC | 1964 | インタープリター[4] | 静的 | ✕ | ✕ | ECMA-116† | JIS X3003:1993 | |||||||||||
| PL/I | 1966 | コンパイラー | 静的 | ✕ | 必須 | ✕ | ISO 6160:1979 | |||||||||||
| Simula | 1967 | ✕ | ||||||||||||||||
| Algol | 1958 | コンパイラー | 静的 | ✕ | 必須 | ○ | ||||||||||||
| Forth | 1968 | ✕ | ISO/IEC 15145:1997 | |||||||||||||||
| Pascal | 1969 | コンパイラー 中間コード |
静的 | ✕ | 必須 | ✕ | ISO 7185:1990 | JIS X3008:1994 | ||||||||||
| C言語 | 1972 | コンパイラー | 静的 | ✕ | 必須 | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ISO/IEC 9899:2018 | JIS X3010:2003 | |
| Smalltalk | 1972 | 中間コード | ○ | |||||||||||||||
| Prolog | 1972 | ✕ | ISO/IEC 13211-1:1995/Cor 2:2012 | |||||||||||||||
| ML | 1974 | ✕ | ||||||||||||||||
| Ada | 1979 | ✕ | ISO/IEC 8652:2012 | |||||||||||||||
| C++ | 1983 | コンパイラー | 静的 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ○ | ○ | ISO/IEC 14882:2020 | JIS X3014:2003 | |||
| Objective-C | 1983 | ✕ | ||||||||||||||||
| Eiffel | 1985 | インタープリター | ✕ | ISO/IEC 25436:2006 | ||||||||||||||
| Perl | 1987 | インタープリター | ✕ | |||||||||||||||
| Python | 1990 | インタープリター | ✕ | |||||||||||||||
| Tcl | 1990 | インタープリター | ✕ | |||||||||||||||
| Haskell | 1990 | インタープリター | ✕ | |||||||||||||||
| Perl | 1987 | インタープリター | ✕ | |||||||||||||||
| Python | 1990 | インタープリター | ✕ | |||||||||||||||
| Lua | 1993 | インタプリター | 動的 | ← | ✕ | ○ | ○ | ○ | ○ | ○ | ✕ | ○ | ○ | ○ | ? | |||
| Java | 1995 | 中間コード[5] | 静的 | ○ | ○[6] | ○ | ○ | ○ | ○ | ○ | ○ | ○ | △[7] | |||||
| Ruby | 1995 | インタプリター | 動的 | ← | ✕ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ISO/IEC 30170:2012 | JIS X3017:2013 | |||
| JavaScript | 1997 | インタープリター | 動的 | ← | △[8] | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ECMA-262 | |||||
| ErLang | 1998 | インタープリター[9] | ✕ | |||||||||||||||
| C Sharp | 2000 | 中間コード | ✕ | ISO/IEC 23270:2018 | JIS X3015:2008 | |||||||||||||
| D言語 | 2001 | コンパイラー | 静的 | ○ | ○ | ○ | ✕ | |||||||||||
| Scala | 2003 | 中間コード[5] | 静的 | ○ | ○ | ✕ | ||||||||||||
| Go | 2009 | コンパイラー | 静的 | ○ | ○ | ✕ | ||||||||||||
| Rust | 2010 | コンパイラー | 静的 | ✕ | 必須 | ✕ | ||||||||||||
| Kotlin | 2011 | 中間コード[5] | 静的 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
| Swift | 2014 | コンパイラー | 静的 | ✕ | 必須 | ✕ | ||||||||||||
| Crystal | 2014 | コンパイラー | 動的 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
| Zig | 2015 | コンパイラー | 静的 | ○ | ○ | ✕ |
オブジェクト指向言語の特徴
[編集]| プログラミング言語 | 登場時期 | 処理系 | オブジェクト指向 | 継承 | 抽象クラス | 抽象メソッド | 備考 |
|---|---|---|---|---|---|---|---|
| Lisp | 1960 | インタープリター[10] | CLOS | ||||
| Algol | 1958 | コンパイラー | クラス | ||||
| Smalltalk | 1972 | 中間コード | クラス | 多重 | ○ | ○ | |
| C++ | 1983 | コンパイラー | クラス | 多重 | ○ | ○ | |
| Objective-C | 1983 | ||||||
| Lua | 1993 | インタプリター | プロトタイプ | 単一 | ✕ | ← | |
| Java | 1995 | 中間コード[5] | クラス | 単一 | ○ | ○ | |
| Ruby | 1995 | インタプリター | クラス | 単一 | ✕ | ← | |
| JavaScript | 1997 | インタープリター | プロトタイプ[11] | 単一 | ✕ | ← | |
| C# | 2000 | 中間コード | クラス | ||||
| D | 2001 | コンパイラー | クラス | ||||
| Scala | 2003 | 中間コード[5] | クラス | 単一 | |||
| Kotlin | 2011 | 中間コード[5] | クラス | 単純 | ○ | ○ | |
| Swift | 2014 | コンパイラー | クラス | 単一 | ○ | ○ | |
| Crystal | 2014 | コンパイラー | クラス | 単一 | ○ | ○ |
脚註
[編集]- ^ ISO/IEC 1539-1: 2004, Information technology — Programming languages — Fortran —Part 1: Base language (IDT);IDT(identical;一致)国家規格は国際規格と一致する。
- ^ Common Lispの仕様段階でコンパイラーの実装が意識されている、ただし実行時にもインタープリターの機能が評価される可能性があるので、ランタイム環境にインタープリターがほぼまるまる含まれる。
- ^ コンパイル時に型推論により型を限定したコードを生成
- ^ コンパイラー実装も過去にはあった。
- ^ 5.0 5.1 5.2 5.3 5.4 5.5 JavaバイトコードをJava仮想マシンにより実行するので、ソースコードからバイトコードにコンパイルするコンパイル型とも、バイトコードをインタープリターが実行するインタープリター型とも言えます。
- ^ JSR 308の解説: Javaの型アノテーション
- ^ Java8のインタフェースのデフォルト実装などを駆使すれば可能ですが、言語機能といえるか疑問なので△
- ^ ECMAScript proposal: Type Annotations
- ^ HiPEというコンパイラー実装もある。
- ^ Common Lispの仕様段階でコンパイラーの実装が意識されている、ただし実行時にもインタープリターの機能が評価される可能性があるので、ランタイム環境にインタープリターがほぼまるまる含まれる。
- ^ ES5でクラス構文が追加されましたが、プロトタイプベースであることに変わりはありません。