コンピュータソフトウェアにおいて、汎用プログラミング言語(GPL)とは、幅広いアプリケーション領域でソフトウェアを構築するためのプログラミング言語です。一方、ドメイン固有プログラミング言語(DSL)は、特定の領域内で使用されます。例えば、PythonはGPLですが、SQLはリレーショナルデータベースを照会するためのDSLです。
初期のプログラミング言語は、コンピュータハードウェアと同様に、科学計算(数値計算)または商用データ処理用に設計されていました。FortranやAlgolなどの科学言語は浮動小数点計算と多次元配列をサポートし、COBOLなどのビジネス言語は固定フィールドファイル形式とデータレコードをサポートしていました。記号リスト処理用のIPL-VやLISP 、文字列操作用のCOMIT、数値制御マシン用のAPTなどの特殊言語は、それほど広く使用されていませんでした。ポインタ操作を必要とするシステムプログラミングは通常アセンブリ言語で行われましたが、JOVIALは一部の軍事用途で使用されました。[ 1 ]
1964年に発表されたIBMのSystem/360は、科学計算と商用アプリケーションの両方をサポートする統合ハードウェアアーキテクチャとして設計され、IBMは科学計算、商用プログラミング、システムプログラミングをサポートする単一の汎用言語としてPL/Iを開発しました。実際、PL/Iのサブセットは、 Multicsオペレーティングシステムの標準システムプログラミング言語として使用されました。
PL/I以降、科学計算用プログラミング言語と商用プログラミング言語の区別は薄れ、ほとんどの言語が両方に必要な基本機能をサポートし、特殊なファイル形式の処理の多くは専用のデータベース管理システムに委ねられるようになった。
1960年代以降、多くの専門的な言語も開発されました。離散イベントシミュレーション用のGPSSとSimula 、プログラミング教育用のMAD、BASIC、Logo、Pascal 、システムプログラミング用のC 、対話型プログラミング用のJOSSとAPL\360などです。[ 1 ]
汎用プログラミング言語とドメイン固有プログラミング言語の区別は必ずしも明確ではありません。[ 2 ]プログラミング言語は特定のタスクのために作成されますが、その元のドメインを超えて使用されるため、汎用プログラミング言語とみなされます。たとえば、COBOL、Fortran、Lisp はDSL (ビジネス処理、数値計算、記号処理用) として作成されましたが、時間の経過とともに GPL になりました。逆に、言語は汎用的に使用するために設計されますが、実際には特定の領域でのみ使用される場合があります。[ 3 ]汎用言語であろうと DSL であろうと、問題に適したプログラミング言語は、問題領域で十分な表現力を持ちながら、必要な詳細レベルを最小限に抑える必要があります。[ 4 ]名前が示すように、汎用言語はドメイン固有の表記法をサポートできないという意味で「汎用」ですが、DSL はこの問題に対処するためにさまざまな問題領域で設計できます。[ 4 ]アプリケーション領域が独自の言語を必要とするほど十分に理解されていない場合は、汎用言語が DSL よりも好まれます。この場合、ドメインに適したデータ型と関数のライブラリを備えた汎用言語を代わりに使うことができます。[ 5 ] DSLは通常、抽象化の表記法の範囲が狭いためGPLよりも小さいですが、一部のDSLはサブ言語としてGPL全体を含んでいます。このような場合、DSLはGPLの表現力に加えてドメイン固有の表現力を提供できます。[ 6 ]
汎用プログラミング言語はすべてチューリング完全であり、理論的にはあらゆる計算問題を解決できる。ドメイン固有言語も同様にチューリング完全であることが多いが、必ずしもそうとは限らない。
汎用プログラミング言語は、プログラマーによってより一般的に使用されています。調査によると、2021年に最も一般的に使用されたプログラミング言語はC、Python、Javaでした。 [ 7 ]ドメイン固有言語よりも汎用プログラミング言語を使用する利点の1つは、より多くの人がこれらの言語に精通しているため、新しい言語を学ぶ必要性がなくなることです。
さらに、多くのタスク(統計分析、機械学習など)には、徹底的にテストされ最適化されたライブラリが存在します。理論的には、これらのライブラリの存在は、汎用言語とドメイン固有言語の間のギャップを埋めるはずです。[ 4 ]
2010年の実証研究では、GPL(C#)に精通し、DSL(XAML)に精通していないユーザーに問題を与えることで、GPLとDSL間の問題解決能力と生産性を測定しようと試みました。最終的に、この特定のドメイン固有言語のユーザーは、GPLに精通しているにもかかわらず、15%優れたパフォーマンスを示し、さらなる研究が必要であることが示されました。[ 4 ]
Cの前身であるB は、主にシステム プログラミングという特定の目的のために開発されました。[ 8 ]対照的に、C はオペレーティングシステム、デバイス ドライバ、アプリケーション ソフトウェア、組み込みシステムなど、さまざまな計算領域で使用されています。
C言語は汎用性が高いため、さまざまな分野での使用に適しています。表現の簡潔さ、フロー制御、データ構造、豊富な演算子セットを提供しますが、ユーザーが特定のコンテキストで使用することを制限しません。[ 9 ]その結果、開発者によって最初にUnixオペレーティングシステムのカーネルを書き直すために使用されたにもかかわらず、[ 10 ]アプリケーション開発、組み込みシステム(マイクロプロセッサプログラミングなど)、ビデオゲーム( Doomなど)などへの使用に容易に適応しました。今日でも、C言語は最も人気があり、広く使用されているプログラミング言語の1つです。[ 11 ]
C++はC言語の拡張として構想され、オブジェクト指向機能に加え、参照、演算子オーバーロード、デフォルト引数などの便利な機能も導入しました。C言語と同様に、C++の汎用性により、幅広い分野で使用できるようになりました。その主要な応用分野はシステムプログラミング(C++が低レベルアーキテクチャへのアクセスを可能にするため)ですが、 [ 12 ]デスクトップアプリケーション、ビデオゲーム、データベース、金融システムなど、さまざまなものの構築に広く使用されています。[ 13 ] Microsoft、Apple、Bloomberg、Morgan Stanleyなどの大手ソフトウェアおよび金融企業は、社内および社外アプリケーションでC++を広く使用しています。[ 13 ]
Pythonは、コードの可読性と拡張性を重視した言語として構想されました。[ 14 ] [ 15 ]前者はソフトウェアエンジニア以外の人がコンピュータプログラムを簡単に学習して記述することを可能にし、後者はドメインスペシャリストが自身のユースケースに適したライブラリを簡単に作成することを可能にします。これらの理由から、Pythonは幅広い分野で使用されています。
Pythonが使用されている分野には以下のようなものがあります。[ 16 ]
以下は、汎用プログラミング言語の例です。
{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク)