text: 1980年代にモジュールシステムを採り入れた言語として、Modula-2、Ada、MLがあるが、それ以前には、既にPL/Iがモジュラープログラミングをサポートしていた。モジュールシステムはジェネリックプログラミングの構成要素とされることが多い。1990年代中頃には、インターネットの急激な成長によって新たな言語が生み出される機会が生じた。Perlは1987年にリリースされたUNIX上のスクリプト言語だったが、ウェブサイトの動的コンテンツ作成に使われるようになった。Javaはサーバ側のプログラミングに使われるようになった。要素 構文  プログラミング言語の見た目は、その構文（syntax・統語論）で決定される。図形などを使うグラフィカルなプログラミング言語もあるが、たいていのプログラミング言語のソースコードは文字列である。ファイル形式ではプレーンテキストすなわちテキストファイルが用いられる。また、たいていのプログラミング言語では、まず、（英語では lexical syntax などと呼ぶ）ソースの文字列から空白類を取り除き最小の意味のあるカタマリを取り出した「字句（トークン）」があり、構文は字句の並びである、という扱いのことが多い。字句を切り出して分類する処理を字句解析、その並びを調べる処理を構文解析という。（字句解析のために）字句規則を示すのには正規表現が、そして（構文解析のために）構文規則を示すのにはバッカス・ナウア記法が使われることが多い。下記はLISPの構文の一部分である。expression ::= atom | list atom ::= number | symbol number ::= ['+''-']?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z'][^' ']* list ::= '(' expression* ')' これは、次のような規則である。expression は atom または list である。atom は number または symbol である。number は1文字以上の数字列であり、オプションとして符号が前置される（空白は含まない）。symbol はアルファベットで始まる任意の文字列である（空白は含まない）。list は括弧記号の対であり、その間に0個以上の expression がある。これに従う例として、12345、()、(a b c232 (1)) などがある。構文上正しいプログラムが全て意味的に整合しているとは限らない、という設計の言語も多い。また、意味的に整合していても、それを書いた人が、自分の意図を正しく反映できていない場合もある。以下のLISPのコード断片は構文上は正しいが、意味的には問題がある。