HTMLはマークアップ言語であり、C ++はプログラミング言語であると言われましたが、その違いは何ですか?


22

私のプログラミングの友人は、HTMLがマークアップ言語であり、C ++がプログラミング言語であるといつも言っています。私は彼らに違いは何であるかを尋ねると、彼らは私に合理的な答えを与えることはありません。

何がC ++をプログラミング言語と呼び、HTMLはそうではないのでしょうか?


5
チューリング完全であること以外のことを意味しますか?
マノジR

1
@ManojRすべてのチューリング完全言語がプログラミング言語と見なされるわけではありません(XSLTなど)。
ヤニス

クロージング再にてメタでQ / Aを参照してくださいmeta.programmers.stackexchange.com/q/5397/70298
miraculixx

1
@gnatのすばらしい編集、ありがとう。質問が再開され、廃止されたコメントは削除されました。
ヤニス

1
@YannisRizos私はコメントで OPによって与えられた説明をコピーしました。非常に多くのユーザーが投稿の重要なものを編集ではなくコメントに入れているのはなぜでしょうか。私自身、私はほとんどの場合、そのようなケースでは、私の投稿を編集
ブヨ

回答:


45

プログラミング言語は、命令をマシンに渡すように設計された表記法です。その定義では、C ++とHTMLの両方がプログラミング言語であり、Joseph Marie Jacquardが1801年に織機プログラムするために使用した表記法も同様です。

しかし、データの構造化や記述に使用される言語の急増に伴い、プログラミング言語の定義は、アルゴリズムを表現できる言語のみを含むように移行しました。これは現在、より一般的な定義であり、HTMLやXMLなどの言語を除外しています。

現在の定義の中心にあるのは、チューリング完全性の概念です。ほとんどのプログラミング言語はチューリング完全であり、チューリング完全性は、プログラミング言語を他のコンピューター言語から分離する1つの重要な特性としてしばしば引用されます。これは一般的な経験則としては十分ですが、完全に正確ではありません。

  1. Charityなど、一部の非チューリング完全言語はプログラミング言語と見なされます。
  2. XSLTなど、プログラミング言語とは一般に見なされていない一部の言語はチューリング完全です。
  3. チューリング完全性だけでは、言語の有用性についてはあまり言及していません

コンテキストに応じて、必要な定義を選択できます。

編集:

さらに知られているように、言語の実装は言語自体に特性を与えません。たとえば、言語の仕様はチューリング完全言語を定義するかもしれません。ただし、この実装が完全にチューリングされていないということは、言語自体が完全にチューリングされていないことを意味しません(むしろ、実装が非準拠であることを意味します)。言語の詳細と言語の特定の実装の詳細は別々のものとして認識されるべきです。これが、解釈またはコンパイルされた言語などを呼び出すのが不正確な理由です。


6
「XSLTはプログラミング言語とは見なされません」について詳しく説明してください。私はこれを見たことがなく、IMOこれを発言するときに誰かの知識やPLの能力に疑問を投げかけることさえあります。XSLTをPLと見なすべきではない理由を考えることすらできません(XSLTはターピットをチューリングする穏やかなケースかもしれませんが、それは別の問題です)。
bhaak

@bhaak プログラミング言語と見なすべきではないと言っているわけではありません。データ変換言語は一般にプログラミング言語とは考えられていません。プログラミング言語であるか、プログラミング言語でないかについてはまったく何も言いません。XSLTでビジネスロジックを見てきましたが、個人的にはプログラミング言語だと考えています。しかし、最初に仕事で見たことがなければ、おそらくそうは思わないでしょう。いずれにせよ、誰が気にしますか?
ヤニス

完全にチューリングすることの意味について1つまたは2つの文を追加できます。
phant0m


@ think123ウィキペディアの定義よりも簡単な定義を与えることはできないと思います。また、回答の関連記事に既にリンクしています。
ヤニス

5

