Foi-me dito que HTML é uma linguagem de marcação, C ++ é uma linguagem de programação, o que poderia fazer essa diferença?


22

Meus amigos de programação estão sempre me dizendo que HTML é uma linguagem de marcação e C ++ é uma linguagem de programação. Quando pergunto qual é a diferença, eles nunca me dão uma resposta razoável.

O que poderia fazer uma chamada C ++ uma linguagem de programação e HTML não?


5
Você quer dizer que não seja Turing completo?
Manoj R

1
@ManojR Nem todas as linguagens completas do Turing são consideradas linguagens de programação, por exemplo, XSLT.
precisa

Re fechamento, veja o Q / A na meta em meta.programmers.stackexchange.com/q/5397/70298
miraculixx

1
Grande edição @gnat, obrigado. Pergunta reaberta, comentários obsoletos removidos.
yannis

1
@YannisRizos Acabei de copiar os esclarecimentos fornecidos pelo OP nos comentários . Pergunto-me por que tantos usuários colocam coisas importantes sobre suas postagens nos comentários, em vez de editar; me Eu quase sempre editar os meus posts em casos como esse
mosquito

Respostas:


45

Uma linguagem de programação é uma notação projetada para passar instruções para uma máquina. Por essa definição, C ++ e HTML são linguagens de programação, como foi a notação que Joseph Marie Jacquard usou em 1801 para programar seus teares .

No entanto, com a proliferação de linguagens usadas para estruturar e / ou descrever dados, a definição de uma linguagem de programação mudou para incluir apenas linguagens capazes de expressar algoritmos. Essa é a definição mais comum hoje em dia e exclui idiomas como HTML ou XML.

No coração da definição atual está o conceito de perfeição de Turing . A maioria das linguagens de programação é Turing completa, e a integridade de Turing é frequentemente citada como a característica crítica que separa uma linguagem de programação de qualquer outra linguagem de computador. Como regra geral, isso é bom o suficiente, mas não totalmente preciso:

  1. Algumas linguagens completas não Turing são consideradas linguagens de programação, por exemplo, Charity .
  2. Algumas linguagens que geralmente não são consideradas linguagens de programação são completas de Turing, por exemplo, XSLT .
  3. Completar Turing por si só não diz muito sobre a utilidade de uma linguagem .

Dependendo do contexto, você pode escolher qualquer definição que desejar.

Editar:

Que se saiba ainda mais, a implementação de uma linguagem não confere características à própria linguagem, por exemplo: as especificações de uma linguagem podem definir uma linguagem completa de navegação, alguém pode implementá-la ao acaso, deixando de lado a integridade da navegação. No entanto, essa implementação não é completa, mas o idioma em si não está completo (provavelmente significa que a implementação não é conforme). Os detalhes de uma linguagem e os detalhes de uma implementação específica de uma linguagem devem ser reconhecidos como coisas separadas; é por isso que é impreciso chamar uma linguagem interpretada ou compilada etc.


6
Você poderia elaborar o "XSLT não considerado uma linguagem de programação". Eu nunca vi isso e, na OMI, questionaria o conhecimento ou a competência de alguém com PLs ao proferir isso. Não consigo nem pensar em qualquer motivo para o XSLT não ser considerado um PL (o XSLT pode ser um caso moderado de tarpit turing, mas isso é outra questão).
bhaak

@ Bhaak Eu não estou dizendo que não deve ser considerada uma linguagem de programação. As linguagens de transformação de dados geralmente não são consideradas linguagens de programação, que não dizem absolutamente nada, se são ou não são linguagens de programação. Vi a lógica de negócios no XSLT e considero-a pessoalmente uma linguagem de programação. Mas provavelmente não o faria, se ainda não o vi no trabalho. De qualquer forma, quem se importa?
precisa

Você pode adicionar uma ou duas frases sobre o que significa estar completo.
Phant0m


@ think123 Acho que não posso dar uma definição mais simples do que a da Wikipedia, e já vinculei ao artigo relevante na resposta.
yannis

5

