Qual é a diferença entre uma linguagem de script e uma linguagem de programação normal?


20

Qual é a diferença entre linguagem de programação e linguagem de script? Por exemplo, considere C versus Perl.

A única diferença é que as linguagens de script exigem apenas o intérprete e não exigem compilação e vinculação?


4
Receio que isso seja offtopic aqui; o que você quer saber é puramente uma questão de implementação de linguagem. Também parece atrair respostas superficiais / de opinião (não sua culpa, por si só), que sempre é uma bandeira vermelha.
Raphael

O hardware é um "intérprete" para idiomas compilados. A única diferença, então, é quantos intérpretes você está passando. Se a máquina for equivalente a Turing e você estiver usando um idioma equivalente a Turing, você poderá escrever um intérprete compilado Ano idioma e, em seguida, escrever um intérprete Bno idioma que o intérprete Apode executar, em seguida, um intérprete Cno idioma que o intérprete Bpode executar , etc. Essencialmente, é tudo uma questão de indireção, que tem menos a ver com a base teórica da computação e mais a ver com preocupações práticas de engenharia.
precisa saber é o seguinte

Salários (pré-DevOps)
Phil Lello

Respostas:


21

Eu acho que a diferença tem muito mais a ver com o uso pretendido da linguagem.

Por exemplo, o Python é interpretado e não requer compilação e vinculação, como é o Prolog. Eu classificaria ambos como defasagem de programação.

Os idiomas de programação destinam-se a escrever software. Eles são projetados para gerenciar grandes projetos. Provavelmente, eles podem chamar programas, ler arquivos etc., mas podem não ser tão bons quanto uma linguagem de script.

Os idiomas de script não se destinam ao desenvolvimento de software em larga escala. A sintaxe, os recursos, a biblioteca etc. concentram-se mais na realização de pequenas tarefas rapidamente. Isso significa que às vezes são mais "hackish" do que os idiomas de programação e podem não ter os mesmos recursos interessantes. Eles foram projetados para fazer com que tarefas executadas com frequência, como iterar através de vários arquivos ou executar tarefas sysadmin, sejam automatizadas.

Por exemplo, o Bash não faz aritmética muito bem, o que provavelmente tornaria a gravação de software em grande escala nele um pesadelo.

Como uma espécie de referência: eu nunca escreveria um tocador de música em perl, mesmo que provavelmente pudesse. Da mesma forma, eu nunca tentaria usar o C ++ para renomear todos os arquivos em uma determinada pasta.

Essa linha está ficando cada vez mais borrada. O JavaScript, por definição, um idioma de "script", é cada vez mais usado para desenvolver "aplicativos da web", que estão mais no domínio do software. Da mesma forma, o Python inicialmente se encaixava em muitos dos traços de uma linguagem de script, mas está vendo cada vez mais softwares desenvolvidos usando o Python como plataforma principal.


1
+1 para o exemplo da vida real: não consigo me imaginar forçado a usar C ++ para executar tarefas de renomeação em lote!
Casey Kuball

3
Você não indica diferenças conceituais, apenas a opinião popular sobre os respectivos casos de uso.
Raphael

3
Você também "não escreveria" a maior rede social do mundo em linguagem de script (FB em PHP), um dos primeiros serviços de blog que promoveu toda a tendência (LJ em Perl), sistema de controle de versão que permite facilmente que milhares de desenvolvedores trabalhem juntos (Mercurial em Python)? Desculpe, mas esse "script é para pequenas tarefas" é apenas um lixo popular.
precisa saber é o seguinte

1
@ Rafael Eu acho que as diferenças conceituais são nebulosas na melhor das hipóteses. A principal diferença está no uso popular, IMO. A maioria dessas linguagens será Turing completa e seguirá um modelo semelhante de computação. Nunca deparei com uma distinção ou definição formal, mas fique à vontade para editar minha resposta, se você tiver uma.
jmite

3
@ Rafael Isso faz parte do ponto: não há diferenças conceituais. O que você pode fazer no tempo de compilação versus tempo de execução é principalmente uma questão de interpretado versus compilado, e isso é uma propriedade da implementação, não da linguagem (embora o design da linguagem possa dificultar um modelo de implementação específico).
Gilles 'SO- stop be evil'

6

O artigo clássico sobre linguagens de script é o script de John K. Ousterhout : programação de nível superior para o século XXI , publicado no Computer 31 (3), 1998. Ele fez uma distinção entre as linguagens de script, por um lado, e as linguagens de programação do sistema, por um lado. o outro.

Ousterhout caracterizou as linguagens de programação do sistema como tendo evoluído para substituir as linguagens de máquina pela programação. Eles ocultam detalhes tediosos como atribuição de registro e sequências de chamada de sub-rotina, fornecem construções simples para gravar loops e outros idiomas comuns de fluxo de controle e impõem uma disciplina de digitação. Eles geralmente são implementados por um compilador (antecipado). Essas linguagens destinam-se a escrever softwares desde o início. Exemplos são C, C ++ e Java.

Por outro lado, as linguagens de script, de acordo com Ousterhout, partem da premissa de que já existem programas úteis por aí, geralmente escritos em linguagens de programação de sistema. Linguagens de script, como Perl, Python, Tcl, Visual Basic e os shell do Unix, fornecem ferramentas para combinar esses programas existentes em novos programas. Ousterhout caracterizou as linguagens de script como "sem tipo" (incluindo o que muitos chamam de digitação dinâmica) e como enfatizando o desenvolvimento rápido; eles geralmente são implementados por intérpretes.

