プログラミング言語

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Cプログラミング言語で記述された単純なコンピュータプログラムソースコード灰色の線は、プログラムを自然言語で人間に説明するのに役立つコメントですときにコンパイルおよび実行し、それが「出力が得られます、こんにちは、世界を!」。

プログラミング言語はある形式言語のセットを含む文字列の各種製造機械コード出力。プログラミング言語はコンピュータ言語の一種でありアルゴリズムを実装するためにコンピュータプログラミングで使用されます

ほとんどのプログラミング言語は、コンピューター用命令構成されています一般的なプログラミング言語ではなく特定の命令のセットを使用するプログラム可能なマシンがあります。 1800年代初頭以来、プログラムは、ジャカード織機オルゴール自動ピアノなどの機械の動作を指示するために使用されてきました[1]これらのマシンのプログラム(自動ピアノの巻物など)は、さまざまな入力や条件に応じてさまざまな動作を生成しませんでした。

何千もの異なるプログラミング言語が作成されており、毎年さらに多くの言語が作成されています。多くのプログラミング言語は命令型で(つまり、実行する一連の操作として)記述されますが、他の言語は宣言型を使用します(つまり、目的の結果を実現する方法ではなく、指定されます)。

プログラミング言語の記述は通常、構文(形式)と意味論(意味)の2つのコンポーネントに分けられます。一部の言語は仕様書で定義されていますが(たとえば、Cプログラミング言語はISO標準で指定されています)、他の言語(Perlなど)には参照として扱われる主要な実装があります。一部の言語には両方があり、標準によって定義された基本言語と、主要な実装から取得された拡張機能が一般的です。

プログラミング言語理論は、プログラミング言語の設計、実装、分析、特性評価、および分類を扱うコンピュータサイエンスのサブフィールドです。

定義

プログラミング言語は、計算またはアルゴリズムの仕様であるプログラムを作成するための表記法です[2]一部の著者は、「プログラミング言語」という用語を、考えられるすべてのアルゴリズムを表現できる言語に限定しています。[2] [3]プログラミング言語を構成するものにとって重要と見なされることが多い特性には、次のものがあります。

機能とターゲット
コンピュータ・プログラミング言語である言語の書き込みに使用されるコンピュータプログラムを伴う、コンピュータ計算の何らかの行う[4]又はアルゴリズムを、おそらくのような外部デバイス制御プリンタディスクドライブロボット[5]などを。たとえば、PostScriptプログラムは、コンピューターのプリンターやディスプレイを制御するために、別のプログラムによって作成されることがよくあります。より一般的には、プログラミング言語は、いくつかの、場合によっては抽象的なマシンでの計算を記述します。プログラミング言語の完全な仕様には、その言語のマシンまたはプロセッサの説明(おそらく理想化されている)が含まれていることが一般に認められています。[6]ほとんどの実際的な状況では、プログラミング言語にはコンピューターが含まれます。その結果、プログラミング言語は通常、このように定義され、研究されます。[7]プログラミング言語は、自然言語が人と人との対話にのみ使用されるという点で自然言語と異なりますが、プログラミング言語では、人間が機械に命令を伝達することもできます。
抽象化
プログラミング言語には通常、データ構造を定義および操作したり、実行フローを制御したりするための抽象化含まれていますプログラミング言語が適切な抽象化をサポートするという実際的な必要性は、抽象化の原則によって表されます。[8]この原則は、そのような抽象化を適切に使用するためのプログラマーへの推奨事項として策定されることがあります。[9]
表現力
計算の理論は、彼らが発現することが可能な計算によって言語を分類します。すべてのチューリング完全言語は、同じアルゴリズムのセットを実装できますANSI / ISO SQL-92とCharityは、チューリング完全ではない言語の例ですが、プログラミング言語と呼ばれることもあります。[10] [11]

構造化データを定義するXMLHTMLtroffなどのマークアップ言語は、通常、プログラミング言語とは見なされません。[12] [13] [14]ただし、計算セマンティクスが定義されている場合、プログラミング言語はマークアップ言語と構文を共有できます。たとえば、XSLTは、完全にXML構文を使用するチューリング完全言語です。[15] [16] [17]さらに、ドキュメントの構造化に主に使用されるLaTeXには、チューリング完全サブセットも含まれています。[18] [19]

コンピュータ言語という用語は、プログラミング言語と同じ意味で使用されることがあります。[20]ただし、両方の用語の使用法は、それぞれの正確な範囲を含め、著者によって異なります。ある使用法では、プログラミング言語をコンピューター言語のサブセットとして説明しています。[21]同様に、コンピュータープログラムの表現とは異なる目的を持つコンピューティングで使用される言語は、一般的に指定されたコンピューター言語です。たとえば、マークアップ言語は、プログラミングに使用することを意図していないことを強調するために、コンピューター言語と呼ばれることもあります。[22]

別の使用法では、プログラミング言語を抽象マシンをプログラミングするための理論的構成概念と見なし、コンピューター言語を、有限のハードウェアリソースを持つ物理コンピューター上で実行されるそのサブセットと見なします[23] John C. Reynoldsは、形式仕様言語は実行を目的とした言語と同じくらい多くのプログラミング言語であることを強調しています。彼はまた、コンピューターの動作に影響を与えるテキストおよびグラフィック入力フォーマットは、一般にチューリング完全ではないという事実にもかかわらず、プログラミング言語であると主張し、プログラミング言語の概念の無知が入力フォーマットの多くの欠陥の理由であると述べています。[24]

歴史

初期の開発

Colossusなどの非常に初期のコンピューターは、回路を変更したり、物理制御のバンクを設定したりすることによりストアドプログラムの助けを借りずにプログラムされていました

少し後に、プログラムは機械語書くことができ、プログラマーはハードウェアが直接実行できる数値形式で各命令を書きます。たとえば、2つのメモリ位置に値を追加する命令は、「追加」操作を選択する「オペコード」と2つのメモリ位置の3つの数値で構成されている場合があります。プログラムは、10進数またはバイナリ形式で、パンチカード、紙テープ、磁気テープから読み込まれる、コンピューターのフロントパネルのスイッチで切り替えられました。機械語は後に第1世代プログラミング言語(1GL)と呼ばれました

次のステップは、いわゆる第2世代プログラミング言語(2GL)またはアセンブリ言語の開発でした。これらは、特定のコンピューターの命令セットアーキテクチャーと密接に関連しています。これらは、プログラムをはるかに人間が読める形式にするのに役立ち、プログラマーが面倒でエラーが発生しやすいアドレス計算から解放されました。

最初の高級プログラミング言語、または第3世代プログラミング言語(3GL)は、1950年代に作成されました。コンピューター用に設計された初期の高級プログラミング言語は1943年から1945年の間にコンラートツーゼによってドイツのZ3用に開発されたプランカルキュールでした。しかし、1998年から2000年まで実装されませんでした。[25]

