我被告知HTML是一种标记语言,C ++是一种编程语言,这有什么不同?


22

我的编程朋友总是告诉我HTML是一种标记语言,而C ++是一种编程语言。当我问他们有什么区别时,他们从不给我一个合理的答案。

是什么可以使C ++成为一种编程语言,而HTML却没有呢?


5
除了图灵完善之外,您是说其他意思吗?
Manoj R

1
@ManojR并非所有图灵完整语言都被视为编程语言,例如XSLT。
yannis


1
很棒的编辑@gnat,谢谢。重新打开问题,删除过时的注释。
yannis

1
@YannisRizos我只是在评论中复制了OP给出的说明。想知道为什么这么多用户将关于他们帖子的重要内容放在评论中,而不是进行编辑;我本人几乎总是在这种情况下编辑我的帖子
gnat 2012年

Answers:


45

编程语言是一种旨在将指令传递给计算机的符号。按照这个定义,C ++和HTML都是编程语言,就像约瑟夫·马里·贾奎德(Joseph Marie Jacquard)在1801年用来对织机进行编程一样

然而,随着用于构造和/或描述数据的语言的激增,编程语言的定义转移到仅包括能够表达算法的语言。这是当今更常见的定义,不包括HTML或XML之类的语言。

当前定义的核心是图灵完整性的概念。大多数编程语言都是图灵完备的,图灵完备性经常被引用为将编程语言与任何其他计算机语言区分开的一个重要特征。作为一般经验法则已经足够了,但并不完全准确:

  1. 一些非图灵完整语言被视为编程语言,例如Charity
  2. 一些通常不被认为是编程语言的语言是图灵完整的,例如XSLT
  3. 仅图灵完整性并不能说明语言的实用性

根据上下文,您可以选择所需的任何定义。

编辑:

进一步知道,一种语言的实现方式不会赋予语言本身特性,例如:语言的规范可能会定义图灵完整的语言,有人可能会随意地实施图灵完整性。但是,这种实现不尽人意的实现并不意味着该语言本身也不是完全实现的(而是可能意味着实现不符合要求)。语言的详细信息和语言的特定实现的详细信息应视为独立的事物,这就是为什么调用解释或编译的语言不准确的原因。


6
您能否详细说明“ XSLT不被视为编程语言”。我从来没有见过这个问题,而IMO在讲这个问题时甚至会质疑某人对PL的了解或能力。我什至无法想到不应将XSLT视为PL的任何原因(XSLT可能是巡视tarpit的温和案例,但这是另一个问题)。
bhaak

@bhaak我并不是说不应将其视为一种编程语言。数据转换语言通常不被认为是编程语言,因为无论是不是编程语言,它完全没有说明。我已经在XSLT中看到了业务逻辑,我个人认为它是一种编程语言。但是,如果我没有第一次在工作中看到它,我可能不会。无论如何,谁在乎?
yannis

您可以添加一两个句子来说明完成演奏的含义。
phant0m 2012年


@ think123我认为我不能给出比Wikipedia中的定义更简单的定义,并且我已经链接到答案中的相关文章。
yannis

5

短语“当我看到时便知道”是一个口语表达,尽管类别是主观的或缺乏明确定义的参数,但说话者试图对可观察的事实或事件进行分类。美国最高法院大法官波特·斯图尔特(Potter Stewart)曾用该词组来描述他在雅各布利斯Jacobellis)诉俄亥俄州Ohio)(1964)中的淫秽行为的门槛测试。

- “当我看到它时就知道”,维基百科文章

像淫秽一样,我想我们一看到一种编程语言就知道了。显然,OP确实如此,因为您已经判断C ++是一种编程语言,而HTML却不是。

那么追求正式定义的目标到底是什么?Yannis已经给出了一个简短的清单,说明为什么最流行的定义(图灵完整性)存在缺陷:它导致了分类,无视“当我看到它时就知道”测试。

我把它给你,任何定义,你可以拿出会导致一些语言,我们都觉得是不是 “程序设计”语言将被归类为如此; 或某些我们都认为 “编程”的语言将被归类为不是

为什么随便吃呢?我使用一种简单的启发式方法:一种编程语言是一种语言,据我认为并根据我的观察,其主要目的是编写程序。不标记内容。不转换XML。编写通用程序。我宁愿只在看到它时就知道它,而不是尝试确定正式的定义,而且我认为尝试这样的定义不会带来任何真正的价值。


但是现在您将“编程语言”限制为“通用编程语言”。后者是人们通常所说的“编程语言”的意思,但是准确地追求“编程语言”的定义特征的目的也在于理解编程语言是什么,它们如何工作以及它们的局限性。例如,任何熟练的程序员在遇到停顿问题时都必须意识到这一点,如果不研究编程语言的理论界限,这将是困难的。
JesperE 2012年

@JesperE:我很乐意将我的“我看到的时候知道”的判断仅限于目的明确的编程语言。我也不同意“任何熟练的程序员”都需要有关暂停问题的任何知识-我知道,从我的正规计算机科学教育中学到的知识与我在近二十年的职业发展中从来没有任何关系。
Carson63000

1
如果您不必提起它,那可能很好。这并不意味着知道并不重要。您不会通过实际使用频率来判断安全带的质量,对吗?
JesperE

根据您的启发,省略是一种编程语言吗?
Brian

@Brian:有趣的一个!我想我一直只是简单地将elisp视为Lisp的一种实现,它显然是一种编程语言,尽管这种特定实现在目的范围上更为具体。
Carson63000

2

标记语言主要处理信息的显示方式,通常在编程基础结构中缺少变量,数学,比较,决策(如果...则),循环(for,while)等。

HTML本身是静态的;也就是说,很像文字处理器,它旨在按原样显示信息。只有添加某种编程语言(通常是JavaScript,PHP等脚本语言),HTML网页才能具有“变化的”内容。脚本语言提供了变量,数学,比较,决策,循环等“编程”的可能性。


0

HTML是一种声明性语言。它本身并没有做很多事情,它只是描述了文档及其内容(使用具有语义含义的标签)。

另一方面,C ++会执行某些操作。它确实定义了函数和类,但同时也描述了这些函数应如何协同工作,如何以有意义的方式将它们的输入和输出联系在一起以及应用程序应如何整体运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.