Agora, é preciso ter cuidado para não supor que o modelo conceitual de um único autor seja autoritário. Embora nós, cientistas da computação, gostemos de fingir que somos matemáticos, dando definições precisas a todos os termos, na prática, a maioria das terminologias de computação é socialmente construída com significados difusos e heterogêneos; existe um consenso aproximado em um nível muito alto sobre a maioria dos termos, mas os detalhes geralmente dependem de quem está escrevendo. Portanto, pegue seu artigo, minha resposta e todas as outras respostas aqui com um monte de sal.

Eu pessoalmente contestaria a existência de uma linguagem de programação "normal", como você diz na sua pergunta. No entanto, acho que o conceito que você está tentando transmitir corresponde aproximadamente às linguagens de programação do sistema de Ousterhout.


2

Todas as linguagens de script também são linguagens de programação. O inverso não é verdadeiro. Os idiomas que "exigem apenas o intérprete" são idiomas interpretados (em oposição a uma linguagem compilada - observe que algumas linguagens, como Java, se enquadram nas duas categorias).

Uma linguagem categorizada como linguagem de script implica que é útil como linguagem de "cola". Os scripts não tendem a ser programas completos, mas preenchem as lacunas entre outras partes do software.

Os scripts geralmente são usados ​​para conectar vários programas, executar tarefas domésticas com muita rapidez / facilidade ou mesmo em um ambiente incorporado, onde as preocupações de desempenho e segurança foram abstraídas para um idioma de nível inferior. A ênfase das linguagens de script tende a ser a redução do tempo de desenvolvimento, portanto, a razão pela qual a maioria é interpretada e com um nível muito alto.


Você não indica diferenças conceituais, apenas a opinião popular sobre os respectivos casos de uso.
Raphael

1

O conjunto 'linguagens de script' é um subconjunto do conjunto 'linguagens de programação'. A diferença entre C e Perl é a diferença entre a linguagem de programação do sistema e a linguagem de aplicativos e entre a linguagem interpretada e a linguagem compilada.

As linguagens de programação do sistema são de baixo nível e orientadas ao gerenciamento de memória, IO previsível e assim por diante. As linguagens de aplicativos são orientadas para a resolução rápida de problemas de nível superior, como 'configuração de leitura de arquivo, soquete aberto e solicitações de processo de acordo com as configurações'.

Assim, as linguagens de aplicação tendem a ser de nível muito mais alto e, em seguida, as linguagens de sistema, ou seja, fornecem grande quantidade de recursos auxiliares de abstração e auxiliar e geralmente adicionam algum tipo de gerenciamento automático de memória.

Programas em linguagens compiladas são processados ​​para algum código completamente antes da execução do programa. As linguagens de script são traduzidas dinamicamente no processo de execução e geralmente incluem recursos para geração dinâmica de código e incluem arquivos com código-fonte.

Assim, todas as linguagens de script são linguagens de aplicativo, mas o oposto não é verdadeiro. As linguagens do sistema são sempre linguagens compiladas, pois as linguagens de script geralmente incluem recursos que não são pragmáticos para implementar em termos da própria linguagem. Observe, no entanto, que a diferença de script (interpretado) / compilada é mais sobre implementação: para algumas linguagens, os dois tipos de implementação podem existir, como para o haskell.


Eu acho que é uma falácia desenhar essa dicotomia interpretada / compilada. Também não acho que seja uma relação de subconjunto, embora certamente os conjuntos tenham alguma interseção não vazia. Da mesma forma, os níveis alto e baixo não sabem descrever com precisão a distinção. O prólogo é de nível muito alto, mas não é uma linguagem de script da maneira como é o script bash ou java.
jmite

1

Outros abordaram atributos que tendem a ser associados a linguagens de script e a linguagens que não são de script. Isso é útil para entender o que as pessoas querem dizer quando usam o termo "linguagem de script", mas acho que é mais importante entender que simplesmente não existe um limite bem definido: duas pessoas conhecedoras podem discordar sobre se um determinado idioma X é um linguagem de script. O termo "linguagem de script", no entanto, tem utilidade, pois existe um amplo acordo sobre idiomas que estão dentro ou fora da fronteira.

Compare "carro da família" x "carro esportivo" ou "revista" x "jornal". Ouso dizer que seria difícil criar uma regra 100% confiável para diferenciar todos os carros da família e todos os carros esportivos generalizáveis ​​(o que significa que não significa basicamente enumerar todos os carros existentes em cada categoria) e pelo menos potencialmente objetivo ( o que significa que seria aceitável para todos). Mas esses termos ainda são úteis na prática, porque, embora existam casos difíceis de decidir, muitos carros estão claramente em uma categoria e não na outra.


0

Uma diferença que ainda não vi mencionada é que, quando usado como pretendido, o tempo de execução da maioria dos scripts será dominado por operações "macroscópicas", e o desempenho das operações microscópicas não terá um efeito significativo no tempo geral de execução. Por exemplo, se um programa de animação de rastreamento de raios incluir uma linguagem de script com uma declaração "renderizar imagem", um script para produzir 240 quadros de animação poderá passar quatro horas na declaração "renderizar imagem" e um total de quatro segundos fazendo todo o resto. Mesmo se você acelerasse tudo fora do mecanismo de renderização em um fator de um milhão, isso teria menos efeito no desempenho geral do que acelerar o mecanismo de renderização em 0,1%.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.