プログラミング言語は、目的を絞れば絞るほど、その目的に対しては強力、かつ、簡潔に書ける文法を提供できます。その一方で、用途ごとに異なるプログラミング言語があるというのも、作るコストも学習するコストも高くなりすぎます。 よく目にするプログラミング言語はだいたい汎用用途(汎用プログラミング言語)です。一方の、目的を絞ったプログラミング言語をドメイン特化言語(domain specific language、略してDSL)といいます。 ここでは、汎用/ドメイン特化それぞれの利点や、その背景にある「モデル化」の考え方、汎用プログラミング言語とDSLとの間の関係などについて説明していきます。