web-dev-qa-db-ja.com

プログラミング言語vsマークアップ言語vsスクリプト言語

今まで、私は[〜#〜] key [〜#〜]これら3つの違いを知りません。誰かが私にこれについて尋ねたとき、私はC#がプログラミング言語であり、HTMLとXMLがマークアップ言語であり、JavaScriptとVBScriptがスクリプト言語であることだけを伝えます。しかし、それらを互いに区別する主な違いは何ですか?

38
rcadaoas

これら3種類の言語の境界線を見つけてみましょう。もちろん、これは私の意見ですので、数多くの例外や反例があります。

  • マークアップ言語は、「これらのユーザー名を箇条書きまたはテーブルとして表す」のように、データのpresentationを制御するために使用されます。

  • スクリプト言語は、データを生成するためにプログラム間の仲介に使用されます。これは特にbashなどのシェルスクリプト言語に当てはまりますが、これについて考えると、PythonまたはPerlは、Cでプログラムを作成せずにUNIXでタスクを実行する必要性から生まれました。ほとんどの場合、それらの言語で制御します言語自体のインタプリタですは、一般的なタスクを実行します。対話する他の典型的なプログラムは、データベースサーバーまたはWebサーバーです。

    ユーザーリストのメタファーに戻ると、スクリプト言語でデータベースに「すべてのユーザー名を教えて」と尋ね、Webサーバーに「このユーザーリストをこのリクエスタに送信する」と尋ねます。

  • プログラミング言語はデータの変換に使用されます。これは、入力データを出力に書き換えるCPU命令を作成することによって行われます。うまくいけば、望ましい出力です。データの変換の例は、多数の加数から合計を計算すること、一連の条件から微分方程式系を解くこと、または、可能性のある同時クエリのシーケンスが与えられた場合に一貫した方法でツリー状の構造から読み書きすることです。 。

    ユーザーリストのメタファーに戻り、プログラミング言語で、レコードのテーブルをトラバースし、各レコードから「名前」フィールドを抽出して、すべてをリクエスタに返す方法を記述します。

スクリプト言語はプログラミング言語のサブセットであることに注意してください。つまり、言語は「スクリプト」と「プログラミング」の両方である可能性があります:Pythonは「プログラム間の仲介」と「データの変換」に定期的に使用されます"。Javaのような他の言語もありますが、これは「プログラム間の仲介」にはほとんど使用されません。これは不可能ではないためですが、これが簡単にできるように設計されていないためです。スクリプトの重要な機能言語は、他のプログラムを調整できるということです。まるで、スクリプトが俳優に開始の手掛かりを与えるのと同じです。

38
logc

マークアップ言語は、構造化データを表すために使用される言語です。たとえば、HTMLでは、フラットテキストドキュメントと比較して、ドキュメントの一部がタイトルであるか、他の一部がリストであるかを指定できます。

マークアップ言語はプログラミング言語とは見なされません¹。

プログラミング言語との違いは必ずしも明白ではありません。たとえば、XSLTはチューリング完全言語²ですが、マークアップ言語であるXMLに基づいています。

ウィキペディア自体は、XSLTをプログラミング言語またはマークアップ言語として認定することを避けるために重要な努力をしています。それは、それが宣言型言語であり、「関数型プログラミング言語とデータベースクエリ言語に見られる最適化手法」を使用しているとだけ述べています。

スクリプト言語は、コンパイルではなく解釈されるプログラミング言語です。つまり、スクリプト言語はすべてのプログラミング言語のサブセットを表します。

言語がコンパイルされているか解釈されているかが常に明らかであるとは限らないように、プログラミング言語がスクリプト言語であるかどうかは必ずしも明らかではありません。たとえば、PHPmayは中間バイトコードにコンパイルされ³、JITコンパイラによってマシンコードに変換されますが、スクリプト言語と見なされます⁴)。

参照: Splitting Meta-Hairs by Steven Lott。


¹「XMLはプログラミング言語ではない」。 10ポイントのXML を参照してください。

²「XSLTはチューリング完全言語です」を参照 WikipediaのXSLT

