これは、注目すべきプログラミング言語を、その言語の特色ごとに分類したリストです。言語は複数の特色を持つことができるため、同じ言語が複数のグループに含まれる場合があります。
エージェント指向プログラミングでは、開発者はソフトウェアエージェントを構築、拡張、使用することができます。ソフトウェアエージェントとは、他のエージェントとメッセージをやり取りできるオブジェクトの抽象化です。
配列プログラミング(ベクトルまたは多次元とも呼ばれる)言語は、スカラーに対する操作を一般化して、ベクトル、行列、および高次元配列に透過的に適用します。
アスペクト指向プログラミングでは、開発者はコード自体を変更することなく、アドバイスと呼ばれる新しい機能をコードに追加できます。代わりに、ポイントカットを使用してアドバイスをコードブロックに実装します。
アセンブリ言語は機械語に直接対応しており(下記参照)、機械語命令は人間が理解できる形式で表示されますが、個々のステートメントと個々の命令が1対1で対応しているとは限りません。アセンブリ言語では、プログラマはシンボルアドレスを使用できます。アセンブラはシンボルアドレスを絶対アドレスまたは再配置可能アドレスに変換します。ほとんどのアセンブラはマクロとシンボル定数もサポートしています。
オーサリング言語とは、コンピュータの専門家ではない人がチュートリアル、ウェブサイト、その他の対話型コンピュータプログラムを簡単に作成できるように設計されたプログラミング言語のことです。
コマンドラインインターフェース(CLI)言語は、バッチ言語またはジョブ制御言語とも呼ばれます。例:
これらは通常コンパイラによって処理される言語ですが、理論的にはどんな言語でもコンパイルまたはインタプリタ方式で処理できます。
連結型プログラミング言語は、すべての式が関数を表し、式の並置が関数合成を表す、ポイントフリーのコンピュータプログラミング言語です。
メッセージパッシング言語は、並行処理のための言語構造を提供する。Javaなどの主流言語における並行処理の主流パラダイムは、共有メモリ並行処理である。メッセージパッシングを利用する並行言語は、一般的に、通信逐次プロセス(CSP)やπ計算などのプロセス計算から着想を得ている。
制約プログラミング言語とは、変数間の関係を制約として表現する宣言型プログラミング言語である。実行は、宣言されたすべての制約を満たす変数の値を見つけることによって進められる。
契約による設計(または契約プログラミング)とは、定義された事前条件、事後条件、および不変条件を使用してプログラミングを行うことである。
波括弧または波括弧言語は、波括弧(別名波括弧){}で囲まれたステートメントをブロックとして定義する構文を持ちます。この構文はBCPL (1966年)に由来し、 C言語によって普及しました。多くの波括弧言語はC言語から派生したか、C言語から強い影響を受けています。例:
データフロープログラミング言語は、プログラムを指定するために、データの流れを(通常は視覚的に)表現することに依存します。離散的なイベントに反応したり、データストリームを処理したりするためによく使用されます。データフロー言語には以下が含まれます。
データ指向言語は、エンティティ関係テーブルと呼ばれる関係を検索および操作するための強力な手段を提供します。エンティティ関係テーブルは、ある集合のものを別の集合にマッピングするものです。データ指向言語には以下のようなものがあります。
決定表は、どの言語でもプログラムを作成する前にロジックを明確にするための補助として使用できますが、1960年代には、主要なロジックが決定表の形式で直接表現される言語がいくつか開発されました。
宣言型言語は、制御フローを詳細に記述することなく、計算の論理を表現します。宣言型プログラミングは、命令型プログラミング言語による命令型プログラミングとは対照的です。命令型プログラミングでは、制御フローは逐次的な命令(命令)によって指定されます。(純粋)関数型プログラミング言語と論理型プログラミング言語も宣言型であり、宣言型言語の主要なサブカテゴリを構成します。このセクションでは、これらのサブカテゴリに含まれない追加の例を挙げます。
ソース埋め込み可能な言語は、実行可能な小さなコードを、自由形式のテキスト(多くの場合、ウェブページ)の中に埋め込む。
クライアントサイドの埋め込み言語は、ブラウザまたは対象となるクライアントの機能によって制限されます。これらの言語は、サーバーとの再接続を必要とせずに、ウェブページに動的な変化をもたらすことを目的としています。
サーバーサイドの組み込み言語は、ほぼあらゆる言語をサーバーに組み込むことができるため、非常に柔軟性が高い。Webページにサーバーサイドのコード断片を埋め込む目的は、追加のマークアップを動的に生成することにある。ページが配信されると、コード自体は消え、その出力に置き換えられる。
上記の例は特にこの目的のために作成されたものです。Erlang 、Scala、Perl、Rubyなど、他の多くの言語も(例えばApacheモジュール化することで)適用可能です。
コンパイル済みの実行可能コードには、多種多様な動的言語やスクリプト言語を埋め込むことができます。基本的には、言語のインタプリタ用のオブジェクトコードを実行可能ファイルにリンクする必要があります。その後、埋め込まれた言語のソースコード断片を文字列として評価関数に渡すことができます。ソースコードがユーザーによって入力される場合、アプリケーション制御言語もこの方法で実装できます。インタプリタが小さい言語が好まれます。
主にプログラミングの教育と学習を目的として開発された言語。
難解なプログラミング言語とは、コンピュータプログラミング言語設計の限界を試すため、概念実証のため、あるいは冗談として設計されたプログラミング言語のことである。
拡張プログラミング言語とは、別のプログラムに組み込まれ、拡張スクリプト内でそのプログラムの機能を活用するために使用される言語です。
第4世代プログラミング言語は、データベースシステムを中心に構築された高水準プログラミング言語です。これらは一般的に商用環境で使用されます。
関数型プログラミング言語は、プログラムとサブルーチンを数学関数として定義し、第一級オブジェクトとして扱います。いわゆる関数型言語の多くは「純粋ではない」もので、命令型言語の特徴を含んでいます。多くの関数型言語は、数学計算ツールと密接に結びついています。関数型言語には以下のようなものがあります。
電子工学において、ハードウェア記述言語(HDL)は、電子回路、特にデジタル論理回路の構造、設計、動作を記述するために使用される特殊なコンピュータ言語です。業界で最も広く使用され、サポート体制も充実しているHDLは、VerilogとVHDLの2種類です。ハードウェア記述言語には、以下のようなものがあります。
命令型プログラミング言語は、複数のパラダイムに属し、他の分類にも含まれる場合があります。以下は、命令型パラダイムに従うプログラミング言語の一覧です。
REPL (対話型言語)として知られる対話型言語は、一種のシェルとして機能します。式や文を一度に1つずつ入力でき、その評価結果がすぐに表示されます。
インタプリタ型言語とは、ソースコードからインタプリタによってプログラムを実行できるプログラミング言語のことです。理論的には、どの言語もコンパイルまたはインタプリタ化が可能ですが、一般的にインタプリタ型言語とは、コンパイルではなくインタプリタによって実行される言語を指します。
反復型言語はジェネレータを中心に構築されているか、ジェネレータを提供しています。
ガベージコレクション(GC)は、自動的なメモリ管理の一種です。ガベージコレクタは、プログラムによって割り当てられたものの、もはや使用されなくなったメモリを解放しようとします。
Cython [ 31 ] Swift [ c ]およびScala [ 32 ] (Scala Native のみ) のように、メモリを手動で管理する固有の機能を持たないプログラミング言語の中には、外部関数インターフェースを介してCから関数をインポートmallocまたは呼び出すことができるものがあります。free
リストベース言語は、リストデータ構造に基づいたデータ構造言語の一種です。
論理ベースの言語は、解を得るための手順ではなく、解が必ず備えていなければならない属性のセットを指定する。
このプログラミングパラダイムを採用している代表的な言語には、以下のようなものがある。
機械語は、コンピュータのCPUによって直接実行可能です。通常、ビットパターンとして記述され、8進数または16進数で表されます。各ビットパターンによって、CPU内の回路がハードウェアの基本演算のいずれかを実行します。特定の電気入力(マイクロプロセッサのCPUパッケージピンなど)のアクティブ化と、CPU状態値の論理設定によって、プロセッサの計算が制御されます。個々の機械語はプロセッサのファミリに固有です。あるファミリのプロセッサ用の機械語コードは、そのプロセッサがそれをサポートする追加のハードウェアを備えていない限り、別のファミリのプロセッサ上で直接実行することはできません(例えば、DEC VAXプロセッサにはPDP-11互換モードが含まれていました)。機械語は(基本的に)常にCPU開発者によって定義され、サードパーティによって定義されることはありません。[ e ]シンボル版であるプロセッサのアセンブリ言語も、ほとんどの場合、開発者によって定義されます。一般的に使用される機械語命令セットには、次のようなものがあります。
マクロ言語は、あるソースコードファイルを別のソースコードファイルに変換します。「マクロ」とは、基本的に短いテキストが展開されてより長いテキストになるもので(衛生的なマクロとは異なります)、場合によってはパラメータ置換も行われます。マクロはソースコードのプリプロセスによく使用されます。プリプロセッサは、ファイルインクルードなどの機能も提供できます。
#マクロ言語は、特別なラベルが付けられたコード領域( Cプリプロセッサの場合は接頭辞が付く)に対してのみ動作するように制限される場合があります。あるいは、制限されない場合もありますが、その場合でも、(例えば)文字列リテラルに埋め込まれたマクロを展開することは望ましくない場合が多いため、基本的な構文の理解が必要となります。とはいえ、マクロ言語は複数の言語に適用できる場合が多いです。PHPのようなソース埋め込み可能な言語は、機能が充実しているため、これとは対照的です。
TclやECMAScript(ActionScript、ECMAScript for XML、JavaScript、JScript )などのスクリプト言語は、アプリケーションに組み込まれています。これらは、 m4のようなテキスト置換マクロとはやや異なる意味ではありますが、「マクロ言語」と呼ばれることもあります。
メタプログラミングとは、他のプログラム(自身を含む)をデータとして書き込んだり操作したりするプログラム、あるいはコンパイル時に実行時に行われる処理の一部を実行するプログラムを作成することです。多くの場合、これによりプログラマーは、すべてのコードを手動で記述する場合と同じ時間で、より多くの作業をこなすことができます。
モジュール型プログラミングとは、関数や記号を独立したモジュールに整理するプログラミング手法である。
マルチパラダイム言語は、複数のプログラミングパラダイムをサポートします。つまり、 1つのプログラムで複数のプログラミングスタイルを使用できるということです。その目的は、プログラマーがそれぞれの作業に最適なツールを選択できるようにすることです。つまり、どのパラダイムもすべての問題を最も簡単かつ効率的に解決できるわけではないということを認識した上で、最適なツールを選択できるようにすることです。
C言語やPythonなどの汎用プログラミング言語も技術計算に使用されますが、このリストは技術計算にほぼ専ら使用される言語に焦点を当てています。
クラスベースのオブジェクト指向プログラミング言語は、クラスによって定義されたオブジェクトをサポートします。クラス定義にはメンバデータが含まれます。メッセージパッシングは、オブジェクト指向言語における主要な概念ではないにしても、重要な概念です。
引数の一部が属するクラスによってパラメータ化された多相関数は、一般的にメソッドと呼ばれます。シングルディスパッチの言語では、クラスにメソッド定義が含まれるのが一般的です。マルチディスパッチの言語では、メソッドは汎用関数によって定義されます。ただし、シングルディスパッチのメソッドが汎用関数である例外もあります(例:Biglooのオブジェクトシステム)。
プロトタイプベース言語とは、クラスとインスタンスの区別がなくなったオブジェクト指向言語のことである。
手続き型プログラミング言語は、実行可能なコードステートメントの単位とスコープ(データ表示範囲)の概念に基づいています。手続き型プログラムは、ユーザーが記述した、またはコードライブラリで提供される1つ以上の単位またはモジュールで構成されます。各モジュールは、言語によって関数、ルーチン、サブルーチン、またはメソッドとも呼ばれる1つ以上の手続きで構成されます。手続き型言語の例としては、以下のようなものがあります。
リフレクション機能を持つプログラミング言語では、プログラムが実行時またはコンパイル時に高レベル構造を調べたり、場合によっては変更したりできます。これは、Smalltalkのような高レベル仮想マシンプログラミング言語で最も一般的であり、 Cのような低レベルプログラミング言語ではあまり一般的ではありません。リフレクションをサポートする言語とプラットフォーム:
ルールベース言語は、データセット内の条件によって活性化されるとルールをインスタンス化します。可能なすべての活性化条件の中から、いくつかの条件が選択され、それらのルールに属するステートメントが実行されます。ルールベース言語には以下のようなものがあります。
スタックベース言語は、スタックデータ構造に基づいたデータ構造言語の一種です。
同期プログラミング言語は、頻繁に中断され、迅速な応答が求められるリアクティブシステムのプログラミングに最適化されています。このようなシステムの多くはリアルタイムシステムとも呼ばれ、組み込みシステムでよく使用されます。
例:
A shading language is a graphics programming language adapted to programming shader effects. Such language forms usually consist of special data types, like "color" and "normal". Due to the variety of target markets for 3D computer graphics.
They provide both higher hardware abstraction and a more flexible programming model than previous paradigms which hardcoded transformation and shading equations. This gives the programmer greater control over the rendering process and delivers richer content at lower overhead.
Shading languages used in offline rendering produce maximum image quality. Processing such shaders is time-consuming. The computational power required can be expensive because of their ability to produce photorealistic results.
These languages assist with generating lexical analyzers and parsers for context-free grammars.
A system programming language is for low-level tasks like memory management or task management; it usually refers to a language used for systems programming; such languages are designed for writing system software, which usually requires different development approaches relative to application software.
System software is computer software designed to operate and control computer hardware, and provide a platform to run application software. System software includes software categories such as operating systems, utility software, device drivers, compilers, and linkers. Examples of system languages include:
Transformation languages serve the purpose of transforming (translating) source code specified in a certain formal language into a defined destination format code. It is most commonly used in intermediate components of more complex super-systems in order to adopt internal results for input into a succeeding processing routine.
Visual programming languages let users specify programs in a two-(or more)-dimensional way, instead of as one-dimensional text strings, via graphic layouts of various types. Some dataflow programming languages are also visual languages.
Computer scientist Niklaus Wirth designed and implemented several influential languages.
These are languages based on or that operate on XML.
save and restore operators. PostScript Level 2 introduced a garbage collector, but its usage is optional.[28]Foundation, AppKit or UIKit); on Linux, the developer needs to import Glibc, and ucrt on Windows.