1949年に提案されたジョン・モークリーショートコードは、電子計算機用に開発された最初の高級言語の1つでした[26]機械語とは異なり、Short Codeステートメントは、理解しやすい形式で数式を表しました。ただし、プログラムは実行するたびにマシンコードに変換する必要があり、同等のマシンコードを実行するよりもプロセスが大幅に遅くなりました。

で、マンチェスター大学アリック・グレニーが開発した自動コードを1950年代初頭。プログラミング言語として、コンパイラ使用して言語を機械語に自動的に変換しました。最初のコードとコンパイラーは、マンチェスター大学のMark 1コンピューター用に1952年に開発され、最初にコンパイルされた高級プログラミング言語と見なされています[27] [28]

2番目のオートコードは1954年にRAブルッカーによってマーク1用に開発され、「マーク1オートコード」と呼ばれていました。ブルッカーはまた、マンチェスター大学と共同で1950年代にフェランティマーキュリーの自動コードを開発しました。バージョンEDSAC 2は、によって考案されたDFハートレーケンブリッジ大学の数学研究所が水銀自動コードから直開発は現地の状況に適合し、そのオブジェクトコードの最適化とソース言語のために認められた、EDSAC 2自動コードとして知られている1961年当時進んでいた診断。現代的であるが別個の開発スレッドであるAtlasAutocodeは、マンチェスター大学のために開発されました。アトラス1マシン。

1954年、FORTRANはIBMでJohnBackusによって発明されましたこれは、紙のデザインだけでなく、機能的な実装を備えた最初の広く使用されている高級汎用プログラミング言語でした。[29] [30]これは依然としてハイパフォーマンスコンピューティングで人気のある言語であり[31]、世界最速のスーパーコンピューターのベンチマークとランク付けを行うプログラムに使用されています[32]

もう1つの初期のプログラミング言語はFLOW-MATICと呼ばれる米国のGraceHopperによって考案されました。これのために開発されたUNIVAC Iレミントンランド1959年ホッパーは、顧客を処理し、そのビジネスデータは、数学的表記と不快だった発見し、早期に1955年に、彼女と彼女のチームはのための仕様を書いたまで1955年からの期間に英語のプログラミング言語を、実施プロトタイプ。[33] FLOW-MATICコンパイラは1958年初頭に公開され、1959年に実質的に完成しました。[34] FLOW-MATICは、それとその直系のAIMACOのみであるためCOBOLの設計に大きな影響を与えました。当時は実際に使用されていました。[35]

改良

高水準言語の使用の増加により、低水準プログラミング言語またはシステムプログラミング言語の要件が導入されましたこれらの言語は、程度の差はあれ、アセンブリ言語と高級言語の間の機能を提供します。これらは、ハードウェア機能への直接アクセスを必要とするタスクを実行するために使用できますが、それでも高レベルの制御構造とエラーチェックを提供します。

1960年代から1970年代後半までの期間は、現在使用されている主要な言語パラダイムの開発をもたらしました。

これらの言語はそれぞれ子孫を生み出し、最近のプログラミング言語のほとんどは、祖先で少なくとも1つを数えています。

1960年代と1970年代には、構造化プログラミングのメリットと、それをサポートするようにプログラミング言語を設計する必要があるかどうかについても、かなりの議論がありました[38] Edsger Dijkstraは、Communications of the ACM掲載された有名な1968年の手紙の中で、Goto文をすべての「高級」プログラミング言語から削除する必要があると主張しました[39]

統合と成長

人気のある言語とあいまいな言語の両方でプログラミングを教える教科書のセレクション。これらは、歴史の中で設計された数千のプログラミング言語と方言のほんの一部です。

1980年代は相対的な統合の年でした。C ++は、オブジェクト指向プログラミングとシステムプログラミングを組み合わせたものです。米国政府はPascalから派生し、防衛産業の請負業者による使用を目的としたシステムプログラミング言語であるAdaを標準化しました。日本や他の地域では、論理プログラミング構造を組み込んだいわゆる「第5世代」言語の調査に多額の費用が費やされました[40]関数型言語コミュニティは、MLとLispを標準化するために動きました。これらの運動はすべて、新しいパラダイムを発明するのではなく、過去数十年間に発明されたアイデアに基づいて作成されました。

1980年代の大規模システムをプログラミングするための言語設計における重要な傾向の1つは、モジュールまたはコードの大規模な組織単位の使用への注目が高まったことでしたModula-2、Ada、およびMLはすべて、1980年代に注目すべきモジュールシステムを開発しました。これらのシステムは、ジェネリックプログラミング構造に組み込まれることがよくありました。[41]

1990年代半ばインターネットの急速な成長は、新しい言語の機会を生み出しました。Perlは、もともと1987年に最初にリリースされたUnixスクリプトツールでしたが、動的Webサイトで一般的になりましたJavaがサーバー側プログラミングに使用されるようになり、バイトコード仮想マシンは「一度書けばどこでも実行できるという約束で商業環境で再び人気を博しましたUCSD Pascalは1980年代初頭に人気がありました)。これらの開発は根本的に目新しいものではありませんでした。むしろ、それらは多くの既存の言語とパラダイムの改良版でした(ただし、それらの構文はプログラミング言語のCファミリーに基づいていることがよくありました)。

プログラミング言語の進化は、業界と研究の両方で継続しています。現在の方向性には、セキュリティと信頼性の検証、新しい種類のモジュール性(ミックスインデリゲートアスペクト)、およびMicrosoftのLINQなどのデータベース統合が含まれます

第4世代プログラミング言語(4GL)は、3GLよりも内部コンピューターハードウェアの詳細のより高いレベルの抽象化を提供することを目的としたコンピュータープログラミング言語です。第5世代プログラミング言語(5GL)は、プログラマーが作成したアルゴリズムを使用するのではなく、プログラムに与えられた制約を使用して問題を解決することに基づくプログラミング言語です

要素

すべてのプログラミング言語には、データの記述とそれに適用されるプロセスまたは変換(2つの数値の追加やコレクションからのアイテムの選択など)のためのいくつかの基本的な構成要素があります。これらのプリミティブは、それぞれの構造と意味を説明する構文規則と意味規則によって定義されます。

構文

挿入トークン化を使用したPythonコードの解析ツリー
構文の強調表示は、プログラマーがソースコードの要素を認識するのを支援するためによく使用されます。上記の言語はPythonです

プログラミング言語の表面形式は、その構文として知られていますほとんどのプログラミング言語は純粋にテキストです。それらは、書かれた自然言語のように、単語、数字、句読点を含む一連のテキストを使用します。一方、プログラムを指定するためにシンボル間の視覚的な関係を使用する、本質によりグラフィカルなプログラミング言語がいくつかあります。

言語の構文は、構文的に正しいプログラムを形成する記号の可能な組み合わせを記述します。シンボルの組み合わせに与えられた意味は、セマンティクス(正式またはリファレンス実装でハードコードされたものによって処理されます。ほとんどの言語はテキストであるため、この記事ではテキストの構文について説明します。

プログラミング言語の構文は通常、正規表現字句構造の場合)とバッカスナウア記法文法構造の場合)の組み合わせを使用して定義されます以下は、Lispに基づく簡単な文法です。

:: =アトム| リスト
アトム       :: =番号| シンボル
番号     :: = [+-]?['0'-'9'] +
記号     :: = ['A'-'Z''a'-'z']。*
リスト       :: = '('式* ')'

この文法は以下を指定します:

  • 式はどちらかである原子またはリスト
  • 原子のいずれかである番号または記号
  • 数は必要に応じてプラスまたはマイナス記号が前、一つ以上の桁の間断のない配列です。
  • シンボルは(空白を除く)任意の文字のゼロ個以上続く文字です。
  • リストには、ゼロ以上で、括弧のペアで表現それ内部。

以下に、この文法で整形トークンシーケンスの例を示します12345()そして(a b c232 (1))

すべての構文的に正しいプログラムが意味的に正しいわけではありません。それにもかかわらず、多くの構文的に正しいプログラムは、言語の規則に従って、形式が正しくありません。また、(言語仕様と実装の健全性に応じて)翻訳または実行時にエラーが発生する可能性があります。場合によっては、そのようなプログラムは未定義の動作を示すことがありますプログラムが言語内で明確に定義されている場合でも、それを作成した人が意図していない意味を持っている可能性があります。

使用する自然言語を例として、文法的に正しい文章や偽かもしれ文に意味を割り当てることができない場合があります。

次のC言語フラグメントは構文的には正しいですが、意味的に定義されていない操作を実行します(操作*p >> 4は、複合型を持つ値には意味p->imがなく、の値がnullポインターpあるため定義されていません)。

複合体* p = NULL ;   
複素数abs_p = sqrt * p >> 4 + p- > im );       

最初の行型宣言が省略された場合、プログラムはpコンパイル中に未定義の変数でエラーをトリガーします。ただし、型宣言はセマンティック情報のみを提供するため、プログラムは構文的に正しいままです。

プログラミング言語を指定するために必要な文法は、チョムスキー階層内の位置によって分類できます。ほとんどのプログラミング言語の構文は、タイプ2文法を使用して指定できます。つまり、文脈自由文法です。[42] PerlやLispを含むいくつかの言語には、解析段階での実行を可能にする構造が含まれています。プログラマーがパーサーの動作を変更できるようにする構造を持つ言語は、構文解析を決定不可能な問題にし、一般に、構文解析と実行の区別を曖昧にします。[43] LispのマクロシステムやPerlのマクロシステムとは対照的BEGIN一般的な計算を含む可能性のあるブロックであるCマクロは、単なる文字列の置換であり、コードの実行を必要としません。[44]

セマンティクス

セマンティクスという用語は、言語の形式(構文ではなく、言語の意味を指します

静的セマンティクス

静的セマンティクスは、標準の構文形式で表現するのが困難または不可能な有効なテキストの構造に対する制限を定義します。[2]コンパイルされた言語の場合、静的セマンティクスには基本的に、コンパイル時にチェックできるセマンティックルールが含まれます。例としては、使用する前にすべての識別子が宣言されていること(そのような宣言が必要な言語で)や、caseステートメントのアームのラベルが異なることを確認することが含まれます[45]識別子が適切なコンテキストで使用されていることの確認(関数名に整数を追加しないなど)やそのサブルーチンなど、このタイプの多くの重要な制限呼び出しには適切な数とタイプの引数があり型システムと呼ばれるロジックでルールとして定義することで強制できますデータフロー分析などの他の形式の静的分析も、静的セマンティクスの一部である可能性があります。以下のような新しいプログラミング言語のJavaC#は持って明確な割り当て解析その静的セマンティクスの一部として、データフロー解析のフォームを。

動的セマンティクス

データを指定したら、データに対して操作を実行するようにマシンに指示する必要があります。たとえば、セマンティクスは、式が値に評価される戦略、または制御構造が条件付きでステートメントを実行する方法を定義する場合があります言語動的セマンティクス実行セマンティクスとも呼ばれます)は、言語のさまざまな構成要素がプログラムの動作をいつどのように生成するかを定義します。実行セマンティクスを定義する方法はたくさんあります。自然言語は、実際に一般的に使用される言語の実行セマンティクスを指定するためによく使用されます。かなりの量の学術研究がプログラミング言語の正式なセマンティクスに向けられました、実行セマンティクスを正式な方法で指定できるようにします。この分野の研究の結果は、学外でのプログラミング言語の設計と実装への適用が限られていることを示しています。

型システム

型システムは、プログラミング言語が値と式を型に分類する方法、それらの型を操作する方法、およびそれらが相互作用する方法を定義します。型システムの目標は、特定の誤った操作を検出することにより、その言語で記述されたプログラムの特定のレベルの正確さを検証し、通常は強制することです。どれ決定可能型システムはトレードオフの関係:それは多くの間違ったプログラムを拒否しながら、それはまた、珍しいプログラムはいえ、いくつかの正しいを禁止することができます。この欠点を回避するために、多くの言語には型の抜け穴があります。これは通常、プログラマーが異なる型間で通常は許可されていない操作を明示的に許可するために使用できるチェックされていないキャストです。ほとんどの型付き言語では、型システムは次の目的でのみ使用されます。型チェックプログラムですが、多くの言語(通常は機能的な言語)が型を推測し、プログラマーが型注釈を書く必要をなくします。型システムの正式な設計と研究は、型理論として知られています。

型付き言語と型なし言語

すべての操作の仕様が、操作が適用可能なデータのタイプを定義している場合、言語が入力されます。[46]たとえば、で表​​されるデータ"this text between the quotes"文字列であり、多くのプログラミング言語では、数値を文字列で除算しても意味がなく、実行されません。無効な操作は、プログラムのコンパイル時に検出され(「静的」タイプチェック)、コンパイルエラーメッセージでコンパイラによって拒否されるか、プログラムの実行中に検出され(「動的」タイプチェック)、結果として生じる可能性があります。実行時例外で。多くの言語では、例外ハンドラーと呼ばれる関数でこの例外を処理できます。たとえば、結果として常に「-1」が返されます。

型付き言語の特殊なケースは、単一型付き言語です。これらは多くの場合、REXXSGMLなどのスクリプト言語またはマークアップ言語であり、データ型は1つだけです[疑わしい ] 最も一般的には、記号データと数値データの両方に使用される文字列です。

対照的に、ほとんどのアセンブリ言語などの型指定されていない言語では任意のデータ、通常はさまざまな長さのビットのシーケンスに対して任意の操作を実行できます。[46]高レベルの型指定されてない言語には、BCPLTcl、およびForthのいくつかの種類が含まれます。

実際には、型理論から型付けされたと見なされる言語はほとんどありませんが(すべての操作を検証または拒否)、ほとんどの現代言語はある程度の型付けを提供します。[46]多くの本番言語は、型システムをバイパスまたは破壊する手段を提供し、プログラムの実行をより細かく制御するために型安全性を交換します(キャストを参照)。

静的型付けと動的型付け

