プログラミング言語の実装とは、ハードウェアおよびソフトウェアを構成して、そのプログラミング言語で書かれたプログラムを実行する方法を提供するものである。プログラミング言語の実装には大きく分けて2つの方法がある。コンパイラとインタプリタである。一般にある言語をコンパイラとインタプリタの両方で実装することが可能である。
コンパイラの出力は、ハードウェアで実行される場合とインタプリタで実行される場合がある。コンパイラの出力したものをインタプリタで実行する方式は、コンパイラとインタプリタの区別が曖昧な場合もある。例えば、BASICの実装には、行単位でソースをコンパイルして実行するようなものもある。
一般にコンパイラの出力(実行ファイル)を直接ハードウェアで実行する方が、インタプリタで実行するよりもずっと高速である。
インタプリタでの実行を改善する技法として、ジャストインタイムコンパイル方式がある。
プログラミング言語年表も参照
世界初のプログラミング言語は、いわゆるデジタルコンピュータの登場する前に存在した。19世紀には、プログラム可能な織機や自動ピアノ向けの巻紙があり、そこには現代的分類で言えばドメイン固有言語とされるプログラミング言語でプログラムが書かれていた。20世紀初頭には、タビュレーティングマシンによってパンチカードを使ったデータの機械処理が始まっている。1930年代から1940年代にかけて、アルゴリズムを表現する数学的抽象表現を提供するラムダ計算(アロンゾ・チャーチ)とチューリングマシン(アラン・チューリング)が考案された。ラムダ計算はその後の言語設計にも影響を与えている[16]。
1940年代、世界初の電子式デジタルコンピュータ群が製作された。1950年代初期のコンピュータである UNIVAC I や IBM 701 では機械語を使っていた。機械語によるプログラミングは、間もなくアセンブリ言語によるプログラミングに取って代わられた。1950年代後半になると、アセンブリ言語でマクロ命令が使われるようになり、その後 FORTRAN、LISP、COBOL という3つの高級プログラミング言語が開発された。これらは改良を加えられ現在でも使われており、その後の言語開発に重大な影響を与えた[17]。1950年代末、ALGOLが登場し、その後の言語に様々な影響を与えている[17]。初期のプログラミング言語の仕様と使い方は、当時のプログラミング環境の制約(パンチカードによるプログラム入力など)にも大きく影響されている[18]。
1960年代から1970年代末ごろまでに、現在使われている主な言語パラダイムが開発されたが、その多くはごく初期の第三世代プログラミング言語のアイデアの改良である。
APL - 配列プログラミングを導入した言語。関数型プログラミングにも影響を与えた[19]。
PL/I (NPL) - FORTRANとCOBOLの長所を取り入れて1960年代初期に設計された。
Simula - 世界初(1960年代)のオブジェクト指向プログラミングを採用した言語。1970年代中頃には純粋なオブジェクト指向言語であるSmalltalkが登場した。
C言語 - 1969年から1973年にかけてシステムプログラミング言語として開発され、現在でもよく使われている[20]。
Prolog - 1972年に設計された論理プログラミング言語。
ML - 1978年に開発された言語で、LISPをベースとした静的型付け関数型言語の先駆けとなった。
これらの言語のアイデアは様々な言語に引き継がれており、現在の言語の多くは、これらのいずれかの系統に属する。
1960年代と1970年代は、構造化プログラミングに関する論争が盛んに行われた時期でもある[21]。1968年、エドガー・ダイクストラの有名なレターが Communications of the ACM に掲載された。その中で、全ての高級言語からGoto文を排除すべきだと主張していた[22]。
1960年代と1970年代は、プログラムのメモリ使用量を削減し、プログラマやユーザーの生産性を向上させる技法も進展した時期である。初期の4GL(第四世代プログラミング言語)は、同じプログラムを第三世代プログラミング言語で書いたときよりもソースコードの量を劇的に削減した。
1980年代は、相対的な統合の時代であった。C++は、オブジェクト指向とシステムプログラミングの統合である。アメリカでは、軍需に使うことを目的として Ada というシステムプログラミング言語が標準化された。日本などでは、論理プログラミングを応用した第五世代言語の研究に資源を費やした[23]。関数型言語コミュニティでは、ML と LISP の標準化の動きがあった。これらはいずれも新たなパラダイムの生み出そうというものではなく、それまでに生み出されたアイデアに改良を加える動きであった。
1980年代の重要な言語設計傾向の1つとして、大規模システムのためのプログラミングを目的としてモジュールの概念を採り入れた点が挙げられる。