Linguagem de programação vs Linguagem de marcação vs Linguagem de script

38

Até agora eu não sei os CHAVE diferenças entre estes três. Quando alguém me pergunta sobre isso, digo apenas que C # é uma linguagem de programação, HTML e XML são linguagens de marcação e JavaScript e VBScript são linguagens de script. Mas quais são as principais diferenças que os distinguem?

rcadaoas
fonte
Não se esqueça de consultar idiomas!
Kyle Delaney

Respostas:

38

Deixe-me tentar encontrar uma linha divisória entre esses três tipos de linguagem. Obviamente, haverá inúmeras exceções e contra-exemplos, pois essa é apenas a minha opinião.

  • Uma linguagem de marcação é usada para controlar a apresentação dos dados, como "representar esses nomes de usuário como uma lista de marcadores ou como uma tabela".

  • Uma linguagem de script é usada para mediar entre programas , a fim de gerar dados. Isso vale especialmente para linguagens de script de shell como o bash, mas se você refletir sobre isso, também Python ou Perl vieram da necessidade de realizar tarefas no UNIX sem escrever um programa em C. O programa que você controla na maioria das vezes nessas linguagens é o intérprete do próprio idioma , que realiza tarefas gerais para você. Outros programas típicos com os quais você interage são servidores de banco de dados ou servidores da web.

    Voltando à metáfora da lista de usuários, em uma linguagem de script, você solicita ao banco de dados "me dê todos os nomes de usuário" e depois pede ao servidor da Web "envie esta lista de usuários a este solicitante".

  • Uma linguagem de programação é usada para transformar dados . Isso é feito criando instruções da CPU que reescrevem os dados de entrada na saída; felizmente, a saída desejada . Exemplos de transformação de dados é calcular uma soma de um número de adendas, ou resolver um sistema de equações diferenciais de um conjunto de condições, ou escrever e ler de uma estrutura semelhante a uma árvore de maneira consistente, dada uma sequência de consultas possivelmente simultâneas .

    Voltando à metáfora da lista de usuários, em uma linguagem de programação, você escreve como percorrer uma tabela de registros, extrair de cada registro o campo "nome" e retornar todos eles ao solicitante.

Observe que as linguagens de script são um subconjunto das linguagens de programação, ou seja, uma linguagem pode ser "script" e "programação": Python é regularmente usado para "mediar entre programas" e também para "transformar dados". Existem outras linguagens como Java, que raramente são usadas para "mediar entre programas", não porque isso é impossível, mas porque elas não foram projetadas para facilitar isso. A principal característica de uma linguagem de script é que ela pode orquestrar outros programas, assim como um script dá a dica para um ator começar sua parte.

logc
fonte
7
Linguagens de script são formalmente uma subclasse de linguagens de programação. (Eu também vi linguagens como C e Java ser totalmente interpretado, com um REPL; a barreira é permeável nos dois sentidos ...)
Donal Fellows
1
@DonalFellows: você está certo. Respondi com isso em mente, mas não usei explicitamente a expressão "um é um subconjunto do outro". Além disso, não impliquei que uma categoria seja interpretada e a outra não, porque sabia que essa é uma distinção fraca.
logc 26/05
1
@DonalFellows: editei minha resposta para mencionar explicitamente que um é um subconjunto do outro.
logc 26/05
1
Apoio esta resposta por ser a única (até agora) que afirma que as linguagens de marcação são linguagens que descrevem a estrutura dos dados.
Idan Arye
3
@ JörgWMittag: Eu sabia que haveria exceções, é por isso que comecei com "haverá inúmeras exceções" :) Caso contrário, onde na minha resposta eu implico que uma linguagem de script não é compilada? Tentei me concentrar no propósito de línguas, precisamente para evitar essa armadilha ...
logC
11

Uma linguagem de marcação é uma linguagem usada para representar dados estruturados. Por exemplo, o HTML permite especificar que uma parte do documento é um título ou outra parte é uma lista, em comparação com um documento de texto simples.

Linguagens de marcação não são consideradas como linguagens de programação¹.

A diferença com as linguagens de programação nem sempre é óbvia. Por exemplo, XSLT é uma linguagem completa de Turing², mas é baseada em XML, que é uma linguagem de marcação.

A própria Wikipedia faz esforços importantes para evitar a qualificação do XSLT como uma linguagem de programação ou uma linguagem de marcação. Diz apenas que é uma linguagem declarativa e que utiliza “técnicas de otimização encontradas em linguagens de programação funcional e linguagens de consulta de banco de dados”.

Uma linguagem de script é uma linguagem de programação que é interpretada, em vez de compilada, o que significa que as linguagens de script representam um subconjunto de todas as linguagens de programação.

Nem sempre é óbvio se uma linguagem de programação é uma linguagem de script, como nem sempre é óbvio se uma linguagem é compilada ou interpretada. Por exemplo, o PHP pode ser compilado para intermediar o bytecode³ e depois traduzido para o código da máquina pelo compilador JIT, enquanto ainda é considerado como linguagem de script⁴.

Veja também: Divisão de meta-pêlos de Steven Lott.


XML “XML não é uma linguagem de programação”. Veja XML em 10 pontos .

² “XSLT é uma linguagem completa de Turing” Veja XSLT na Wikipedia