「見ればわかる」というフレーズは、話者が観察可能な事実または出来事を分類しようとする口語表現ですが、カテゴリは主観的であるか、明確に定義されたパラメータを欠いています。この言葉は、ジャコベリスv。オハイオ(1964)でのわいせつに対するしきい値テストを説明するために、アメリカ合衆国最高裁判所のポッタースチュワートによって有名に使用されました。

- 「見ればわかる」ウィキペディアの記事

わいせつなように、私たちはプログラミング言語を見たとき、それを知っていると思います。あなたはすでにC ++がプログラミング言語であり、HTMLがプログラミング言語ではないと判断したので、明らかにOPはそうです。

それでは、正式な定義を追求する目標は正確には何ですか?ヤニスは、最も人気のある定義であるチューリング完全性に欠陥がある理由をすでに大雑把に説明しています。「見たときにわかる」テストに反する分類につながります。

あなたが思いつく定義はプログラミング言語ではないと感じるいくつかの言語につながることをあなたに伝えます。「プログラミング」言語はそうであると分類されます。または我々はすべての感触は、いくつかの言語にある「プログラミング」言語は以下のように分類されないようにされて。

なぜあなたの腸と一緒に行かないのですか?私は単純なヒューリスティックを使用します。プログラミング言語とは、私の意見では、私の意見では、プログラムを書くことを主な目的とする言語です。コンテンツをマークアップしないでください。XMLを変換しない。汎用プログラムを作成します。正式な定義を明確にしようとするよりも、見たときにそれを知っているだけで、そのような定義を試みることで得られる真の価値はありません。


しかし、今では「プログラミング言語」を「汎用プログラミング言語」に限定しています。後者は、人々が「プログラミング言語」と言うとき、通常意味するものですが、「プログラミング言語」の定義特性を正確に追求することは、プログラミング言語とは何か、どのように機能し、どのような制限があるかを理解することにも意味があります。例えば、熟練したプログラマーは、プログラミング言語の理論的境界を研究することなく困難になるであろう困難に遭遇したときに、停止する問題を認識しなければなりません。
JesperE

@JesperE:「見たときにわかる」判断を、少なくともかなり一般的な目的のプログラミング言語に限定できてうれしいです。また、「熟練したプログラマー」には停止する問題についての知識が必要であることに同意しません-私の正式なコンピューターサイエンス教育からの私の知識は、20年近くの専門能力開発において私とは関係がないことを知っています。
Carson63000

1
あなたがそれを持ち出す必要がなかったなら、それはおそらく良いでしょう。それは知ることは重要ではないという意味ではありません。シートベルトの品質は、実際に使用する頻度によって判断しませんか?
JesperE

ヒューリスティックでは、elispはプログラミング言語ですか?
ブライアン

@ブライアン:興味深いものです!この特定の実装はその目的の範囲がはるかに具体的であるにもかかわらず、私は常にelispをLispの実装として単純に考えてきたと思います。これは明らかにプログラミング言語です。
Carson63000

2

マークアップ言語は主に情報の表示方法を扱い、一般に変数、数学、比較、意思決定(if ... then)、ループ(for、while)などのプログラミングインフラストラクチャに欠けています。

HTML自体は静的です。つまり、ワードプロセッサのように、情報をそのまま提示することを意図しています。ある種のプログラミング言語(通常、JavaScript、PHPなどのスクリプト言語)を追加した場合にのみ、HTML Webページに「変化する」コンテンツを含めることができます。スクリプト言語は、変数、数学、比較、意思決定、ループなどの「プログラミング」の可能性を提供します。


0

HTMLは宣言型言語です。単独ではあまり機能せず、ドキュメントとその内容を説明するだけです(セマンティックな意味を持つタグを使用)。

一方、C ++は何かをします。関数とクラスを定義しますが、これらの関数がどのように連携するか、それらの入力と出力が意味のある方法で結び付けられる方法、およびアプリケーションが全体として実行される方法についても説明します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.