Remover mensagem de boas-vindas: “Sim, HTML é uma linguagem de programação, ok?” - #84
Open
diomonogatari wants to merge 1 commit into
Open
Conversation
jmsbs
approved these changes
Aug 31, 2026
jmsbs
left a comment
Contributor
There was a problem hiding this comment.
Obrigado por este ensaio, Dio.
Contributor
Author
não é quarta feira mas mandar bujas é giro |
Contributor
Devias fazê-lo mais frequentemente. |
|
HTML não é uma linguagem de programação. |
hugopeixoto
suggested changes
Aug 31, 2026
hugopeixoto
left a comment
Member
There was a problem hiding this comment.
A ideia é manter as duas versões
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Este PR remove a seguinte mensagem de boas-vindas:
Sim, HTML é uma linguagem de programação, ok?A mensagem oposta —
Não, HTML não é uma linguagem de programação, ok?— permanece.Motivação
A mensagem foi adicionada pelo [PR #61](#61), que apresenta uma interpretação suficientemente abrangente de “linguagem de programação” para incluir HTML, XML, YAML, formatos de ficheiro e, potencialmente, qualquer sequência de dados processada por um computador.
Essa definição é possível, mas pouco útil: se qualquer conjunto de símbolos que provoque a execução de rotinas num interpretador for uma linguagem de programação, então JSON, imagens JPEG, ficheiros de configuração e pedidos HTTP também passam a ser linguagens de programação.
A distinção convencional é mais específica:
Sob esta distinção, HTML é uma linguagem formal e uma linguagem de marcação, mas não uma linguagem de programação.
O que dizem as especificações do HTML
A classificação de HTML como linguagem de marcação não é apenas coloquial.
A [documentação original do HTML, arquivada pelo W3C em 1992](https://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/MarkUp.html), descreve o sistema como texto marcado utilizado para representar documentos de hipertexto.
Mais tarde, o [RFC 1866, escrito por Tim Berners-Lee e Daniel Connolly](https://datatracker.ietf.org/doc/rfc1866/), formalizou HTML 2.0 como uma linguagem de marcação e um formato de dados para criar documentos de hipertexto. O RFC define markup como caracteres adicionados aos dados de um documento para representar a sua estrutura.
A [especificação atual do WHATWG](https://html.spec.whatwg.org/dev/introduction.html) mantém a mesma classificação:
A especificação explica ainda que HTML foi originalmente concebido para descrever semanticamente documentos e define o seu âmbito como uma linguagem de marcação semântica acompanhada por APIs de scripting.
Isto é importante: a especificação distingue explicitamente a marcação HTML das linguagens de scripting utilizadas com ela.
Descrever um documento não é expressar uma computação
Considere o seguinte documento:
Este texto declara que existe um artigo composto por um título e um parágrafo. O browser analisa a marcação, constrói uma árvore DOM e apresenta o documento.
O fluxo é, simplificadamente:
O algoritmo que tokeniza o documento, constrói a árvore, calcula a acessibilidade e apresenta os elementos foi implementado no browser. O documento HTML é a entrada desse algoritmo; não é a sua implementação.
Isto é análogo a outros formatos:
O facto de um formato determinar o comportamento do programa que o interpreta não transforma automaticamente esse formato numa linguagem de programação. Um ficheiro JPEG faz um decoder executar operações extremamente específicas, mas o JPEG não contém um programa escrito pelo autor da imagem.
Da mesma forma,
<details>,<form>,<video>e outros elementos HTML ativam comportamentos definidos previamente pelo browser. O autor seleciona e configura esses comportamentos; não define os algoritmos que os implementam.O argumento dos
recordsO principal fundamento académico do PR original é o artigo de Peter Van Roy, [Programming Paradigms for Dummies: What Every Programmer Should Know](https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf).
O diagrama do artigo coloca XML e S-expressions numa categoria chamada descriptive declarative programming, construída sobre o conceito de
record. A partir daí, o PR conclui que possuir ou representar records seria suficiente para transformar uma notação numa linguagem de programação.No entanto, essa não é uma condição necessária e suficiente apresentada pelo artigo.
Primeiro, o próprio autor informa na introdução que não fornece definições formais. O diagrama é uma taxonomia de paradigmas e conceitos, não um algoritmo para decidir se qualquer formato é ou não uma linguagem de programação.
Segundo, na secção 4.1, Van Roy não define programação simbólica como a mera capacidade de armazenar records. Ele diz que uma linguagem de programação simbólica deve conseguir calcular com eles: criá-los, decompô-los e examiná-los.
Esta diferença é fundamental.
HTML consegue representar uma estrutura hierárquica que, depois de analisada, existe como objetos DOM. Contudo, HTML puro não fornece ao autor operações gerais para:
Quem realiza essas operações é o browser ou uma linguagem de programação associada, normalmente JavaScript.
Se a simples representação de records fosse suficiente, então JSON, YAML, CSV, Protocol Buffers e praticamente todos os formatos de serialização seriam linguagens de programação. Essa definição deixaria de distinguir programas dos dados consumidos pelos programas.
Mas HTML é declarativo
Ser declarativa não impede uma linguagem de ser uma linguagem de programação. Prolog, SQL e linguagens funcionais demonstram que programação não exige uma sequência imperativa de comandos.
Portanto, o argumento não deve ser “HTML não é programação porque não tem
if, ciclos ou variáveis”. Essas características não são universais entre linguagens de programação.A diferença está naquilo que a linguagem permite expressar.
Uma linguagem de programação declarativa permite descrever uma relação, consulta ou transformação que será computada pelo respetivo sistema. HTML declara a estrutura e a semântica de um documento, juntamente com instâncias de comportamentos predefinidos pelo user agent.
Por exemplo:
declara um campo que deve conter um endereço de email. A sintaxe não define o algoritmo de validação, não permite substituir os seus passos e não permite reutilizar essa validação para calcular arbitrariamente outro resultado. O comportamento já pertence à plataforma; a marcação apenas o configura.
E o JavaScript dentro de HTML?
A existência de JavaScript num documento HTML não transforma HTML numa linguagem de programação, tal como um bloco SQL dentro de um ficheiro Java não transforma Java em SQL.
A [especificação de scripting do HTML](https://html.spec.whatwg.org/multipage/scripting.html) diz que scripts permitem adicionar interatividade aos documentos. Também determina que o conteúdo de um
<script>clássico seja interpretado através da gramática do JavaScript.Neste exemplo:
<script>é marcação HTML;A distinção também aparece na própria especificação da linguagem. A [ECMA-262](https://262.ecma-international.org/) classifica ECMAScript como uma linguagem de programação para realizar computações e manipular objetos computacionais.
O mesmo se aplica a event handlers:
O atributo
onclickfaz parte da marcação, mas o seu valor é código JavaScript interpretado segundo outra linguagem. Embutir uma linguagem dentro de outra não torna ambas a mesma linguagem.JSX, templates, Web Components e frameworks também não alteram esta conclusão. Podem utilizar linguagens de programação para produzir ou manipular HTML, mas o resultado continua a ser marcação.
Turing completeness também não resolve a questão
O PR original está correto ao rejeitar Turing completeness como requisito obrigatório.
David Turner descreve, em [Total Functional Programming](https://www.jucs.org/jucs_10_7/total_functional_programming.html), uma disciplina de programação funcional que exclui intencionalmente a não terminação. Uma linguagem pode, portanto, ser útil para programação sem ser Turing-completa.
Mas daqui não resulta que qualquer linguagem não Turing-completa seja uma linguagem de programação.
A afirmação:
não implica:
Turing completeness mede poder computacional. Não determina, isoladamente, a finalidade ou a classificação de uma linguagem.
Por isso, esta alteração não se baseia em HTML não ter ciclos, variáveis ou poder computacional universal. Baseia-se na semântica que HTML oferece aos seus autores: descrição de documentos, não definição de computações.
A presença de algoritmos na especificação
A especificação do HTML contém centenas de algoritmos detalhados. Isto pode dar a impressão de que um documento HTML é um programa.
Porém, esses algoritmos são instruções para quem implementa browsers, parsers e user agents. Não são operações que um autor possa combinar livremente através da sintaxe HTML.
Existe uma diferença entre:
e:
O HTML especifica o primeiro. JavaScript, C, Rust e outras linguagens de programação permitem escrever o segundo.
Conclusão
Não existe uma autoridade matemática universal que impeça alguém de adotar uma definição extremamente ampla de “linguagem de programação”. Sob uma taxonomia suficientemente inclusiva, HTML, XML, YAML e muitos formatos de dados podem ser descritos como casos mínimos de programação declarativa.
No entanto, essa classificação perde utilidade ao deixar de distinguir:
Historicamente, normativamente e na terminologia técnica convencional, HTML é definido como uma linguagem de marcação. O facto de browsers processarem HTML e disponibilizarem comportamentos para os seus elementos não transforma a marcação num programa.
Assim, seguindo a distinção mais útil e adotada pelas próprias especificações:
HTML é uma linguagem. HTML não é uma linguagem de programação.
Finalmente, isto não é um juízo sobre quem trabalha com HTML. Construir interfaces acessíveis e semanticamente corretas exige conhecimento técnico real, e uma pessoa não deixa de ser programadora por trabalhar principalmente com tecnologias declarativas. A classificação da ferramenta não classifica a pessoa.
Este PR altera apenas a mensagem de boas-vindas e não afeta qualquer outro comportamento do bot.