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?
programming-languages
terminology
markup
Lucas - Melhor Academia de Codificação
fonte
fonte
Respostas:
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:
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.
fonte
- "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.
fonte
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.
fonte
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.
fonte