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

プログラミング言語は、機械(多くの場合、コンピュータ)の動作を制御するために使用されます。自然言語と同様に、プログラミング言語は構文意味の規則に従います。

プログラミング言語は数千種類[ 1 ]あり、毎年新しい言語が生まれています。少数の人々に使われるほど普及する言語はほとんどありませんが、プロのプログラマーはキャリアの中で数十もの言語を使用することもあります。

PerlStandard ML(その名称にもかかわらず)のように広く使用されているプログラミング言語でさえ、ほとんどのプログラミング言語は国際標準(または国家標準)によって標準化されていません。著名な標準化されたプログラミング言語には、 ALGOLCC++ 、JavaScript( ECMAScriptという名称)、SmalltalkPrologCommon LispSchemeIEEE標準)、ISLISPAdaFortranCOBOLSQLXQueryなどがあります。

一般的な比較

以下の表は、一般的に使用されているプログラミング言語の一般情報と技術情報を比較したものです。詳細については、各言語の記事をご覧ください。

型システム

フェイルセーフI/Oとシステムコール

ほとんどのプログラミング言語は、入出力操作やその他のシステムコール(例:chmodkill )が失敗した場合、プログラマが明示的にこれらのイベントの処理方法を指定しない限り、エラーメッセージを出力するか例外をスローします。したがって、これらの言語はこの点において 安全側で動作します。

一部の言語(主に古い言語)では、プログラマーがこの種のエラーに対するチェックを明示的に追加する必要があります。心理学的には、様々な認知バイアス(例えば、楽観バイアス)が初心者にも熟練者にも影響を与え、これらのチェックを省略してしまう可能性があります。これは誤った動作につながる可能性があります。

フェイルセーフI/O、1C:EnterpriseAda(例外)、ALGOL(関数に応じて例外または戻り値)、BallerinaC#Common Lisp(「条件と再起動」システム)、CurryD(失敗時にスロー)、[ 51 ] ErlangFortranGo(結果が明示的に無視されない限り)、GosuHarbourHaskellISLISPJavaJuliaKotlinLabVIEWMathematicaObjective-C(例外)、OCaml(例外)、OpenLispPHPPythonRakuRebolRexx(オプションのシグナルオントラップ処理付きRingRubyRust(結果が明示的に無視されない限り)、Scala[ 52 ] SmalltalkStandard MLSwift ≥ 2.0(例外)、TclVisual BasicVisual Basic .NETVisual PrologWolfram LanguageXojoXPath / XQuery (例外)、Zeek

フェイルセーフI/Oなし: AutoHotkey (グローバルErrorLevelを明示的にチェックする必要がある)、C[ 53 ] COBOLEiffel (実際にはライブラリに依存しており、言語では定義されていない)、GLBasic (一般的にプログラムがクラッシュする)、RPGLua (一部の関数は警告を出さず、例外をスローする)、およびPerl[ 54 ]

C++STL iostreamは失敗時に例外をスローしますが、stdioPOSIXなどのC APIはスローしません)[ 53 ]Object PascalにはいくつかのI/Oチェックが組み込まれていますが、Bash [ 55 ]ではオプションです。

表現力

言語 発言比率[ 56 ]線比[ 57 ]
C11
C++2.51
フォートラン20.8
ジャワ2.51.5
パール66
雑談66.25
パイソン66.5

プログラミング言語に関する文献には、言語の相対的な表現力に関する非公式な主張が数多く記載されていますが、そのような主張を形式化したり、興味深い帰結を導き出したりするための枠組みは存在しません。[ 58 ]この表は、2つの異なる情報源から得られた表現力の指標を示しています。GZipバイト単位で表された表現力の指標は、Computer Language Benchmarks Gameで見つけることができます。[ 59 ]

ベンチマーク

1600 2マンデルブログラフ[ 60 ]を生成するための対数時間の棒グラフ。これはベンチマークゲーム[ 61 ]で報告されている。

ベンチマークは、コンポーネントまたはシステム上の特定の種類のワークロードを模倣するように設計されています。このセクションのベンチマークデータの一部を作成するために使用されたコンピュータプログラムは、完全に最適化されていない可能性があり、データの関連性には異論があります。最も正確なベンチマークは、特定の状況に合わせてカスタマイズされたものです。他の人のベンチマークデータは他の人にとっては価値があるかもしれませんが、適切な解釈には多くの課題が伴います。Computer Language Benchmarks Gameサイトは、ベンチマークデータから過度に一般化することに対して警告していますが、読者が投稿したコードスニペットのマイクロベンチマークが多数掲載されており、特定のプログラミング言語やテストの種類を比較するさまざまなグラフや表を生成するインターフェースを備えています。[ 62 ]