³ “O HHVM compila o Hack e o PHP em um bytecode intermediário. Esse bytecode é então convertido em código de máquina x64 dinamicamente em tempo de execução por um compilador just-in-time (JIT). ”Consulte HHVM .

Languages Linguagens de script em Lista de linguagens de programação por tipo na Wikipedia.

Arseni Mourzenko
fonte
16
Os idiomas nunca são compilados ou interpretados. Idiomas são apenas . Compilação e interpretação são características do compilador ou intérprete (duh!) Usado para implementar a linguagem. Os termos "linguagem compilada" ou "linguagem interpretada" nem fazem sentido, pois pertencem a diferentes níveis de abstração. Se o inglês fosse um idioma digitado, "idioma compilado" seria um TypeError! Todo idioma pode ser implementado por um intérprete, todo idioma pode ser implementado por um compilador.
Jörg W Mittag
@ JörgWMittag "Todos os idiomas podem ser implementados por um intérprete, todos os idiomas podem ser implementados por um compilador" - 100% verdade?
Spartacus
@partpartus Estou chamando isso de hesitante "não". Eu acho que qualquer linguagem que pode ser compilado também poderia ser interpretado (apenas executar a instrução em vez de salvá-lo), mas eu ouvi que homoiconicity restringe severamente a possibilidade de compilação
Izkata
@ Izkata: eu não diria que a própria homoiconicidade muda a possibilidade de compilação, mas a metaprogramação que ela permite significa que muita compilação precisa ser adiada para o tempo de execução, se é que existe.
Mark Hurd
1
A parte "Linguagem de script" está totalmente errada como "Jörg W Mittag" já apontou. E no topo não há explicação para "Linguagem de programação".
David Raab
2

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.

wvxvw
fonte
1

Todos os três conceitos se sobrepõem um pouco, para que você possa obter argumentos sem fim, seja XSLT uma linguagem de programação ou Python, uma linguagem de script ou não.

Uma linguagem de marcação é uma linguagem que representa dados estruturados em um formato de texto , o HTML é o mais conhecido, mas existem vários formatos para diversos fins, como SVG para gráficos, WSDL para descrever interfaces de serviço da web, resx para recuperar arquivos em. net e assim por diante. Uma regra prática é que uma linguagem de marcação não descreve um processo ou algoritmo (como uma linguagem de programação), mas são dados puros. Mas também é uma percepção fundamental CS que não énenhuma diferença fundamental entre código e dados. Algumas linguagens de marcação como o XSLT possuem loops e condicionais como uma linguagem de programação "real", e algumas linguagens de programação como o Prolog são dados quase puros, sem processo especificado no código. E o Lisp confunde tanto a linha que trata seu próprio código como um formato de dados estruturado.

Quanto à distinção entre linguagem de programação e linguagem de script , essa é uma distinção histórica quase obsoleta atualmente. Antigamente, compilávamos programas independentes escritos em say C e, em seguida, tínhamos linguagens de script como say shell scripts ou Word Basic, que eram interpretadas e projetadas para manipular outros programas e ferramentas. Hoje a linha está bastante borrada com muito meio termo, já que temos vários níveis de compilação e interpretação (compilação de bytecode, compilação JIT etc.) e várias APIs independentes de idioma. Portanto, a distinção não é tão útil.

JacquesB
fonte
0

Uma linguagem de marcação é usada para descrever dados em vez de lógica. Um uso típico deles é descrever a formatação de documentos; o HTML é projetado para isso, por exemplo. Mas às vezes também são usados ​​como formatos gerais de dados, XML é uma linguagem de marcação que geralmente é usada apenas para descrever dados.

A diferença entre linguagens de programação e de script é muito imprecisa, ambas tendem a ser completas, pois você pode resolver qualquer problema computável com elas. Existem algumas 'dicas' gerais que você pode procurar para ver se uma linguagem é ou não uma linguagem de programação.

  • As linguagens de script geralmente são interpretadas em vez de compiladas ou, pelo menos, oferecem a opção de serem interpretadas.
  • As linguagens de script geralmente são criadas para trabalhar com rapidez e não com rapidez.
  • As linguagens de script tendem a vir com bibliotecas padrão muito extensas. Muitas linguagens de programação também funcionam, mas é mais opcional para elas.

Mas, no final, se uma linguagem é uma linguagem de script ou de programação, é mais uma questão de convenção do que qualquer critério estrito. Mesmo as dicas acima são apenas tendências, você encontrará linguagens de programação que atendem a todos os critérios para uma linguagem de script e ainda são consideradas linguagens de programação.

Pierre Andersson
fonte
4
Os idiomas nunca são compilados ou interpretados. Idiomas são apenas . Compilação e interpretação são características do compilador ou intérprete (duh!) Usado para implementar a linguagem. Os termos "linguagem compilada" ou "linguagem interpretada" nem fazem sentido, pois pertencem a diferentes níveis de abstração. Se o inglês fosse um idioma digitado, "idioma compilado" seria um TypeError! Todo idioma pode ser implementado por um intérprete, todo idioma pode ser implementado por um compilador. É até possível gerar automaticamente um compilador a partir de um intérprete e vice-versa.
Jörg W Mittag
@ JörgWMittag é verdade que nenhum idioma é inerentemente compilado ou interpretado. Mas muitas vezes existem convenções sobre como normalmente é executado, que é principalmente o que estou me referindo aqui.
Pierre Andersson