Para produzir qualquer tipo de taxonomia, você precisa primeiro fazer algumas perguntas a si mesmo:
- Os objetos que vou colocar em qualquer relacionamento são definidos corretamente?
- Se sim, eles realmente existem?
- Estou me limitando a apenas um tipo específico de relacionamento entre objetos ou existe um requisito definido para o sistema usar apenas relações legítimas?
Normalmente, quando alguém ouve uma pergunta como a que você fez, a resposta esperada faz várias suposições. Por exemplo, é natural supor que, como todos esses são idiomas, eles devem formar uma hierarquia sob um conceito mais geral de idioma, ou que particionem o espaço de todos os idiomas ou que sejam subconjuntos um do outro.
Linguagens de programação
Infelizmente, nenhuma das opções acima parece ser verdade. Talvez apenas as linguagens de programação tenham uma definição com a qual mais concordamos. Linguagens de programação são linguagens que codificam programas. Codificação significa que uma palavra no idioma pode ser interpretada como um programa (uma sequência de ações). Linguagens de programação de computadores são um subconjunto delas. Exemplos de linguagens de programação que não são de computador: uma lista de compras, interpretada como instruções para um comprador em um supermercado, DNA interpretado pela transcrição de peptídeos, um registro musical analógico que serve como um programa para um gravador.
Portanto, linguagens de programação de computadores são as que programam computadores.
Linguagens de script
Não estão bem definidos. Está aberto à interpretação o que esse termo significa. Historicamente, parece que as linguagens de programação que não possuíam um compilador para produzir código de máquina foram chamadas dessa maneira. Pelos padrões atuais, isso colocaria toda linguagem de programação popular sem os Assemblers nessa categoria. Mesmo as chamadas linguagens de baixo nível, como C, exigem um tempo de execução com procedimentos pré-existentes; portanto, os binários obtidos pela compilação de um programa C não são inteiramente códigos de máquina, mas também chamam o tempo de execução de vez em quando.
Linguagens de marcação
Não estão bem definidos. Sempre que o termo é usado, a intenção parece ser descrever uma linguagem de programação com léxico muito limitado, usada principalmente para gerar imagens visuais ou de áudio. Pode ser difícil ver o XML como programando alguma coisa, mas se você observar a marcação Man ou TexInfo, verá que os caracteres "especiais" são realmente instruções do intérprete.
Também é possível fornecer uma interpretação de "programação" para a linguagem XML, algo que poderia ser assim:
< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
else if in comment, put in end comment mode
else if in end comment mode, signal error
...
Conclusão: hoje, essa divisão não parece muito significativa; ela só pode lhe dar alguma intuição sobre o tipo de linguagem com que se depara, mas não fornece uma definição rigorosa.