³「HHVMはHackとPHP=を中間バイトコードにコンパイルします。このバイトコードは、実行時にジャストインタイム(JIT)コンパイラーによって動的にx64マシンコードに変換されます。」参照 [〜#〜] hhvm [〜#〜]

スクリプト言語 Wikipediaのタイプ別プログラミング言語のリストにあります。

11

あらゆる種類の分類法を作成するには、最初にいくつかの質問をする必要があります。

  • オブジェクトは、適切に定義された関係に入れますか?
  • もしそうなら、それらは実際に存在しますか?
  • オブジェクト間の特定の種類の関係のみに制限していますか、それともシステムが正当な関係のみを使用するための一定の要件がありますか?

通常、あなたが尋ねたような質問を聞いたとき、予想される答えはいくつかの仮定をします。たとえば、これらはすべて言語であるため、言語のより一般的な概念の下で階層を形成する必要がある、またはすべての言語の空間を分割する、または互いのサブセットであると想定するのは当然です。

プログラミング言語

残念ながら、上記のいずれも当てはまらないようです。おそらく、プログラミング言語だけが最も同意する定義を持っています。プログラミング言語は、プログラムをエンコードする言語です。エンコードとは、その言語のWordをプログラム(一連のアクション)として解釈できることを意味します。コンピュータプログラミング言語はこれらのサブセットです。非コンピュータープログラミング言語の例:スーパーマーケットのバイヤーの指示として解釈される食料品リスト、転写ペプチドによって解釈される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
...

結論:現在のところ、この区分はあまり意味がなく、どのような言語に直面しているかを直観的に理解できるだけですが、厳密な定義は提供しません。

2
wvxvw

3つの概念はすべて多少重複しているため、XSLTがプログラミング言語であるか、Pythonがスクリプト言語であるかどうかにかかわらず)無限の引数を取得できます。

マークアップ言語テキスト形式の構造化データを表す言語です。HTMLが最もよく知られていますが、グラフィック用のSVGなど、さまざまな目的のための多数の形式があります。 、Webサービスインターフェースを記述するためのWSDL、.net内のリソースファイル用のresxなど。経験則では、マークアップ言語はプロセスやアルゴリズムを記述しているのではなく(プログラミング言語が記述しているように)、純粋なデータです。しかし、コードとデータの間に基本的な違いがないisことは、CSの基本的な洞察でもあります。 XSLTなどの一部のマークアップ言語には、「実際の」プログラミング言語などのループや条件があり、Prologなどの一部のプログラミング言語は、コードでプロセスが指定されていないほぼ純粋なデータです。また、LISPは、独自のコードを構造化データ形式として扱うほど、線をぼかします。

プログラミング言語スクリプト言語の違いは、今日ではほとんど使用されていない歴史的な違いです。昔は、たとえばCで書かれたスタンドアロンプ​​ログラムをコンパイルしていて、他のプログラムやツールを操作するように解釈および設計された、ShellスクリプトやWord Basicなどのスクリプト言語がありました。今日、さまざまなレベルのコンパイルと解釈(バイトコードのコンパイル、JITコンパイルなど)と、さまざまな言語に依存しないAPIがあるため、多くの中間点があるため、この線はかなりぼやけています。したがって、この区別はそれほど役に立ちません。

1
JacquesB

マークアップ言語は、ロジックではなくデータを記述するために使用されます。それらの典型的な用途は、ドキュメントのフォーマットを説明することです。たとえば、HTMLはこのために設計されています。ただし、一般的なデータ形式として使用されることもあります。XMLは、データを記述するためによく使用されるマークアップ言語です。

プログラミング言語とスクリプト言語の違いは非常にあいまいであり、計算可能な問題をそれらで解決できるという点で、どちらも完全に解決する傾向があります。言語がプログラミング言語であるかどうかを確認するには、いくつかの一般的な「ヒント」があります。

  • 多くの場合、スクリプト言語はコンパイルされるのではなく解釈されるか、少なくとも解釈されるオプションを提供します。
  • 多くの場合、スクリプト言語は、実行が高速ではなく、高速で動作するように構築されています。
  • スクリプト言語には、非常に広範な標準ライブラリが付属する傾向があります。多くのプログラミング言語でも同様ですが、それらはオプションです。

しかし結局のところ、言語がスクリプト言語であるかプログラミング言語であるかは、厳密な基準というよりはむしろ慣習の問題です。上記のヒントは単なる傾向ですが、スクリプト言語のすべての基準を満たすプログラミング言語が見つかりますが、まだプログラミング言語と見なされています。

0