では静的型付け、すべての式は、その型が一般的にコンパイル時に、プログラムが実行されたときに前に決定できます。たとえば、1と(2 + 2)は整数式です。文字列を期待する関数に渡したり、日付を保持するように定義された変数に格納したりすることはできません。[46]

静的に型付けされた言語は、明示的に型付けされるか型から推測されるかのいずれかです。最初のケースでは、プログラマーは特定のテキスト位置(たとえば、変数宣言)に型を明示的に書き込む必要があります。 2番目のケースでは、コンパイラーコンテキストに基づいて式と宣言のタイプを推測します。C ++C#Javaなど、ほとんどの主流の静的型付け言語は、明らかに型付けされています。完全な型推論は、伝統的にHaskellMLなどのあまり主流ではない言語に関連付けられてきました。ただし、多くの明示的に型指定された言語は、部分的な型推論をサポートしています。例えば、C ++Java、およびC#はすべて、特定の限られたケースで型を推測します。[47]さらに、一部のプログラミング言語では、一部の型を他の型に自動的に変換できます。たとえば、intは、プログラムがfloatを期待する場合に使用できます。

潜在型型付けとも呼ばれる動的型付けは実行時の操作の型安全性を決定します。つまり、型はテキスト式ではなく実行時の値に関連付けられます [46]型推論言語と同様に、動的型付け言語では、プログラマーが式に明示的な型注釈を記述する必要はありません。特に、これにより、単一の変数がプログラム実行のさまざまなポイントでさまざまなタイプの値を参照できるようになる場合があります。ただし、コードの一部が実際に実行されるまでタイプエラーを自動的に検出できないため、デバッグがより困難になる可能性があります。 Lisp SmalltalkPerlPythonJavaScript、およびRubyはすべて、動的型付け言語の例です。

弱い型と強い型

弱い型付けでは、ある型の値を別の型として扱うことができますたとえば、文字列を数値として扱うことができます[46]これは時々役立つ場合がありますが、コンパイル時実行時も、ある種のプログラム障害が検出されない可能性もあります

強い型付けは、これらのプログラムの障害を防ぎます。間違ったタイプの値で操作を実行しようとすると、エラーが発生します。 [46]強く型付けされた言語は、しばしば型安全または安全と呼ばれます

「弱い型」の別の定義は、PerlJavaScriptなど、多数の暗黙的な型変換を許可する言語を指します。 JavaScriptで、例えば、式は2 * x暗黙的に変換x数であり、この変換は、としても成功しxているnullundefinedArray、または文字のストリング。このような暗黙の変換は多くの場合便利ですが、プログラミングエラーを隠すことができます。 現在強いもの静的なものは一般的に直交する概念と見なされていますが、文献での使用法は異なります。強く型付けされたという用語を、強く、静的に型付けされた、またはさらに紛らわしいことに、単に意味するために使用する人もいます。静的に入力されます。したがって、Cは強い型と弱い型の両方で静的型と呼ばれています。[48] [49]

一部のプロのプログラマーにとって、Cが「弱く静的に型付けされる」可能性があるのは奇妙に思えるかもしれません。ただし、汎用ポインターであるvoid *ポインターを使用すると、明示的なキャストを行うことなく、他のポインターへのポインターのキャストが可能になることに注意してください。これは、何らかの形のような、明示的なキャストを使用せずにCにおけるデータ型の任意の種類のバイトの配列をキャストに極めて類似している(int)または(char)

標準ライブラリとランタイムシステム

ほとんどのプログラミング言語には、関連するコアライブラリ(特に公開された言語標準の一部として含まれている場合は「標準ライブラリ」と呼ばれることもあります)があり、これは従来、言語のすべての実装で利用可能になっています。コアライブラリには通常、一般的に使用されるアルゴリズム、データ構造、および入力と出力のメカニズムの定義が含まれています。

言語とそのコアライブラリの間の境界線は、言語ごとに異なります。場合によっては、言語設計者はライブラリを言語とは別のエンティティとして扱うことがあります。ただし、言語のコアライブラリは、ユーザーによって言語の一部として扱われることが多く、一部の言語仕様では、このライブラリをすべての実装で使用できるようにする必要があります。実際、一部の言語は、コアライブラリを参照せずに特定の構文構造の意味を説明することさえできないように設計されています。たとえば、Javaでは、文字列リテラルはjava.lang.Stringクラスのインスタンスとして定義されます。同様に、Smalltalkでは、無名関数式(「ブロック」)がライブラリのBlockContextクラスのインスタンスを構築します。逆に、Schemeには、言語の残りの部分をライブラリマクロとして構築するのに十分な複数のコヒーレントサブセットが含まれているため、言語設計者は、言語のどの部分を言語構築物として実装する必要があり、どの部分をの一部として実装する必要があるかをわざわざ言う必要はありません。図書館。

設計と実装

プログラミング言語は、コミュニケーションの手段としての目的に関連する自然言語とプロパティを共有し、セマンティクスとは別の構文形式を持ち、関連する言語の言語族が互いに分岐していることを示します[50] [51]しかし、人工的な構成概念として、それらはまた、使用によって進化した言語とは根本的に異なります。大きな違いは、プログラミング言語は正確で有限の定義を持っているため、その全体を完全に記述して研究できることです。[52]対照的に、自然言語は、さまざまなコミュニティのユーザーによって与えられる意味が変化しています。人工言語ながら また、特定の目的でゼロから設計された人工言語であり、プログラミング言語が持つ正確で完全なセマンティック定義を欠いています。

多くのプログラミング言語はゼロから設計され、新しいニーズに合わせて変更され、他の言語と組み合わされています。多くは最終的に使用されなくなりました。すべての目的に役立つ1つの「ユニバーサル」プログラミング言語を設計する試みがなされてきましたが、それらすべてがこの役割を果たすものとして一般に受け入れられていません。[53]多様なプログラミング言語の必要性は、言語が使用されるコンテキストの多様性から生じます。

  • プログラムは、個々の愛好家によって書かれた小さなスクリプトから、何百人ものプログラマーによって書かれた巨大なシステムまで多岐にわたります
  • プログラマーは、何よりもシンプルさを必要とする初心者から、かなりの複雑さに慣れている専門家まで、幅広い専門知識を持っています。
  • プログラムは、マイクロコントローラーからスーパーコンピューターに至るまでのシステムで、速度、サイズ、および単純さのバランスをとる必要があります
  • プログラムは一度作成されても何世代にもわたって変更されない場合もあれば、継続的に変更される場合もあります。
  • プログラマーは単に好みが異なる場合があります。問題について話し合い、特定の言語で表現することに慣れている場合があります。

プログラミング言語の開発における一般的な傾向の1つは、より高いレベルの抽象化を使用して問題を解決する機能を追加することです。初期のプログラミング言語は、コンピューターの基盤となるハードウェアと非常に密接に結びついていました。新しいプログラミング言語が開発されるにつれて、プログラマーが基本的なハードウェア命令への単純な翻訳からより遠いアイデアを表現できるようにする機能が追加されました。プログラマーはコンピューターの複雑さにあまり縛られていないため、プログラマーの労力をかけずに、プログラムでより多くのコンピューティングを実行できます。これにより、時間単位ごとにより多くの機能を書き込むことができます。[54]

