プログラミング言語
構文仕様は一般にバッカス・ナウア記法などによって形式的に示される。
コンピュータ・プログラミング言語の設計は「言語仕様」として示され、実装は「言語処理系」と呼ばれる。以下はそれらについての概観である。
静的型付け(静的型付き言語)では、全ての式の型はそのプログラムを実行する前(一般にコンパイル時)に決定される。例えば、1とか(2+2)という式は整数型であり、文字列を期待している関数には渡せず、日付(型)を格納するよう定義された変数には代入できない。
静的型付けでは、型を明記する場合と型推論を行う場合がある。前者ではプログラマは適切な位置に型を明記しなければならない。後者では、コンパイラが式の型を文脈から推論する。C++やJavaなどの主な静的型付き言語では、型を明記する。完全な型推論は主流でない言語に使われている(HaskellやML)。ただし、型を明記する言語でも部分的な型推論をサポートしていることが多い。たとえば、JavaやC#では限定された状況で型推論を行う。
動的型付け(動的型付き言語)では、型の安全性は実行時に検査される。言い換えれば、型はソース上の式ではなく、実行時の値に対して付与される。型推論言語と同様、動的型付き言語でも式や変数の型を明記する必要はない。また、ある1つの変数がプログラム実行中に異なる型の値を格納することも可能である。しかし、コードを実際に実行してみるまで型の間違いを自動的に検出することができず、デバッグがやや難しい。動的型付き言語としては、Ruby、LISP、JavaScript、Pythonなどがある。
以上のようにプログラミング言語の分類法は多数あるので、各プログラミング言語は複数のカテゴリに分類可能である。たとえばアセンブリ言語は「低水準言語」に分類され、かつ「非オブジェクト指向言語」に分類される。Javaは「高級言語」に分類され、かつ「オブジェクト指向言語」に分類され、かつ「並行性言語」に分類される。Pythonは「オブジェクト指向言語」であり「スクリプト言語」である。LISPは「マルチパラダイム言語」で「関数型言語」で「手続き型言語」である。
それ以外に、コンピュータがプリンター(やモニタ)などを制御するために使うプログラミング言語を分類するための「ページ記述言語」という分類法もある。 ページ記述言語の代表的な例としては、PostScriptを挙げることができる。たとえば、プリンターで美麗な印字をする場合、画面上のボタンやメニューで「印刷」という命令を選ぶわけだが、その時点でPC内のプリンター制御用プログラムがPostScript言語でプログラムを自動生成し、そのプログラムをケーブルやWifi経由でプリンターに向けて送り出し、それを受け取ったプリンターの側でそれを実行するということで美麗な印字、繊細な曲線に満ちたフォントの印字を実現している。
その他に、あまり真面目な分類ではないが、わざわざ理解が難しくなるように作られた(冗談のような)プログラミング言語を特に「難解プログラミング言語」と分類することもある。