特定の言語の比較のタイムライン

  • 1974年 – Algol 68とPL/Iの比較ノート[ 63 ] – SH Valentine – 1974年11月
  • 1976 – ALGOL 68JOVIAL J3B、PascalSimula 67、TACPOLとTINMAN の比較評価 – 共通高階プログラミング言語の要件。
  • 1977 – PASCALとALGOL 68の比較[ 64 ]Andrew S. Tanenbaum – 1977年6月。
  • 1993 – 5 つの小さな言語とその成長 – BLISSPascalALGOL 68BCPL & CDennis M. Ritchie – 1993 年 4 月。
  • 2009年 – Goについて – ああ、続けよう – GoogleのGoはブランドXのプログラミング言語にどれだけ対抗できるだろうか? – David Given – 2009年11月

参照

すべてのページ、サブカテゴリ、画像を表示するには、「►」をクリックします。

参考文献

  1. ^ 2006年5月現在、オーストラリアのマードック大学でホストされているWayback MachineアーカイブされたDiarmuid PigottのEncyclopedia of Computer Languages には、8512種類のコンピュータ言語が記載されている。
  2. ^ Adaリファレンスマニュアル、ISO/IEC 8652:2005(E) Ed. 3、3.9タグ付き型と型拡張
  3. ^ Adaリファレンスマニュアル、ISO/IEC 8652:2005(E) Ed. 3セクション6:サブプログラム
  4. ^ Adaリファレンスマニュアル、ISO/IEC 8652:2005(E) Ed. 3セクション12:汎用単位
  5. ^ Adaリファレンスマニュアル、ISO/IEC 8652:2005(E) Ed. 3セクション9:タスクと同期
  6. ^ 「分散システムwww.adaic.org .
  7. ^ "Vak.ru" (PDF) . 2017年3月30日時点のオリジナル(PDF)からアーカイブ。 2008年8月9日閲覧
  8. ^ “ISO/IEC JTC1/SC22/WG6 - アルゴル” . www.open-std.org
  9. ^ "Vak.ru" (PDF) . 2017年3月24日時点のオリジナル(PDF)からアーカイブ。 2008年8月9日閲覧
  10. ^ 「IEEE規格協会」 . IEEE規格協会.
  11. ^ 「オブジェクト - 定義と使用法」
  12. ^ 「Ballerina言語仕様」(PDF) . WSO2. 2018年5月1日.オリジナル(PDF)から2018年5月4日にアーカイブ。 2018年5月3日閲覧
  13. ^ a b c POSIX.2、シェルとユーティリティ、コマンドインタープリタ(IEEE Std 1003.2-1992.)
  14. ^ 「Java Community Process(SM) プログラム - JSR: Java 仕様リクエスト - 詳細 JSR# 274 。jcp.org
  15. ^ 「歴史」 . www.bell-labs.com
  16. ^ 「ISO/IEC JTC1/SC22/WG14 - C」。www.open -std.org
  17. ^ 「ISO/IEC JTC1/SC22/WG21 - C++標準化委員会 - ISOCPP」。www.open -std.org
  18. ^ 「Codeproject.com: ラムダ式を使用した C# 3.0 での関数型プログラミング」
  19. ^ ECMA-334; ISO/IEC 23270:2006
  20. ^ 「Clarion - ホーム」 . www.softvelocity.com .
  21. ^ “Crystal” . GitHub . 2021年11月2日.
  22. ^ 「Crystal Generics」 . crystal-lang.org . 2024年4月13日.
  23. ^ 「並行性 - Crystal」 . crystal-lang.org . 2024年4月2日閲覧
  24. ^Bertrand Meyer: Eiffel言語の基本的なメカニズム」 . se.inf.ethz.ch.
  25. ^クロージャ(コンピュータプログラミング)
  26. ^ ECMA-367; ISO/IEC 25436:2006
  27. ^ 「よくある質問 (FAQ) - Go プログラミング言語」 . go.dev .
  28. ^ 「Codewalk: Goのファーストクラス関数」。Goは、ファーストクラス関数、高階関数、ユーザー定義関数型、関数リテラル、クロージャ、複数の戻り値をサポートしています。この豊富な機能セットは、強い型付け言語における関数型プログラミングスタイルをサポートします。
  29. ^ 「Java Community Process(SM) プログラム - JSR: Java 仕様リクエスト - 詳細 JSR# 241 。jcp.org
  30. ^ 「Haskell 2010 言語レポート」 。 2011年12月7日閲覧ほとんどの Haskell 実装は Haskell 2010 標準を拡張します。
  31. ^ 「Juliaにおけるオブジェクト指向プログラミング」。2023年6月4日。Juliaでは、指向プログラミングは主要な焦点ではなく、より一般的な概念である多重ディスパッチに重点が置かれています。しかしながら、複合型と複合メソッドを用いることで、Juliaでもオブジェクト指向プログラミングを実現できます。
  32. ^ 「Julia オブジェクト指向プログラミング」。2021年5月29日。Juliaはオブジェクト指向プログラミング(OOP)を部分的にしかサポートしていません。
  33. ^ 「Julia ドキュメント · Julia 言語」 . docs.julialang.org .
  34. ^ "kotlin-script-examples/jvm/main-kts/MainKts.md at master · Kotlin/kotlin-script-examples" . GitHub .
  35. ^ 「型安全なビルダー | Kotlin」。Kotlinヘルプ
  36. ^ 「M8がリリースされました!」 2014年7月2日。Kotlinの将来のリフレクション機能の第一弾として、Kotlinでプロパティにファーストクラスオブジェクトとしてアクセスできるようになりました。
  37. ^ 「コルーチン | Kotlin」。Kotlinヘルプ
  38. ^ Halcyon (Inworldz) と Open Sims は、追加機能を備えた互換性のある実装を提案しています。
  39. ^ Luaには明示的な「オブジェクト」型はありません(より一般的な「テーブル」型がオブジェクト定義に使用されます)が、オブジェクトメソッド呼び出しのための明示的な構文があります。
  40. ^バージョンリリースには、完全な構文とセマンティクス、リファレンス実装、テストスイートを記載したLuaリファレンスマニュアルが付属します。これらは、KahluaやLLVM-Luaなどの他のLua VM実装やコンパイラを生成するために使用されます。
  41. ^ ISO/IEC 10514-1:1996
  42. ^ ISO 7185
  43. ^ PHPマニュアル第19章 クラスとオブジェクト(PHP 5
  44. ^ PHPマニュアル第17章 関数
  45. ^ 「PostScript言語リファレンスマニュアル」(PDF) 。 2017年2月18日時点のオリジナル(PDF)からアーカイブ。 2017年2月18日閲覧
  46. ^ 「オブジェクト指向プログラミング機能」 . doc.rust-lang.org .
  47. ^ Klabnik, Steve; Nichols, Carol. 「マクロ」 . Rustプログラミング言語.
  48. ^ 「Scheme標準。standards.scheme.org
  49. ^ 「Scheme標準。standards.scheme.org
  50. ^ 「SML '97」 . www.smlnj.org .
  51. ^ 「std.stdio - Dプログラミング言語」 . dlang.org .
  52. ^ Scala は Java 仮想マシン上で実行され、そこからランタイム例外処理を継承します。
  53. ^ a b gcc は未チェックのerrnoに対して警告を発することがあります。Visual Studioの新しいバージョンでは、 stdio使用時に失敗した I/O に対して通常例外がスローされます。
  54. ^オプションでかなりのエラーチェックを有効にすることができますが、デフォルトでは Perl はフェイルセーフではありません。
  55. ^ は、チェックされていない終了ステータスset -eがゼロ以外の場合に終了を有効にします。
  56. ^ McConnell, Steve (2009年11月30日) のデータ。Code Complete。Microsoft Press。p . 100。ISBN 9780735636972ステートメント比率の列には、いくつかの高級言語のソース ステートメントと C の同等のコードの一般的な比率が表示されます。比率が高いということは、リストされている言語の各コード行が C の各コード行よりも多くのことを実行していることを意味します。
  57. ^ McLoone, Jon (2012年11月14日)における、 Compare to機能使用時に各言語が勝った行数テストの勝率とC言語が勝った行数テストの勝率。 「14言語でコード長を測定」 。2012年11月19日時点のオリジナルよりアーカイブC には C gcc、C++ には C++ g++、FORTRAN には FORTRAN G95、Java には Java JDK Server、Smalltalk には Smalltalk GST が使用されました。
  58. ^ Felleisen, Matthias.プログラミング言語の表現力について. ESOP '90 第3回ヨーロッパプログラミングシンポジウム. CiteSeerX 10.1.1.51.4656 . 
  59. ^ 「プログラムの測定方法」 .コンピュータ言語ベンチマークゲーム. 2018年5月29日閲覧
  60. ^マンデルブロ, ベノア・B. (1982). 『自然のフラクタル幾何学』(改訂版)サンフランシスコ. ISBN 0-7167-1186-9. OCLC  7876824 .{{cite book}}: CS1 メンテナンス: 場所の発行元が見つかりません (リンク)
  61. ^ "Mandelbrot" .コンピュータ言語ベンチマークゲーム. 2021年7月9日閲覧。
  62. ^ 「究極のベンチマーク」コンピュータ言語ベンチマークゲーム2018年5月29日閲覧。
  63. ^ Valentine, SH (1974年11月). 「Algol 68とPL/Iの比較ノート」 .コンピュータジャーナル. 17 (4): 325– 331. doi : 10.1093/comjnl/17.4.325 .
  64. ^ 「アムステルダム自由大学」(PDF) .

さらに読む