自然言語プログラミングは、プログラミングに特化した言語の必要性を排除する方法として提案されています。ただし、この目標はまだ遠いままであり、その利点については議論の余地があります。Edsger W. Dijkstraは、意味のない構成概念の導入を防ぐために形式言語の使用が不可欠であるという立場を取り、自然言語プログラミングを「愚か」として却下しました[55] アラン・パリスも同様にその考えを否定した。[56]構造化英語SQLではハイブリッドアプローチが採用されています

言語の設計者とユーザーは、プログラミングの実践を管理し、可能にする多くのアーティファクトを構築する必要があります。これらのアーティファクトの中で最も重要なのは、言語の仕様実装です。

仕様

プログラミング言語の仕様は、ソースコードの一部がその言語で有効なプログラムであるかどうか、および有効なプログラムである場合はその動作を確認するために、言語ユーザー実装者が使用できるアーティファクトです

プログラミング言語の仕様は、次のようないくつかの形式をとることができます。

実装

プログラミング言語実装は、その言語でプログラムを記述し、ハードウェアとソフトウェアの1つ以上の構成でそれらを実行する方法を提供します。プログラミング言語の実装には、大きく分けて2つのアプローチがありますコンパイル解釈です。一般に、どちらの手法を使用しても言語を実装できます。

コンパイラの出力は、ハードウェアまたはインタプリタと呼ばれるプログラムによって実行される場合があります。インタプリタアプローチを利用するいくつかの実装では、コンパイルと解釈の間に明確な境界はありません。たとえば、BASICの一部の実装では、ソースを一度に1行ずつコンパイルして実行します。

ハードウェア上で直接実行されるプログラムは、通常、ソフトウェアで解釈されるプログラムよりもはるかに高速に実行されます。[60] [より良い情報源が必要]

インタプリタプログラムのパフォーマンスを向上させるための1つの手法は、ジャストインタイムコンパイルです。ここで、仮想マシンは、実行直前に、ハードウェア上で直接実行するために、コードをマシン化するために使用されるバイトコードのブロックを変換します

プロプライエタリ言語

最も一般的に使用されるプログラミング言語のほとんどは完全にオープンな仕様と実装を持っていますが、多くのプログラミング言語は独自のプログラミング言語としてのみ存在し、実装は単一のベンダーからのみ入手可能であり、そのような独自の言語は彼らの知的財産であると主張する場合があります。プロプライエタリプログラミング言語は通常、単一の製品のドメイン固有言語または内部スクリプト言語です。一部のプロプライエタリ言語はベンダーの内部でのみ使用されますが、他の言語は外部ユーザーが利用できます。

一部のプログラミング言語は、プロプライエタリとオープンの境界に存在します。例えば、オラクル・コーポレーションは、のいくつかの側面に所有権主張するJavaプログラミング言語を[61]、マイクロソフトC#のシステムの大部分のオープンな実装を持っているプログラミング言語は、また持っている共通言語ランタイムクローズとして(CLR)を環境。[62]

多くのプロプライエタリ言語は、そのプロプライエタリの性質にもかかわらず、広く使用されています。例としては、MATLABVBScriptWolfram言語などがあります。一部の言語では、クローズドからオープンに移行する場合があります。たとえば、Erlangはもともとエリクソンの内部プログラミング言語でした。[63]

使用

主にコンピューティング分野で、何千もの異なるプログラミング言語が作成されています。[64] 個々のソフトウェアプロジェクトは通常、5つ以上のプログラミング言語を使用します。[65]

プログラミング言語は、より高度な精度と完全性を必要とするという点で、他のほとんどの形式の人間の表現とは異なります。自然言語を使用して他の人とコミュニケーションをとる場合、人間の作者や話者はあいまいで小さな誤りを犯し、それでも彼らの意図が理解されることを期待する可能性があります。ただし、比喩的に言えば、コンピューターは「指示されたとおりに実行」し、プログラマーが作成しようとしたコードを「理解」することはできません。言語定義、プログラム、およびプログラムの入力の組み合わせは、そのプログラムの制御ドメイン内で、プログラムの実行時に発生する外部動作を完全に指定する必要があります。一方で、アルゴリズムに関するアイデアは、擬似コードを使用することにより、実行に必要な精度なしで人間に伝達できます。、自然言語とプログラミング言語で書かれたコードをインターリーブします。

プログラミング言語は、データの断片を定義するための構造化されたメカニズムと、そのデータに対して自動的に実行される可能性のある操作または変換を提供します。プログラマが使用する抽象化の計算に関与する概念を表すための言語で存在します。これらの概念は、利用可能な最も単純な要素(プリミティブと呼ばれる)のコレクションとして表されます[66] プログラミングは、プログラマーがこれらのプリミティブを組み合わせて新しいプログラムを作成したり、既存のプログラムを新しい用途や変化する環境に適応させたりするプロセスです。

