ここでは各種プログラミング言語の仕様を比較します。 あくまでも言語仕様としてその機能があるかという観点に則しており、 各個の機能についての是非はまた別の問題です。 例えば一般にgotoの濫用は害が大きいと思いますが、 goto類似の機能が欲しい状況もしばしばありますね。 間違っている場所があれば はてなのコメント欄 で教えてください。
| 記号 | 意味 |
|---|---|
| o | 言語の基本機能として備えている |
| @ | 基本機能ではないが仕様に含まれる |
| ! | o,@の機能から容易に実現できる |
| ∆ | 不完全ながら備えている |
| x | 備えていない |
| ? | 私もよく判っていない |
| () | 機能に追加する計画がある |
ただ、基本的にはoが多いほど大きな言語、 @,!が多いほど小さくても表現力の高い言語ということになります。 xとしてある項目でも原理的には実現可能なので、 達成するのが面倒かどうかという程度の問題と思ってください。
補足です。 @には基本機能の組み合わせで実現されていた機能だったり、 標準ライブラリで実現されていたりするものが含まれます。 !には標準ライブラリに見つからなかったものの、 簡単に実装できそうなものが含まれます。 処理系に依存する場合は数えません。
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GNU Assembler | o | x | x | 破壊 | x | x | x | x | x | x | x | o | x | o | x | x | x | ∆ | x | x |
| Fortran | o | o | o | 破壊 | 静的 | ∆ | x | o | x | x | x | o | x | o | o | x | x | ∆ | x | x |
| COBOL(自信なし) | o | x | o | 破壊 | 静的 | o | x | o | x | x | x | o | x | o | o | x | x | x | x | x |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| C言語 | o | o | o | 破壊 | 静的 | o | x | o | o | x | x | o | x | o | o | @ | x | ∆ | x | x |
| C++ | o | o | o | 破壊 | 静的 | o | x(∆) | o | o | x(∆) | x(∆) | o | x | o | o | o | x | o | o | x |
| D言語 | o | o | o | 破壊 | 静的 | o | ∆ | o | o | o | ∆(o) | o | o | o | o | o | x | o | o | o |
| Objective-C | o | o | o | 破壊 | 静的 | o | x | o | o | x | x | o | x | o | o | o | x | ∆ | o | x |
| Delphi | o | o | o | 破壊 | 静的 | o | x | o | o | x | x | o | x | o | o | o | x | ∆ | o | x |
| Java | ∆ | o | o | 破壊 | 静的 | o | x(∆) | ∆(o) | ∆(o) | ∆(o) | x(∆) | o | x | x | o | o | x | x | o | x |
| C# | ∆ | o | o | 破壊 | 静的 | o | ∆ | o | o | o | o | o | ∆ | o | o | o | x | o | o | x |
| Smalltalk(自信なし) | o | o | o | 破壊 | 動的 | o | x | ∆ | o | o | o | o | x | x | o | o | ∆ | x | o | o |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| Ruby | ∆ | o | x | 破壊 | 動的 | o | x | ∆ | ∆ | o | o | o | x | x | o | o | o | x | o | o |
| Python | o | o | o | 破壊 | 動的 | o | x | o | o | o | ∆ | o | x | x | o | o | x | x | o | o |
| Groovy | o | o | o | 破壊 | 動的 | o | x | o | o | o | o | o | x | x | o | o | x | x | o | o |
| JavaScript | ∆ | o | ∆ | 破壊 | 動的 | x | x | o | o | o | o | o | x | x | o | o | x | x | o | o |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| Awk | o | ∆ | x | 破壊 | 動的 | x | x | o | x | x | x | o | x | x | o | x | x | ? | x | ? |
| Tcl | o | o | x | 破壊 | x | x | x | o | x | x | x | o | o | x | o | x | x | x | o | o |
| Visual Basic | o | o | o | 破壊 | 静的 | o | x | o | o | o | ? | o | x | o | o | o | x | x | o | o |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| Scheme | o | o | x | 破壊 | 動的 | ! | x | o | o | o | o | o | ∆ | ! | @ | o | o | o | ! | o |
| Common Lisp | o | o | x | 破壊 | 動的 | @ | x | o | o | o | o | o | ∆ | ! | @ | @ | ! | o | @ | o |
| emacs lisp | o | o | x | 破壊 | 動的 | ! | x | o | o | o | x | o | ∆ | ! | ! | ! | ! | o | ! | o |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| Haskell | o | o | o | 単一 | 静的 | o | o | o | o | o | o | ∆ | o | x | ! | ! | ! | x | x | x |
| Prolog(自信なし) | x | o | x | 単一 | 静的 | ? | x | o | ? | ? | ? | ∆ | o | x | ! | ? | ? | x | x | x |
| 大域変数 | 局所変数 | 変数宣言 | 代入 | 型 | ユーザ型 | 型推論 | 関数 | ファンクタ | 無名関数 | クロージャ | 正格評価 | 遅延評価 | GOTO | ループ | 大域脱出 | 一級継続 | マクロ | OOPL | eval | |
| Forth | o | ! | o | 破壊 | x | x | x | o | ∆ | x | x | o | x | o | o | ! | ! | o | x | o |
| Brainf*ck | ∆ | x | x | 破壊 | x | x | x | x | x | x | x | o | x | x | o | x | x | x | x | x |