A frase "eu o conheço quando o vejo" é uma expressão coloquial pela qual um falante tenta categorizar um fato ou evento observável, embora a categoria seja subjetiva ou não possua parâmetros claramente definidos. A frase foi famosa pelo juiz Potter Stewart da Suprema Corte dos Estados Unidos para descrever seu teste de obscenidade em Jacobellis v. Ohio (1964).

- "Eu sei quando vejo" artigo da Wikipedia

Como a obscenidade, acho que todos conhecemos uma linguagem de programação quando a vemos. Claramente, o OP sim, já que você já considerou o C ++ uma linguagem de programação e o HTML não uma.

Então, qual é exatamente o objetivo de buscar uma definição formal? Yannis já deu um grande resumo de por que a definição mais popular, a integridade de Turing, é falha: leva a uma categorização que desafia o teste "eu sei quando vejo".

Afirmo a você que qualquer definição que você puder criar levará a algumas linguagens que todos julgamos não serem linguagens de "programação" serão categorizadas como sendo assim; ou para algumas linguagens que todos julgamos serem linguagens de "programação" serão categorizadas como não sendo assim.

Por que não apenas seguir seu instinto? Uso uma heurística simples: uma linguagem de programação é uma linguagem cujo objetivo principal, na minha opinião e de acordo com minhas observações, é escrever programas. Não para marcar conteúdo. Não para transformar XML. Escrever programas de uso geral. Prefiro saber quando o vejo do que tentar definir uma definição formal, e não vejo nenhum valor genuíno que possa advir da tentativa dessa definição.


Mas agora você está limitando "linguagens de programação" a "linguagens de programação de uso geral". O último é o que as pessoas geralmente querem dizer quando dizem "linguagem de programação", mas buscar exatamente quais são as características definidoras de uma "linguagem de programação" também tem o objetivo de entender o que são as linguagens de programação, como elas funcionam e quais são suas limitações. Por exemplo, qualquer programador experiente precisa reconhecer o problema de interrupção quando o encontrar, o que seria difícil sem estudar os limites teóricos das linguagens de programação.
JesperE

@JesperE: Fico feliz em limitar meu julgamento "eu sei quando vejo" a linguagens de programação que são pelo menos razoavelmente genéricas em propósito. Também discordo que "qualquer programador qualificado" precisa ter algum conhecimento do problema de interrupção - eu sei que meu conhecimento sobre isso na minha educação formal em ciência da computação nunca foi de nenhuma relevância para mim em quase duas décadas de desenvolvimento profissional.
Carson63000

1
Se você não teve que falar disso, provavelmente é bom. Isso não significa que não é importante saber. Você não julga a qualidade do cinto de segurança com que frequência ele é usado de verdade, não é?
JesperE

Pela sua heurística, elisp é uma linguagem de programação?
26713 Brian

@ Brian: um interessante! Acho que sempre pensei no elisp como uma implementação do Lisp, que claramente é uma linguagem de programação, embora essa implementação em particular seja muito mais específica em seu escopo de finalidade.
Carson63000

2

As linguagens de marcação lidam principalmente com a forma como as informações são exibidas e geralmente não possuem infraestrutura de programação de variáveis, matemática, comparação, tomada de decisão (se ... então), loops (por enquanto) etc.

O HTML por si só é estático; isto é, bem como um processador de texto, deve apresentar as informações como elas são. Somente com a adição de algum tipo de linguagem de programação (geralmente linguagens de script como JavaScript, PHP etc.) as páginas da Web em HTML podem ter um conteúdo "em mudança". As linguagens de script fornecem as possibilidades de "programação" com variáveis, matemática, comparações, tomada de decisão, loops, etc.


0

HTML é uma linguagem declarativa. Ele não faz muito por si só, apenas descreve um documento e seu conteúdo (usando tags com significado semântico).

C ++, por outro lado, faz alguma coisa. Ele define funções e classes, mas também descreve como essas funções devem funcionar juntas, como suas entradas e saídas são interligadas de maneira significativa e como o aplicativo deve ser executado como um todo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.