Cara, gostei da proposta e do desenvolvimento que você trouxe. Maaas nem precisa ir tão longe a ponto de discutir se Excel é ou não linguagem de programação. Tenho me pegado refletindo sobre algo que parece ainda mais “programável”: o PowerShell.

Olha só, de acordo com os critérios mencionados como ser Turing complete, ter controle de fluxo, suporte a variáveis, funções, capacidade de cálculo e manipulação de memória — o PowerShell preenche todos esses requisitos. Dá até pra ir além: ele carrega assemblies do .NET e manipula objetos via pipeline. Ou seja, se a gente for se apegar à definição puramente técnica, dá pra dizer que ele é uma linguagem de programação.

A Máquina de Turing é um critério técnico, mas ele mesmo admite que é uma convenção, um ponto de corte arbitrário e pragmático. O ponto é: ser Turing complete é condição suficiente, mas talvez não seja necessária pra gente, na prática, reconhecer algo como linguagem de programação.

Se a gente pensar que programar envolve projetar, abstrair, criar soluções genéricas, estruturar código para reuso e manutenção... aí o PowerShell começa a parecer mais com um instrumento de script do que uma linguagem "de verdade". Dá pra fazer umas mágicas com ele? Dá. Mas também dá com Excel, XSLT, ou até com CSS usando hacks. A questão é: vale a pena? Foi pra isso que ele nasceu?

PowerShell é claramente uma linguagem de programação quase por qualquer critério que use, não seria por algum bem exótico, ou querer que para ser TC pecisa da infinitude, que é impossível de realizar.

Não há dúvidas que a máquina de Turing é uma convenção arbitrária e não algo natural.

Um instrumento de script me parece ser uma programação, e novamente, precisamos nos apoiar em algum critério, e achque que ser TC pode ser ao mais adequado, outros que tornam quase tudo inviável ou quase tudo é programação não me parece adequado.

Não concordo que programar envolve os aspectos que listou, ainda que eles são desejáveis em sistemas profissionais feitos para durar, eu chamo isso que descrevou mais de engenharia de software, que apenas uma parte é a programação.

Com CSS sozinha há fortes limitações do que dá para fazer.

Não importa para que nasceu, importa se faz ou não faz. O mecanismo de templates de C++ é TC, portanto ele sozinho, mesmo sem o resto do C++ é uma PL por si só, e ele não nasceu para isso, demorou anos para descobrir que ele tinha essa capacidade.