回答:
これら3種類の言語の境界線を見つけてみましょう。もちろん、これは単なる私の意見であるため、多数の例外と反例があります。
マークアップ言語は、「これらのユーザー名を箇条書きリストまたは表として表す」など、データの表示を制御するために使用されます。
スクリプト言語は、データを生成するためにプログラム間を仲介するために使用されます。これは、bashのようなシェルスクリプト言語に特に当てはまりますが、それについて考えると、PythonまたはPerlも、Cでプログラムを作成せずにUNIXでタスクを実行する必要性から生じました。は、言語自体のインタープリターであり、一般的なタスクを実行します。対話する他の典型的なプログラムは、データベースサーバーまたはWebサーバーです。
ユーザーリストのメタファーに戻って、スクリプト言語で、データベースに「すべてのユーザー名を指定してください」と尋ね、次にWebサーバーに「このユーザーリストをこの要求者に送信する」と尋ねます。
データの変換にはプログラミング言語が使用されます。これは、入力データを出力に書き換えるCPU命令を作成することにより行われます。うまくいけば、目的の出力。データの変換の例は、多数の加数から合計を計算するか、一連の条件から微分方程式系を解くか、一連の同時クエリの可能性がある場合に一貫した方法でツリー状の構造を読み書きすることです。 。
ユーザーリストのメタファーに戻り、プログラミング言語では、レコードのテーブルを走査し、各レコードから「名前」フィールドを抽出し、それらすべてをリクエスターに返す方法を記述します。
スクリプト言語はプログラミング言語のサブセットであることに注意してください。つまり、言語は「スクリプト」と「プログラミング」の両方である可能性があります。Pythonは通常「プログラム間の仲介」と「データの変換」に使用されます。Javaのような「プログラム間の仲介」に使用されることはほとんどない他の言語があります。これは不可能ではなく、これらを容易にするように設計されていないためです。スクリプトが俳優に自分のパートを開始する手がかりを与えるように、スクリプト言語の重要な特徴は、他のプログラムを調整できることです。
マークアップ言語は、構造化データを表すために使用される言語です。たとえば、HTMLでは、フラットテキストドキュメントと比較して、ドキュメントの一部がタイトルであるか、その他の一部がリストであることを指定できます。
マークアップ言語はプログラミング言語とは見なされません¹。
プログラミング言語との違いは必ずしも明らかではありません。たとえば、XSLTはチューリング完全言語²ですが、マークアップ言語であるXMLに基づいています。
ウィキペディア自体は、プログラミング言語またはマークアップ言語としてXSLTを修飾することを避けるために重要な努力をしています。それは宣言型言語であり、「関数型プログラミング言語およびデータベースクエリ言語に見られる最適化手法」を使用しているとのみ述べています。
スクリプト言語は、コンパイルされるのではなく解釈されるプログラミング言語です。つまり、スクリプト言語はすべてのプログラミング言語のサブセットを表します。
言語がコンパイルされているか解釈されているかが常に明らかではないように、プログラミング言語がスクリプト言語であるかどうかは常に明らかではありません。たとえば、PHP は中間バイトコード³にコンパイルされ、JITコンパイラによってマシンコードに変換されますが、それでもスクリプト言語と見なされます⁴。
スティーブン・ロットによるメタヘアの分割も参照してください。
¹「XMLはプログラミング言語ではありません」。10ポイントのXMLを参照してください。
²「XSLTはチューリング完全言語です」ウィキペディアでXSLTを参照してください
³「HHVMはHackとPHPを中間バイトコードにコンパイルします。このバイトコードは、実行時にジャストインタイム(JIT)コンパイラーによってx64マシンコードに動的に変換されます。HHVMを参照してください。
⁴ スクリプト言語ウィキペディア上のタイプによって、プログラミング言語のリストでは。
TypeError
!すべての言語はインタプリタで実装でき、すべての言語はコンパイラで実装できます。
あらゆる種類の分類法を作成するには、最初にいくつかの質問をする必要があります。
通常、あなたが尋ねたような質問を聞くとき、予想される答えはいくつかの仮定をします。たとえば、これらはすべて言語であるため、より一般的な言語の概念の下で階層を形成する必要がある、またはすべての言語の空間を分割する、または互いのサブセットであると仮定するのは自然です。
残念ながら、上記のどれも真実ではないようです。おそらく、プログラミング言語だけが最も同意する定義を持っています。プログラミング言語は、プログラムをエンコードする言語です。エンコードとは、言語の単語をプログラム(一連のアクション)として解釈できることを意味します。コンピュータープログラミング言語は、これらのサブセットです。非コンピュータープログラミング言語の例:スーパーマーケットのバイヤーへの指示として解釈される食料品リスト、ペプチドの転写によって解釈されるDNA、テープレコーダーのプログラムとして機能するアナログ音楽レコード。
したがって、コンピュータープログラミング言語はコンピューターをプログラムする言語です。
明確に定義されていません。この用語の意味を解釈することは可能です。歴史的には、マシンコードを生成するコンパイラを持たないプログラミング言語はこのように呼ばれていたように思われます。今日の標準では、これにより、アセンブラーを除くすべての一般的なプログラミング言語がこのカテゴリに分類されます。Cのようないわゆる低レベル言語でも、既存のプロシージャを備えたランタイムが必要です。したがって、Cプログラムをコンパイルして得られるバイナリは完全にマシンコードではなく、時々ランタイムを呼び出します。
明確に定義されていません。この用語が使用されるときはいつでも、主に視覚的または音声イメージを生成するために使用される、非常に限られた語彙を持つプログラミング言語を記述することを意図しているようです。XMLが何かをプログラミングしていると見るのは難しいかもしれませんが、ManまたはTexInfoマークアップを見ると、「特別な」文字が実際にはインタープリターの指示であることがわかります。
また、次のようなXML言語の「プログラミング」解釈を行うこともできます。
< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
else if in comment, put in end comment mode
else if in end comment mode, signal error
...
ボトムライン:今日のこの区分は、あまり意味がないように見えます。どの言語に直面しているかについての直観を与えるだけですが、厳密な定義は提供しません。
3つの概念はすべてある程度重複しているため、XSLTがプログラミング言語であるか、Pythonがスクリプト言語であるかどうかにかかわらず、無限の引数を取得できます。
マークアップ言語が表現する言語である、テキスト形式で構造化データを、HTMLは、最もよく知られているが、様々な目的のための多数の形式は、グラフィックスのためのSVG、Webサービスのインタフェースを記述するためのWSDL、中resouceファイル用RESXように、あります。ネットなど。経験則では、マークアップ言語はプロセスやアルゴリズムを記述しませんが(プログラミング言語のように)、純粋なデータです。しかし、それはCSの基本的な洞察でもありますコードとデータの間に根本的な違いはありません。XSLTのような一部のマークアップ言語には、「実際の」プログラミング言語のようなループと条件があり、Prologのような一部のプログラミング言語は、コードでプロセスが指定されていないほぼ純粋なデータです。そして、Lispは独自のコードを構造化データ形式として扱うので、行を曖昧にします。
プログラミング言語とスクリプト言語の区別に関しては、これは今日ほとんど時代遅れの歴史的な区別です。昔は、C言語で記述されたスタンドアロンプログラムをコンパイルし、シェルスクリプトやWord Basicなどのスクリプト言語がありました。これらは、他のプログラムやツールを操作するために解釈および設計されていました。今日、さまざまなレベルのコンパイルと解釈(バイトコードのコンパイル、JITコンパイルなど)、および言語に依存しないさまざまなAPIがあるため、この行は多くの妥協点でかなりぼやけています。したがって、区別はそれほど有用ではありません。
マークアップ言語は、ロジックではなくデータを記述するために使用されます。それらの典型的な使用法は、ドキュメントのフォーマットを記述することです。たとえば、HTMLはこのために設計されています。しかし、これらは一般的なデータ形式としても使用される場合があり、XMLはデータを記述するためだけに使用されることが多いマークアップ言語です。
プログラミング言語とスクリプト言語の違いは非常に曖昧です。どちらも計算可能な問題を解決できるという点で、両方とも完全に理解しがちです。言語がプログラミング言語であるかどうかを確認するには、いくつかの一般的な「ヒント」があります。
しかし、最終的に、言語がスクリプト言語またはプログラミング言語である場合は、厳密な基準というよりも慣習の問題です。上記のヒントは単なるトレンドであり、スクリプト言語のすべての基準を満たしているが、依然としてプログラミング言語と見なされているプログラミング言語があります。
TypeError
!すべての言語はインタプリタで実装でき、すべての言語はコンパイラで実装できます。インタープリターからコンパイラーを自動的に生成することも、その逆も可能です。