コンピュータのためのプログラムがされる可能性があります実行のバッチプロセス人間の相互作用せずに、またはユーザーが入力する可能性があるコマンドをして、対話型セッションインタプリタこの場合、「コマンド」は単にプログラムであり、その実行は連鎖しています。言語が、コンパイルせずにインタプリタ(Unixシェルやその他のコマンドラインインターフェイスなどを介してコマンドを実行できる場合、その言語はスクリプト言語と呼ばれます[67]

言語使用量の測定

使用法の定義はコンテキストによって異なるため、最も広く使用されているプログラミング言語を判別することは困難です。ある言語はより多くのプログラマー時間を占有し、別の言語はより多くのコード行を持ち、3番目の言語は最も多くのCPU時間を消費する可能性があります。一部の言語は、特定の種類のアプリケーションで非常に人気があります。たとえば、COBOLは、企業のデータセンター、多くの場合、大規模なメインフレームで依然として強力です。[68] [69] 科学および工学アプリケーションにおけるFortran航空宇宙、輸送、軍事、リアルタイム、および組み込みアプリケーションにおけるAda ; およびC組み込みアプリケーションおよびオペレーティングシステムで。他の言語は、さまざまな種類のアプリケーションを作成するために定期的に使用されます。

言語の人気を測定するさまざまな方法が提案されており、それぞれが測定対象に対して異なるバイアスの影響を受けます。

  • 言語に言及している求人広告の数を数える[70]
  • 言語を教えたり説明したりする本の販売数[71]
  • その言語で書かれた既存のコード行数の見積もり–これは公開検索ではあまり見られない言語を過小評価する可能性があります[72]
  • Web検索エンジンを使用して見つかった言語参照(つまり、言語の名前)の数。

さまざまなインターネットサイトからの情報を組み合わせて平均化すると、stackify.comは、最も人気のある10のプログラミング言語を(全体的な人気の降順で)次のように報告しました:JavaCC ++PythonC#JavaScriptVB .NETRPHPMATLAB[73]

方言、フレーバー、実装

プログラミング言語またはデータ交換言語方言は、その固有の性質を変更しない言語の(比較的小さな)バリエーションまたは拡張です。SchemeForthなどの言語では、実装者は標準を不十分、不十分、または非合法と見なす可能性があるため、標準から逸脱して新しい方言を作成することがよくあります。その他の場合、方言はドメイン固有言語(多くの場合サブセット)で使用するために作成されますLispの世界では、ほとんどの言語は基本的な使用そのS式の彼らが、たとえば、行う、乱暴に異なるが、構文とLisp状のセマンティクスが考慮されているのLisp方言をラケットをおよびClojure1つの言語に複数の方言があるのが一般的であるため、経験の浅いプログラマーが適切なドキュメントを見つけるのは非常に困難になる可能性があります。BASICプログラミング言語は持っている多くの方言を

言うにつながっフォース方言の爆発「あなたは1つのフォースを見てきた場合は...あなたが見てきた1つのフォースを。」

分類法

プログラミング言語には包括的な分類スキームはありません。特定のプログラミング言語には、通常、単一の祖先言語はありません。言語は一般に、いくつかの先行言語の要素を、当時流通している新しいアイデアと組み合わせることによって発生します。ある言語に由来するアイデアは、関連する言語のファミリー全体に拡散し、その後、家族のギャップを超えて突然跳躍し、まったく異なるファミリーに現れます。

言語は複数の軸に沿って分類できるため、タスクはさらに複雑になります。たとえば、Javaは、オブジェクト指向言語(オブジェクト指向の編成を促進するため)と並行言語(複数のスレッドを並行して実行するための組み込み構造が含まれているため)の両方です。Pythonはオブジェクト指向のスクリプト言語です。

広範なストロークでは、プログラミング言語に分割プログラミングパラダイムにより、分級、使用の意図されたドメイン汎用プログラミング言語は区別ドメイン固有のプログラミング言語。従来、プログラミング言語は、命令文、つまりコマンドの発行という観点から計算を記述するものと見なされてきました。これらは一般に命令型プログラミング言語と呼ばれます。プログラミング言語の多くの研究は、宣言型プログラミングの主な特徴である、一連の命令としてのプログラムと、望ましい答えについてのアサーションとしてのプログラムとの区別を曖昧にすることを目的としています[74]より洗練されたパラダイムには、手続き型プログラミングオブジェクト指向プログラミング関数型プログラミング、および論理プログラミングが含まれます。一部の言語は、パラダイムのハイブリッドまたはマルチパラダイムです。アセンブリ言語はそんなに根本的なマシンアーキテクチャの直接のモデルとしてのパラダイムではありません。目的によって、プログラミング言語は、汎用、システムプログラミング言語、スクリプト言語、ドメイン固有言語、または同時/分散言語(またはこれらの組み合わせ)と見なされる場合があります[75]いくつかの汎用言語は、主に教育目的で設計されました。[76]

プログラミング言語は、プログラミングパラダイムとは関係のない要因によって分類される場合もあります。たとえば、ほとんどのプログラミング言語は英語のキーワードを使用しますが、少数派は使用しません他の言語は、意図的に難解であるかどうかに分類される場合があります。

も参照してください

参考文献

  1. ^ Ettinger、James(2004) Jacquard's Web、オックスフォード大学出版局
  2. ^ a b c Aaby、Anthony(2004)。プログラミング言語入門2012年11月8日にオリジナルからアーカイブされまし取得した29年9月2012
  3. ^ 数学的には、これはプログラミング言語がチューリング完全な MacLennan、Bruce J.(1987)であることを意味しますプログラミング言語の原則オックスフォード大学出版局。NS。1. ISBN 978-0-19-511306-8
  4. ^ ACM SIGPLAN(2003)。「AssociationforComputingMachineryのプログラミング言語に関する特別利益団体の細則」2006年6月22日にオリジナルからアーカイブされました。、「SIGPLANの範囲は、コンピュータープログラミング言語の理論、設計、実装、説明、および適用です。これにより、さまざまな異なる計算を指定できるようになり、ユーザーはコンピューターを大幅に制御(即時または遅延)できます。手術。"
  5. ^ ディーン、トム(2002)。「プログラミングロボット」インテリジェントロボットの構築ブラウン大学コンピュータサイエンス学部。2006年10月29日にオリジナルからアーカイブされました。
  6. ^ R. Narasimahan、Programming Languages and Computers:A Unified Metatheory、pp。189-247in Franz Alt、Morris Rubinoff(eds。)Advances in computer、Volume 8、Academic Press、1994、 ISBN 0-12-012108-5、 p.193:「プログラミング言語の完全な仕様には、定義上、その言語用に理想化されたプロセッサの仕様が含まれている必要があります。」 [ソースは、このステートメントをサポートするために多くの参照を引用しています] 
  7. ^ ベンアリ、モルデハイ(1996)。プログラミング言語を理解するジョンワイリーアンドサンズ。プログラムと言語は、純粋に形式的な数学的対象として定義できます。ただし、プログラム(記号のシーケンス)を使用してコンピューターの実行を制御できるという理由だけで、グループなどの他の数学的オブジェクトよりも多くの人々がプログラムに興味を持っています。プログラミング理論の研究を強くお勧めしますが、このテキストは通常​​、コンピューター上で実行されるプログラムの研究に限定されます。
  8. ^ David A. Schmidt、型付きプログラミング言語の構造、MIT Press、1994、 ISBN 0-262-19349-3、p。32 
  9. ^ ピアス、ベンジャミン(2002)。タイプとプログラミング言語MITプレス。NS。 339ISBN 978-0-262-16209-8
  10. ^ デジタルイクイップメントコーポレーション。「情報技術–データベース言語SQL(DIS 9075の改訂テキスト案)」ISO / IEC 9075:1992、データベース言語SQL2006年6月21日にオリジナルからアーカイブされました2006年6月29日取得
  11. ^ チャリティー開発グループ(1996年12月)。「チャリティーホームページ」2006年7月18日にオリジナルからアーカイブされました。、「チャリティーはカテゴリ別プログラミング言語です...」、「すべてのチャリティー計算は終了します。」
  12. ^ 10ポイントでXML アーカイブで2009年9月6日ウェイバックマシン W3C、1999年には、「XMLは、プログラミング言語ではありません。」
  13. ^ パウエル、トーマス(2003)。HTML&XHTML:完全なリファレンスマグロウヒル。NS。25. ISBN 978-0-07-222942-4HTMLはプログラミング言語ではありません。
  14. ^ 堤防、ルシンダ; エドティッテル(2005)。XML For Dummies(第4版)。ワイリー。NS。 20ISBN 978-0-7645-8845-7...これはマークアップ言語であり、プログラミング言語ではありません。
  15. ^ 「XSLTとはどのような言語ですか?」IBM.com。2005年4月20日。2011年5月11日のオリジナルからアーカイブ
  16. ^ 「XSLTはプログラミング言語です」Msdn.microsoft.com。2011年2月3日にオリジナルからアーカイブされました取り出さ年12月3 2010年
  17. ^ スコット、マイケル(2006)。プログラミング言語語用論モーガンカウフマンNS。 802ISBN 978-0-12-633951-2XSLTは、XMLの変換に高度に特化していますが、チューリング完全なプログラミング言語です。
  18. ^ Oetiker、Tobias; Partl、Hubert; ハイナ、アイリーン; シュレグル、エリザベス(2016年6月20日)。「LATEX2εのそれほど短くない紹介」(バージョン5.06)tobi.oetiker.chpp。1–157。2017年3月14日のオリジナルからアーカイブ(PDF)
  19. ^ Syropoulos、Apostolos; アントニスTsolomitis; Nick Sofroniou(2003)。LaTeXを使用したデジタルタイポグラフィSpringer-Verlag。NS。 213ISBN 978-0-387-95217-8TeXは、優れた植字エンジンであるだけでなく、実際のプログラミング言語でもあります。
  20. ^ Robert A. Edmunds、コンピューター用語のPrentice-Hall標準用語集、Prentice-Hall、1985年、p。91
  21. ^ パスカルランドー、アンLapujade、ジル・カッセル、およびフレデリック・フュルスト、コンピュータの一般的なオントロジーに向けてのプログラム アーカイブ2015年7月7日にウェイバックマシン ICSOFT 2007 アーカイブで2010年4月27日ウェイバックマシン、PP。163-170
  22. ^ SK Bajpai、コンピュータとCプログラミングの概要、New Age International、2007年、 ISBN 81-224-1379-X、p。346 
  23. ^ R. Narasimahan、Programming Languages and Computers:A Unified Metatheory、pp。189-247in Franz Alt、Morris Rubinoff(eds。)Advances in computer、Volume 8、Academic Press、1994、 ISBN 0-12-012108-5 、p.215:「[...]コンピューター言語のモデル[...]は、プログラミング言語のモデル[...]と2つの点でのみ異なります。コンピューター言語では、名前の数は有限です。またはレジスター(有限の数の値または状態しか想定できない)であり、これらの状態は他の属性に関してこれ以上区別されません。[著者の脚注:]これは真実のように聞こえるかもしれませんが、その影響は広範囲に及びます。プログラミング言語のモデルは、そのパラメーターや機能の一部を修正することにより、コンピューター言語のモデルに自然な方法で還元できる必要があることを意味します。」
  24. ^ John C. Reynolds、「プログラミングおよびプログラミング言語の教育に関するいくつかの考え」、 SIGPLAN Notices、第43巻、第11号、2008年11月、p.109
  25. ^ Rojas、Raúl、他。(2000)。「Plankalkül:最初の高級プログラミング言語とその実装」。InstitutfürInformatik、FreieUniversitätBerlin、テクニカルレポートB-3 / 2000。(全文)アーカイブで2014年10月18ウェイバックマシン
  26. ^ Sebesta、プログラミング言語のWSコンセプト。2006; M6 14:18pp.44。ISBN 0-321-33025-0 
  27. ^ クヌース、ドナルドE。; パルド、ルイス・トラブ。「プログラミング言語の初期開発」。コンピュータサイエンスとテクノロジーの百科事典7:419–493。
  28. ^ ピーターJ.ベントレー(2012)。デジタル化:コンピューターの科学とそれが私たちの世界をどのように形作るかオックスフォード大学出版局。NS。87. ISBN 97801996937952016年8月29日にオリジナルからアーカイブされました。
  29. ^ 「Fortranの作成者であるジョンバッカスが死ぬ-技術とガジェット」NBCニュース。2007年3月20日取得した25年4月2010年
  30. ^ 「CSC-30299S:クラス02:プログラミング言語の簡単な歴史」Math.grin.edu。2010年7月15日にオリジナルからアーカイブされました取得した25年4月2010年
  31. ^ Eugene Loh(2010年6月18日)。「理想的なHPCプログラミング言語」キュー8(6)。2016年3月4日にオリジナルからアーカイブされました。
  32. ^ 「HPL–分散メモリコンピュータ用の高性能Linpackベンチマークのポータブル実装」2015年2月15日にオリジナルからアーカイブされました取得した21年2月2015
  33. ^ ホッパー(1978)p。16.16。
  34. ^ サメット(1969)p。316
  35. ^ サメット(1978)p。204。
  36. ^ Richard L. Wexelblat:プログラミング言語の歴史、アカデミックプレス、1981年、第XIV章。
  37. ^ FrançoisLabelle。「プログラミング言語使用グラフ」SourceForge2006年6月17日にオリジナルからアーカイブされました2006年6月21日取得この比較では、人気のあるコミュニティプログラミングリポジトリによってホストされているプロジェクトの数の傾向を分析します。比較のほとんどの年の間、Cはかなりの差でリードしています。2006年には、JavaがCを追い抜いていますが、C / C ++の組み合わせは依然としてかなり進んでいます。
  38. ^ ヘイズ、ブライアン(2006)。「セミコロン戦争」。アメリカンサイエンティスト94(4):299–303。土井10.1511 /2006.60.299
  39. ^ Dijkstra、Edsger W.(1968年3月)。「有害と考えられるステートメントに移動」(PDF)ACMの通信11(3):147–148。土井10.1145 /362929.362947S2CID 174698092014年5月13日のオリジナルからアーカイブ(PDF)  
  40. ^ 藤瀬哲郎、近山隆、六澤和明、中瀬明彦(1994年12月)。「KLIC:KL1のポータブル実装」 Proc。FGCS '94、ICOT東京、1994年12月。「アーカイブされたコピー」2006年9月25日にオリジナルからアーカイブされまし2006年10月9日取得CS1 maint:タイトルとしてアーカイブされたコピー(リンクKLICは、並行論理プログラミング言語KL1の移植可能な実装です
  41. ^ ジムベンダー(2004年3月15日)。「関数型プログラミング言語のモジュールに関するミニ参考文献」ReadScheme.org2006年9月24日にオリジナルからアーカイブされました。
  42. ^ Michael Sipser(1996)。計算理論の紹介PWSパブリッシング。ISBN 978-0-534-94728-6 セクション2.2:プッシュダウンオートマトン、pp.101–114。
  43. ^ Jeffrey Kegler、「 Perlと決定不能性は 2009年8月17日にWayback Machineアーカイブされました」、 Perlレビュー論文2と3は、それぞれライスの定理停止問題への直接還元を使用して、Perlプログラムの構文解析が一般に決定不可能であることを証明しています。
  44. ^ Marty Hall、1995年、レクチャーノート:マクロは 2013年8月6日にウェイバックマシンアーカイブされ PostScript バージョンは 2000年8月17日にウェイバックマシンアーカイブされました
  45. ^ Michael Lee Scott、 Programming language pragmatics、Edition 2、Morgan Kaufmann、2006、 ISBN 0-12-633951-1、p。18〜19 
  46. ^ B 、CのDのE 、F 、G アンドリュー・クックを。「コンピュータ言語入門」2012年8月15日にオリジナルからアーカイブされました検索された13年7月2012
  47. ^ 具体的には、ジェネリック型のインスタンス化は、特定の式形式に対して推測されます。ジェネリックJavaの型推論(Java 1.5の制限付きパラメトリックポリモーフィズム拡張の基礎を提供した研究言語)は、タイプメーリングリストの2つの非公式の原稿で説明されています。ジェネリックJavaタイプ推論は不健全です 2007年1月29日Wayback Machine Alan Jeffrey、2001年12月17日)およびSound GenericJava型推論 2007年1月29日にWaybackMachine Martin Odersky)でアーカイブ、2002年1月15日)。C#の型システムはJavaの型システムに似ており、同様の部分型推論スキームを使用します。
  48. ^ 「アルゴリズム言語スキームに関する改訂レポート」1998年2月20日。2006年7月14日のオリジナルからアーカイブ
  49. ^ ルカ・カーデリピーター・ウェグナー「タイプ、データ抽象化、およびポリモーフィズムの理解について」原稿(1985)2006年6月19日にオリジナルからアーカイブされました。
  50. ^ Steven R. Fischer、言語の歴史、Reaktion Books、2003年、 ISBN 1-86189-080-X、p。205 
  51. ^ ÉricLévénez(2011)。「コンピュータ言語の歴史」2006年1月7日にオリジナルからアーカイブされました。
  52. ^ ジンファン。「人工言語と自然言語」2009年9月3日にオリジナルからアーカイブされました。
  53. ^ たとえば、IBMが最初にPL / Iを発行したとき、そのマニュアルタイトルはかなり野心的でした。ユニバーサルプログラミング言語PL / I(IBM Library; 1966)。タイトルは、無制限のサブセット化機能に関するIBMの目標を反映しています。「PL / Iは、特定のアプリケーションの要件を満たすサブセットを分離できるように設計されています。」 "PL / I" 数学の百科事典アーカイブは2012年4月26日に元から。のRetrieved 29年6月2006年)。エイダUNCOLは同様の初期の目標を持っていました。
  54. ^ Frederick P. Brooks、Jr。: The Mythical Man-Month、Addison-Wesley、1982、pp。93–94
  55. ^ Dijkstra、EdsgerW。「自然言語プログラミング」の愚かさについて。 アーカイブで2008年1月20ウェイバックマシンEWD667。
  56. ^ Perlis、Alan(1982年9月)。「プログラミングのエピグラム」SIGPLAN NoticesVol。17、No。9pp。7–13。1999年1月17日にオリジナルからアーカイブされました。
  57. ^ ミルナー、R。; M.トフテ; R.ハーパー; D.マックィーン(1997)。Standard MLの定義(改訂)MITプレス。ISBN 978-0-262-63181-5
  58. ^ ケルシー、リチャード; ウィリアム・クリンガー; ジョナサンリース(1998年2月)。「セクション7.2正式なセマンティクス」アルゴリズム言語スキームに関する改訂5レポート2006年7月6日にオリジナルからアーカイブされました。
  59. ^ ANSI –プログラミング言語Rexx、X3-274.1996
  60. ^ スティーブ、マコネル(2004)。コードが完成しました(第2版)。ワシントン州レドモンド。頁 590、600ISBN 0735619670OCLC  54974573
  61. ^ 参照: Oracle America、Inc。v。Google、Inc。
  62. ^ 「プログラミング言語ガイド| ComputerScience.org」ComputerScience.org 2018年5月13日取得
  63. ^ 「基本」ibm.com2011年5月10日2018年5月13日取得
  64. ^ 「HOPL:プログラミング言語のインタラクティブな名簿」オーストラリア:マードック大学2011年2月20日にオリジナルからアーカイブされまし2009年6月1日取得このサイトには8512の言語がリストされています。
  65. ^ メイヤー、フィリップ; バウアー、アレクサンダー(2015)。オープンソースプロジェクトにおける複数のプログラミング言語の利用に関する経験的分析ソフトウェア工学における評価と評価に関する第19回国際会議の議事録– EASE'15。米国ニューヨーク州ニューヨーク:ACM。pp。4:1–4:10。土井10.1145 /2745802.2745805ISBN 978-1-4503-3350-4結果:(a)明らかに優勢な主要な汎用言語と5つの頻繁に使用されるDSLタイプを備えた、プロジェクトあたりの平均5言語数、(b)サイズ、コミット数、および主要言語の重要な影響が見つかりました言語の数、および年齢や寄稿者の数に大きな影響がないこと、および(c)XML、Shell / Make、およびHTML / CSSを中心にグループ化された3つの言語エコシステム。結論:多言語プログラミングはオープンソースプロジェクトでは一般的であるように思われ、ツールやそのようなソフトウェアシステムの開発と保守を評価するときに対処しなければならない要素です。
  66. ^ アベルソン、サスマン、およびサスマン。「コンピュータプログラムの構造と解釈」2009年2月26日にオリジナルからアーカイブされまし2009年3月3日取得CS1 maint:複数の名前:作成者リスト(リンク
  67. ^ ブラウンヴィッキー(1999)。「スクリプト言語」mactech.com2017年12月2日にオリジナルからアーカイブされました。
  68. ^ Georgina Swan(2009年9月21日)。「COBOLは50になります」computerworld.com.au。2013年10月19日にオリジナルからアーカイブされました取得した19年10月2013
  69. ^ Ed Airey(2012年5月3日)。「COBOLの7つの神話が暴かれた」development.com。2013年10月19日にオリジナルからアーカイブされました取得した19年10月2013
  70. ^ ニコラスEnticknap。「SSL / ComputerWeekly IT給与調査:金融ブームがITジョブの成長を促進する」ComputerWeekly2011年10月26日にオリジナルからアーカイブされました検索された14年6月2013年
  71. ^ 「本の販売によるプログラミング言語の数え方」Radar.oreilly.com。2006年8月2日。2008年5月17日のオリジナルからアーカイブ
  72. ^ ビーマン、JM; Murdock、V.、World Wide Webでのコードの検索:予備調査、Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation、2001
  73. ^ 「2018年の最も人気があり影響力のあるプログラミング言語」stackify.com。2017年12月18日2018年8月29日取得
  74. ^ Carl A. Gunter、プログラミング言語のセマンティクス:構造と技法、MIT Press、1992、 ISBN 0-262-57095-5、p。1 
  75. ^ 「TUNES:プログラミング言語」2007年10月20日にオリジナルからアーカイブされました。
  76. ^ ワース、ニクラウス(1993)。「パスカルの発展についての回想」。プログラミング言語の歴史に関する第2回ACMSIGPLAN会議-HOPL-II手順 プログラミング言語の歴史に関する第2回ACMSIGPLAN会議28pp。333–342。CiteSeerX 10.1.1.475.6989土井10.1145 /154766.155378ISBN  978-0-89791-570-0S2CID  9783524

さらに読む

外部リンク