Quando uma linguagem é considerada uma linguagem de script? [fechadas]

107

O que torna uma linguagem uma linguagem de script? Já ouvi algumas pessoas dizerem "quando for interpretado em vez de compilado". Isso tornaria o PHP (por exemplo) uma linguagem de script. Esse é o único critério? Ou existem outros critérios?

Veja também:

Shog9
fonte
Você pode querer expandir um pouco a sua pergunta. Eu sinto que isso é quase um tolo, caso contrário. Outros podem não ver a diferença
Kent Fredric,
Um tolo para qual outra pergunta?
Sietse
2
stackoverflow.com/questions/98268/… Há muita semelhança. Não necessariamente idênticos, mas com muito contexto / opinião compartilhada.
Kent Fredric
7
... Quando uma linguagem quebra a API e muda sua sintaxe a cada versão secundária, quando é um empacotador de cerca de 100 bibliotecas C sujas e sem manutenção, então é uma linguagem de script. ;)
ivan_ivanovich_ivanoff
1
Na barra lateral "Relacionado" você encontrará stackoverflow.com/questions/1514206/… ao qual vinculei uma pilha de duplicatas existentes voltando para stackoverflow.com/questions/101055/… .
dmckee --- ex-moderador gatinho de

Respostas:

52

Uma linguagem de script é uma linguagem que faz o "script" de outras coisas para fazer. O foco principal não é principalmente construir seus próprios aplicativos, mas fazer com que um aplicativo existente funcione da maneira que você deseja, por exemplo, JavaScript para navegadores, VBA para MS Office.

moffdub
fonte
E quanto a linguagens como Python? Não é fácil dizer onde está o foco, mas pode-se dizer que está se concentrando mais em seus próprios aplicativos; ainda assim, é frequentemente chamada de "linguagem de script". Talvez porque a compilação oculta em bytecode da referência CPython impl. não levanta erros de compilação relacionados à "segurança de tipo" Talvez a resposta de Oded tenha estes ...
n611x007
Bytecode e sistemas de tipo realmente não têm nada a ver com isso. Pela definição acima, se um aplicativo expõe uma API para Python, diz-se que usa Python como sua linguagem de script. Se você construir um aplicativo inteiramente em Python, esse aplicativo o usará como uma linguagem de programação.
bug
"Script" não é a definição de um tipo de linguagem. É uma característica que as línguas podem ter . Portanto, Python é uma "boa linguagem de script" porque torna mais fácil escrever código que cria scripts. Assembly não é uma boa linguagem de script porque torna difícil o script. C está em algum lugar no meio, porque embora tenha uma palavra-chave (sistema) para chamar, também sobrecarrega o usuário com muito lixo antes que você possa chegar lá.
nomen
93

Simples. Quando eu uso, é uma linguagem dinâmica moderna, quando você usa, é apenas uma linguagem de script!

Martin Beckett
fonte
19
Sim. "Não é uma 'linguagem de brinquedo', é uma 'linguagem de alto nível'": P
Roberto Bonvallet
6
isso foi complicado e fora do assunto, -1
adf88
1
Mesmo com - (1 + 1), ele obtém cerca de 2x + 1s do que um marcado. : D
anatoly techtonik
Melhor. Responda. EVAR!
iconoclasta
41

Tradicionalmente, ao falar sobre a diferença entre scripts e programação, os scripts são interpretados e os programas compilados. Uma linguagem pode ser executada de diferentes maneiras - interpretada ou compilada (para bytecode ou código de máquina). Isso não faz uma linguagem um ou outro.

Em alguns olhos, a maneira como você usa uma linguagem a torna uma linguagem de script (por exemplo, os desenvolvedores de jogos que desenvolvem principalmente em C ++ irão criar scripts dos objetos em Lua). Novamente, as linhas estão borradas - uma linguagem pode ser usada para uma programação por uma pessoa e a mesma linguagem pode ser usada para uma linguagem de script por outra.

Isto é do artigo da Wikipedia sobre linguagens de script:

Uma linguagem de script, linguagem de script ou linguagem de extensão é uma linguagem de programação que permite o controle de um ou mais aplicativos de software. "Scripts" são distintos do código central do aplicativo, já que geralmente são escritos em uma linguagem diferente e geralmente são criados ou pelo menos modificados pelo usuário final. Os scripts são frequentemente interpretados a partir do código-fonte ou bytecode, enquanto os aplicativos que eles controlam são tradicionalmente compilados para o código de máquina nativo. As linguagens de script são quase sempre incorporadas aos aplicativos que controlam.

Você notará o uso de "normalmente", "frequentemente", "tradicionalmente" e "quase sempre" - todos eles indicam que não há um conjunto de atributos distintos que tornem uma linguagem específica uma "linguagem de script".

Oded
fonte
1
@Amr: Bem, é chamado de java script
sepp2k de
1
@Ram Bhat - é confuso, pois a distinção é artificial.
Oded de
11
@Andrey: Todas as implementações de JavaScript modernas são compiladas. E há intérpretes para C.
Jörg W Mittag
27
Isso é simplesmente errado. Bem, na verdade não está nem errado , simplesmente não faz sentido. Não existe linguagem compilada ou interpretada. Uma linguagem não é compilada, uma linguagem simplesmente é . É um monte de regras matemáticas abstratas. Interpretação e compilação são características de um mecanismo de execução , não de uma linguagem. Cada linguagem pode ser implementada com um compilador ou um interpretador. Na verdade, todas as linguagens que foram citadas como "interpretadas" nesta página, quase exclusivamente compilaram implementações, por exemplo JavaScript, PHP, Python, Ruby.
Jörg W Mittag
5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera) compilam JavaScript para bytecode e, em seguida, parte do bytecode é interpretado e alguns compilados para código nativo. O V8 (Chrome) ignora o bytecode e compila o JavaScript direto para o código nativo. IronJS compila JavaScript para bytecode CIL. Rhino compila JavaScript para bytecode JVML. BESEN (o único mecanismo ECMAScript 5 até agora) compila JavaScript para bytecode BESEN e um compilador nativo está sendo adicionado. Algumas das opções acima também compilam expressões regulares para código de máquina nativo.
Jörg W Mittag
31

"Um roteiro é o que você dá aos atores. Um programa é o que você dá ao público." - Larry Wall

Eu realmente não acho que haja mais muita diferença. As chamadas linguagens de "script" são frequentemente compiladas - muito rapidamente e em tempo de execução. E algumas das linguagens de "programação" são posteriormente compiladas em tempo de execução também (pense em JIT) e o primeiro estágio da "compilação" é a verificação de sintaxe e a resolução de recursos.

Não fique preso a isso, não é realmente importante.

Clinton Pierce
fonte
hmmm .. Eu não estou preso, mas a maioria dos entrevistadores e professores estão. E eu nunca tive nenhuma dessas pessoas me dando uma resposta satisfatória!
Laz
1
E se você deu uma das outras respostas aqui, como um entrevistador, eu acho que você realmente não tem um controle sobre a questão. A distinção é realmente embaçada e não há uma resposta clara. Se você tivesse dito "Bem, tradicionalmente ...", eu aceitaria, mas espero que você discuta coisas como compilação em tempo de execução e JIT'ing também.
Clinton Pierce
25

Minha definição seria uma linguagem normalmente distribuída como fonte em vez de binária.

Kenny
fonte
5
Então você acha que php, python, etc são linguagens de script?
Sietse
"Scripting" é uma descrição comum para Python e PHP.
S.Lott
22
php e python - é claro que são linguagens de script!
Antony Carthy
esta é a minha definição desde o início
@Antony Carthy, isso está errado. Python geralmente não é uma linguagem de script, mas pode ser, como qualquer outra linguagem, usada em um programa (como Word (VB), Navegador (JS))
Joschua
16

Existem muitas respostas possíveis para isso.

Primeiro: não é realmente uma questão de diferença entre uma linguagem de script e uma linguagem de programação, porque uma linguagem de script é uma linguagem de programação. É mais uma questão de quais características tornam uma linguagem de programação uma linguagem de script, enquanto outra linguagem de programação não é uma linguagem de script.

Segundo: é realmente difícil dizer o que é uma linguagem XYZ, se XYZ é "script", "programação funcional", "programação orientada a objetos" ou o que quer que seja. A definição do que é "programação funcional" é bastante clara, mas ninguém sabe o que é uma "linguagem de programação funcional".

A programação funcional ou a programação orientada a objetos são estilos de programação ; você pode escrever em um estilo funcional ou orientado a objetos em praticamente qualquer linguagem. Por exemplo, o Linux Virtual File System Switch e o Linux Driver Model são altamente orientados a objetos, embora escritos em C, enquanto muitos códigos Java ou C # que você vê na web são muito procedurais e não orientados a objetos . OTOH, eu vi alguns códigos Java altamente funcionais.

Portanto, se a programação funcional e a programação orientada a objetos são meramente estilos que podem ser feitos em qualquer linguagem, então como definir uma "linguagem de programação orientada a objetos"? Você poderia dizer que uma linguagem de programação orientada a objetos é uma linguagem que permite a programação orientada a objetos. Mas isso não é exatamente uma definição: todas as linguagens permitem a programação orientada a objetos, portanto, todas as linguagens são orientadas a objetos? Então, você diz, bem, uma linguagem é orientada a objetos, se ela o força a programar em um estilo orientado a objetos. Mas isso também não é uma definição: todas as linguagens permitem programação funcional, portanto, nenhuma linguagem é orientada a objetos?

Então, para mim, encontrei a seguinte definição:

Uma linguagem é uma linguagem de script (linguagem orientada a objetos / linguagem funcional) se ambas

  • facilita o scripting (programação orientada a objetos / programação funcional), ou seja, não só permite , mas torna-o fácil e natural e contém recursos que ajudam com isso, E
  • incentiva e orienta você na direção de scripts (programação orientada a objetos / programação funcional).

Assim, após cinco parágrafos, cheguei a: "uma linguagem de script é uma linguagem de script". Que definição ótima. NÃO.

Obviamente, agora precisamos examinar a definição de "script".

É aqui que entra o terceiro problema: enquanto o termo "programação funcional" é bem definido e é apenas o termo "linguagem de programação funcional" que é problemático, infelizmente com o script, tanto o termo "script" quanto o termo "linguagem de script "estão mal definidos.

Bem, em primeiro lugar, o script é programação. É apenas um tipo especial de programação. IOW: todo script é um programa, mas nem todo programa é um script; o conjunto de todos os scripts é um subconjunto adequado do conjunto de todos os programas.

Na minha opinião pessoal, o que torna o script de script e o distingue de outros tipos de programação é que ...

Os scripts manipulam amplamente objetos que

  • não foram criados pelo script,
  • ter uma vida útil independente do script e
  • vivem fora do domínio do script.

Além disso, os tipos de dados e algoritmos usados ​​geralmente não são definidos pelo script, mas pelo ambiente externo.

Pense em um script de shell: scripts de shell geralmente manipulam arquivos, diretórios e processos. A maioria dos arquivos, diretórios e processos em seu sistema provavelmente não foi criada pelo script atualmente em execução. E eles não desaparecem quando o script termina: sua vida útil é completamente independente do script. E eles não são realmente parte do script, eles são parte do sistema. Você não começou seu script escrevendo Filee Directoryclasses, esses tipos de dados não são da sua conta: você apenas assume que eles estão lá, e você nem mesmo sabe (nem precisa saber) como eles funcionam. E você não implementa seus próprios algoritmos, por exemplo, para a travessia de diretório, você apenas usa em findvez de implementar sua própria busca em largura.

Resumindo: um script se liga a um sistema maior que existe independentemente do script, manipula uma pequena parte do sistema e então sai.

Esse sistema maior pode ser o sistema operacional no caso de um shell script, o DOM do navegador no caso de um script de navegador, um jogo (por exemplo, World of Warcraft com Lua ou Second Life com a Linden Scripting Language), um aplicativo (por exemplo, o AutoLisp idioma para macros AutoCAD ou Excel / Word / Office), um servidor web, um pacote de robôs ou algo totalmente diferente.

Observe que o aspecto de script é completamente ortogonal a todos os outros aspectos das linguagens de programação: uma linguagem de script pode ser fortemente ou fracamente tipada, estrita ou fracamente tipada, estática ou dinamicamente tipada, nominalmente, estruturalmente ou tipo duck, diabos ela pode até ser não tipada . Pode ser imperativo ou funcional, orientado a objetos, procedimental ou funcional, estrito ou preguiçoso. Suas implementações podem ser interpretadas, compiladas ou combinadas.

Por exemplo, Mondrian é uma linguagem de script funcional preguiçosa estritamente fortemente tipada estaticamente com uma implementação compilada.

No entanto, tudo isso é discutível, porque a forma como o termo linguagem de script é realmente usado no mundo real, não tem nada a ver com nenhum dos itens acima. Na maioria das vezes é usado simplesmente como um insulto, e a definição é bastante simples, até mesmo simplista:

  • linguagem de programação real : minha linguagem de programação
  • linguagem de script: sua linguagem de programação

Esta parece ser a forma como o termo é usado com mais frequência.

Jörg W Mittag
fonte
Algumas dessas respostas são bobas. Uma linguagem é "orientada a objetos" quando é orientada à programação com objetos. Uma linguagem é "funcional" se tiver funções de primeira classe. Isso não significa que um idioma não pode ser ambos. Essas são características de linguagens, não definições de tipos. O script é semelhante. Uma linguagem é uma "boa linguagem de script" se torna mais fácil escrever scripts - partes curtas e simples de interação usuário-aplicativo.
nomen
16

É como pornografia, você sabe quando vê. A única definição possível de uma linguagem de script é:

A language which is described as a scripting language.

Um pouco circular, não é? (Aliás, não estou brincando).

Basicamente, não há nada que torne uma linguagem uma linguagem de script, exceto que ela é chamada assim, especialmente por seus criadores. O principal conjunto de linguagens de script modernas é PHP, Perl, JavaScript, Python, Ruby e Lua. Tcl é a primeira grande linguagem de script moderna (não foi a primeira linguagem de script, eu esqueci o que é, mas fiquei surpreso ao saber que era anterior ao Tcl).

Eu descrevo recursos das principais linguagens de script em meu artigo :

 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

A maioria é digitada e interpretada dinamicamente e a maioria não tem semântica definida fora de sua implementação de referência. No entanto, mesmo que sua implementação principal seja compilada ou JITed, isso não muda a "natureza" da linguagem.

A única questão restante é como você pode saber se uma nova linguagem é uma linguagem de script. Bem, se é chamado de linguagem de script, é um. Portanto, Factor é uma linguagem de script (ou pelo menos era quando foi escrita), mas, digamos, Java não é.

Paul Biggar
fonte
1
É uma explicação muito boa, mas tenho certeza de que algumas pessoas
votam a favor
O link para o papel está quebrado.
Quazi Irfan
5

"Linguagem de script" é um daqueles conceitos confusos que podem significar muitas coisas. Normalmente, refere-se ao fato de que existe um processo de uma etapa que leva você do código-fonte à execução.

Por exemplo, em Perl você faz: perl my_source.pl

Dados os critérios acima, o PHP é uma linguagem de script (embora você possa ter um processo de "compilação", por exemplo, ao usar o Zend Encoder para "proteger" o código-fonte).

PS. Freqüentemente (mas nem sempre) as linguagens de script são interpretadas. Muitas vezes (mas nem sempre) as linguagens de script são digitadas dinamicamente.

Cd-MaN
fonte
Perl compila em código de bytes antes de ser executado.
Brad Gilbert
2
E quanto ao Java? Você precisa de um jvm para executar um programa java, mas eu não o chamaria de linguagem de script
Eineki
5

Todas as linguagens de script são linguagens de programação. Então, estritamente falando, não há diferença.

O termo não se refere a nenhuma propriedade fundamental da linguagem, ele se refere ao uso típico da linguagem. Se o uso típico é escrever programas curtos que fazem principalmente chamadas para código pré-existente e algum processamento simples nos resultados (isto é, se o uso típico é escrever scripts ), então é uma linguagem de script.

Joren
fonte
4

Acho que o Sr. Roberto Ierusalimschy tem uma resposta muito boa ou a pergunta em 'Programação na Lua':

No entanto, a característica distintiva das linguagens interpretadas não é que elas não sejam compiladas, mas que qualquer compilador faz parte do tempo de execução da linguagem e que, portanto, é possível (e fácil) executar o código gerado em tempo real

Rodrigo Lopez
fonte
Isso não responde à pergunta de forma alguma!
Paul Biggar de
Deixe-me reafirmar que, uma linguagem de script é aquela em que o compilador está incluído e é possível executar o código gerado em tempo real. Como isso não responde à pergunta?
Rodrigo Lopez
Essa é uma linguagem interpretada. Se você está tentando dizer que qualquer linguagem interpretada é uma linguagem de script, diga isso.
Paul Biggar de
Bem, todas as linguagens podem ser usadas para scripts, o item principal para mim é o quão adequadas são. Para mim, o diferencial é que, sim, eles são interpretados.
Rodrigo Lopez
4
Common Lisp não é o que normalmente considero uma linguagem de script, mas tem uma evalfunção de força total .
David Thornley
4

Uma divisão é

  • script = interpretado dinamicamente
  • normal = compilado

Uma linguagem interpretada dinamicamente é interpretada em tempo de execução, enquanto uma linguagem compilada é compilada antes da execução.

Devo acrescentar que, como Jörg apontou, a distinção interpretado / compilado não é uma característica da linguagem, mas do mecanismo de execução.

Você também pode estar interessado nesta explicação do sistema de tipos , que está relacionado e se concentra mais no aspecto da linguagem, em vez do mecanismo de execução. A maioria das linguagens de script são digitadas dinamicamente, enquanto as linguagens "normais" são geralmente digitadas estaticamente.

Em geral, a divisão de linguagens tipadas estaticamente vs dinamicamente é melhor definida e tem mais implicações na usabilidade da linguagem.

Timo Westkämper
fonte
E quanto ao Objective-C?
mouviciel de
1
Ele suporta tipagem dinâmica, mas eu não a chamaria de linguagem de script.
Timo Westkämper
2
Isso é simplesmente errado. Bem, na verdade não está nem errado , simplesmente não faz sentido. Não existe linguagem compilada ou interpretada. Uma linguagem não é compilada, uma linguagem simplesmente é . É um monte de regras matemáticas abstratas. Interpretação e compilação são características de um mecanismo de execução , não de uma linguagem. Cada linguagem pode ser implementada com um compilador ou um interpretador. Na verdade, todas as linguagens que foram citadas como "interpretadas" nesta página, quase exclusivamente compilaram implementações, por exemplo JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@ jorg-w-mittag, sinta-se à vontade para editar minha resposta para torná-la mais correta. Seus pontos são válidos. Normalmente, se você fala sobre uma linguagem, também fala sobre o mecanismo de execução padrão.
Timo Westkämper
3

Uma linguagem de script é normalmente :

  1. Digitado dinamicamente
  2. Interpretado, com muito pouca ênfase no desempenho, mas boa portabilidade
  3. Requer muito menos código clichê , levando a uma prototipagem muito rápida
  4. É usado para pequenas tarefas, adequado para escrever um único arquivo para executar algum "script" útil.

Enquanto uma linguagem sem script é geralmente : 1. Estaticamente tipada 2. Compilada, com ênfase no desempenho 3. Requer mais código clichê, levando a prototipagem mais lenta, mas mais legibilidade e manutenção de longo prazo 4. Usada para grandes projetos, adapta-se a muitos Padrões de design

Mas é mais uma diferença histórica hoje em dia, na minha opinião. Javascript e Perl foram escritos com scripts pequenos e simples em mente, enquanto C ++ foi escrito com aplicativos complexos em mente; mas ambos podem ser usados ​​de qualquer maneira. E muitas linguagens de programação, modernas e antigas, confundem a linha de qualquer maneira (e era confusa em primeiro lugar!).

O triste é que conheço alguns desenvolvedores que detestam o que entendem como "linguagens de script", pensando que são mais simples e menos poderosas. Minha opinião é aquele velho clichê - use a ferramenta certa para o trabalho.

Oak
fonte
2
Não existe linguagem compilada ou interpretada. Uma linguagem não é compilada, uma linguagem simplesmente é . É um monte de regras matemáticas abstratas. Interpretação e compilação são características de um mecanismo de execução , não de uma linguagem. Cada linguagem pode ser implementada com um compilador ou um interpretador. Na verdade, todas as linguagens que foram citadas como "interpretadas" nesta página, quase exclusivamente compilaram implementações, por exemplo JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@Jorg: Bom ponto, eu concordo. Mas eu não disse que não pode ser compilado, apenas disse que esses tipos de linguagens são normalmente interpretados em vez de compilados, de uso comum.
Oak
São eles? Todas as implementações atuais de Python, PHP, Perl e Lua são compiladas. Com exceção de MRI, todas as implementações atuais de Ruby são compiladas. (E não são , na verdade, não um, mas dois compiladores JIT para MRI.) Com exceção do JScript, todas as implementações JavaScript atuais são compilados. Observe que o sucessor do JScript, Chakra, é compilado. Muitas implementações de Scheme são compiladas. ELisp é compilado.
Jörg W Mittag
3

As linguagens de script foram originalmente pensadas como mecanismos de controle para aplicativos escritos em uma linguagem de programação rígida. Os programas compilados não podiam ser modificados em tempo de execução, portanto, os scripts proporcionavam flexibilidade às pessoas.

Mais notavelmente, o script de shell estava automatizando processos no kernel do sistema operacional (tradicionalmente, AppleScript em Macs); um papel que cada vez mais passou para as mãos de Perl, e depois para Python recentemente. Eu vi Scheme (particularmente em sua implementação Guile) usado para declarar cenas de raytracing; e recentemente, Lua é muito popular como a linguagem de programação para criar scripts de jogos - a tal ponto que a única coisa codificada em muitos jogos novos é o motor gráfico / físico, enquanto toda a lógica do jogo é codificada em Lua. Da mesma forma, o JavaScript foi pensado para fazer o script do comportamento de um navegador da web.

As linguagens emancipadas; ninguém agora pensa no SO como um aplicativo (ou pensa muito nele), e muitas linguagens de script anteriores começaram a ser usadas para escrever seus próprios aplicativos completos. O próprio nome perdeu o sentido e se espalhou para muitos idiomas interpretados em uso hoje, independentemente de serem ou não projetados para serem interpretados de dentro de outro sistema.

No entanto, "linguagens de script" definitivamente não é sinônimo de "linguagens interpretadas" - por exemplo, BASIC foi interpretado durante a maior parte de sua vida (ou seja, antes de perder sua acronimicidade e se tornar Visual Basic), mas ninguém realmente pensa nisso como scripts.

ATUALIZAÇÃO: Material de leitura normalmente disponível na Wikipedia .

Amadan
fonte
Na verdade, a implementação BASIC original era um compilador. Só mais tarde os clones BASIC foram escritos como intérpretes, porque os intérpretes são supostamente mais fáceis de escrever do que os compiladores.
Jörg W Mittag de
1
@ Jörg: Não é bem assim. Enquanto as primeiras implementações de teste do Dartmouth BASIC foram compiladas (chamadas Card BASIC), as implementações reais eram interpretadas. Na verdade, provavelmente o novo recurso mais importante do BASIC é que ele é interativo. Não há necessidade de inserir o código-fonte em cartões e alimentá-los para o compilador. O usuário poderia simplesmente sentar-se ao teletipo, escrever o programa e então executá-lo.
PauliL de
É interessante que esta resposta introduza a ideia de uma linguagem 'dura'. 'Difícil' precisa de uma definição neste contexto?
DA Vincent
@DavidVincent: Eu provavelmente deveria ter querido dizer "mais forte". Nenhuma definição formal é necessária, o entendimento intuitivo deve ser suficiente: é muito mais difícil escrever um programa em Assembly ou C do que em Ruby ou Python, visto que os primeiros são muito mais detalhados e de baixo nível do que os segundos.
Amadan
3

Primeiro ponto, uma linguagem de programação não é uma "linguagem de script" ou outra coisa. Pode ser uma "linguagem de script" e outra coisa.

Segundo ponto, o implementador da linguagem dirá se é uma linguagem de script.

Sua pergunta deve ser "Em quais implementações uma linguagem de programação seria considerada uma linguagem de script?", E não "Qual é a diferença entre uma linguagem de script e uma linguagem de programação?". Não há meio-termo.

Ainda assim, considerarei uma linguagem uma linguagem de script se for usada para fornecer algum tipo de middle ware. Por exemplo, eu consideraria a maioria das implementações de JavaScript uma linguagem de script. Se o JavaScript fosse executado no sistema operacional, não no navegador, não seria uma linguagem de script. Se o PHP é executado dentro do Apache, é uma linguagem de script. Se for executado a partir da linha de comando, não é.

Marcus Adams
fonte
3

Eu vejo uma linguagem de script como qualquer coisa que não requer uma etapa de 'compilação' com uma sensação de peso aberto. A principal característica do ponto de vista do programador é: você edita o código e o executa imediatamente.

Portanto, eu consideraria JavaScript e PHP como linguagens de script, enquanto o ActionScript 3 / Flex não é realmente.

Peter Mortensen
fonte
Não quero denegrir a resposta de Pedro, mas podemos acrescentar mais do que opinião?
DA Vincent
3

Meu amigo e eu acabamos de ter este argumento: Qual é a diferença entre uma linguagem de programação e uma linguagem de script.

Um argumento popular é que as linguagens de programação são compiladas e as linguagens de script são interpretadas - no entanto, acredito que esse argumento seja completamente falso ... por quê?

  1. Chakra e V8 (motores JavaScript da Microsoft e Google) compilam código antes da execução
  2. QBasic é interpretado - isso torna o Qbasic uma linguagem de "script"?

Com base nisso, este é meu argumento para a diferença entre uma linguagem de programação e uma linguagem de script:

Uma linguagem de programação é executada no nível da máquina e tem acesso à própria máquina (memória, gráficos, som etc).

Uma linguagem de script é uma caixa de areia e só tem acesso a objetos expostos na caixa de areia. Ele não tem acesso direto à máquina subjacente.

Matthew Layton
fonte
2

Em minha opinião, eu diria que linguagens interpretadas dinamicamente como PHP, Ruby, etc ... ainda são línguas "normais". Eu diria que exemplos de linguagens de "script" são coisas como bash (ou ksh ou tcsh ou qualquer outra coisa) ou sqlplus. Essas linguagens são frequentemente usadas para agrupar programas existentes em um sistema em uma série de comandos coerentes e relacionados, como:

  1. copie A.txt para / tmp / work /
  2. execute o processo de limpeza noturna no servidor de banco de dados
  3. registrar os resultados e enviá-los para o sysdamin

Então, eu diria que a diferença (para mim, pelo menos) está mais em como você usa a linguagem. Linguagens como PHP, Perl, Ruby podem ser usadas como "linguagens de script", mas geralmente as vejo usadas como "linguagens normais" (exceto Perl que parece funcionar nos dois sentidos.

FrustratedWithFormsDesigner
fonte
Obrigado .. Isso torna as coisas um pouco mais claras. Então, para recapitular, as linguagens de script são projetadas para usar programas já existentes juntos em uma sequência. MAS linguagens como C podem ser usadas para fazer o mesmo por meio de APIs. Então, tecnicamente falando, tudo depende do uso
Laz
Não, você está apenas fazendo uma distinção artificial (que é o que é). Se você puder preparar algo rapidamente com ela, uma linguagem geralmente será chamada de linguagem de script, mas essa não é uma definição estrita nem nada. As linguagens comumente interpretadas também são chamadas de linguagens de script.
wlangstroth de
@Will: qualquer distinção seria artificial. Esta foi a minha distinção opinativa. ;)
FrustratedWithFormsDesigner
sim, mas "script" neste caso é um uso altamente coloquial e vago. Decidir que é "usar programas já existentes juntos em uma sequência" é muito específico e não muito correto. Isso soa como um script de shell , talvez, mas não Perl. Então, para contrastar isso com APIs (?) ... Eu só não queria que o cara se desviasse muito.
wlangstroth
2

Vou apenas migrar minha resposta da pergunta duplicada


O nome "Linguagem de script" se aplica a uma função muito específica: a linguagem que você escreve comandos para enviar a um aplicativo de software existente. (como um "script" de TV ou filme tradicional)

Por exemplo, era uma vez, páginas da web em HTML eram chatas. Eles estavam sempre estáticos. Então, um dia, a Netscape pensou: "Ei, e se deixarmos o navegador ler e agir em pequenos comandos na página?" E assim, o Javascript foi formado.

Um comando javascript simples é o alert()comando, que instrui / comanda o navegador (um aplicativo de software) que está lendo a página da web para exibir um alerta.

Agora, está alert()relacionado, de alguma forma, ao C ++ ou a qualquer linguagem de código que o navegador realmente usa para exibir o alerta? Claro que não. Alguém que escreve "alert ()" em uma página .html não entende como o navegador realmente exibe o alerta. Ele está apenas escrevendo um comando que o navegador interpretará.

Vamos ver o código javascript simples

<script>
var x = 4
alert(x)
</script>

Estas são instruções que são enviadas ao navegador, para o navegador interpretar por si mesmo. A linguagem de programação que o navegador usa para realmente definir uma variável para 4 e colocar isso em um alerta ... não está totalmente relacionada ao javascript.

Chamamos essa última série de comandos de "script" (que é o motivo pelo qual está entre <script>tags). Apenas pela definição de “script”, no sentido tradicional: Uma série de instruções e comandos enviados aos atores . Todo mundo sabe que um roteiro (um roteiro de filme), por exemplo, é um roteiro.

O roteiro (roteiro) não são os atores, nem a câmera, nem os efeitos especiais. O roteiro apenas diz a eles o que fazer.

Agora, o que é uma linguagem de script , exatamente?

Existem muitas linguagens de programação que são como ferramentas diferentes em uma caixa de ferramentas; alguns idiomas foram projetados especificamente para serem usados ​​como scripts.

Javasript é um exemplo óbvio; existem muito poucos aplicativos de Javascript que não se enquadram no domínio dos scripts.

ActionScript (a linguagem para animações em Flash) e seus derivados são linguagens de script, pois simplesmente emitem comandos para o reprodutor / interpretador Flash. Claro, existem abstrações, como a programação orientada a objetos, mas tudo isso é simplesmente um meio para o fim: enviar comandos para o flash player.

Python e Ruby também são comumente usados ​​como linguagens de script. Por exemplo, uma vez trabalhei para uma empresa que usava Ruby para fazer scripts de comandos para enviar para um navegador que eram do tipo "vá para este site, clique neste link ..." para fazer alguns testes automatizados básicos. Eu não era um "Desenvolvedor de Software" de forma alguma, naquele trabalho. Acabei de escrever scripts que enviam comandos ao computador para enviar comandos ao navegador.

Por causa de sua natureza, as linguagens de script raramente são 'compiladas' - isto é, traduzidas em código de máquina e lidas diretamente pelo computador.

Mesmo os aplicativos GUI criados em Python e Ruby são scripts enviados a uma API escrita em C ++ ou C. Diz ao aplicativo C o que fazer.

Existe uma linha de imprecisão, é claro. Por que você não pode dizer que Linguagem de máquina / C são linguagens de script, porque são scripts que o computador usa para fazer interface com a placa-mãe / placas gráficas / chips básicos?

Existem algumas linhas que podemos traçar para esclarecer:

  1. Quando você pode escrever uma linguagem de script e executá-la sem "compilar", é mais um tipo de coisa de script direto. Por exemplo, você não precisa fazer nada com um roteiro para dizer aos atores o que fazer com ele. Já está lá, usado, como está. Por esse motivo, excluiremos as linguagens compiladas de serem chamadas de linguagens de script, embora possam ser usadas para fins de script em algumas ocasiões.

  2. Linguagem de script implica comandos enviados a um aplicativo de software complexo ; essa é a razão pela qual escrevemos scripts em primeiro lugar - então você não precisa saber as complexidades de como o software funciona para enviar comandos para ele. Portanto, as linguagens de script tendem a ser linguagens que enviam comandos (relativamente) simples para aplicativos de software complexos ... neste caso, a linguagem de máquina e o código assembly não são suficientes.

Justin L.
fonte
2

Posso sugerir que linguagens de script é um termo do qual muitas pessoas estão se afastando. Eu diria que tudo se resume a linguagens compiladas e linguagens dinâmicas hoje em dia.

Quer dizer, você não pode realmente dizer algo como Python, ou Ruby são linguagens de "script" nos dias de hoje (você ainda tem coisas como IronPython e JIT-your-favorite-language , a diferença foi borrada ainda mais).

Para ser honesto, pessoalmente, não acho que o PHP seja mais uma linguagem de script. Eu não esperaria que as pessoas gostassem de categorizar o PHP de forma diferente de dizer Java em seus currículos.

Robert Gould
fonte
Mesmo que eu trabalhe muito com php, eu diria que até que ele passe de ser baseado em script para ter um modelo de servlet / real / fcgi despachando tarefas delegadas do servidor, eu pessoalmente o chamaria de "uma linguagem de script bastante boa, que pode dar a ilusão de um aplicativo "
Kent Fredric
Estático / Dinâmico, existem linguagens dinâmicas que são compiladas.
Brad Gilbert
Eu repito: quero dizer, você não pode realmente dizer algo como Python, ou Ruby são linguagens de "script" nos dias de hoje (você ainda tem coisas como IronPython e JitYourFavoriteLanguage, a diferença foi borrada ainda mais).
Robert Gould
1

As linguagens de script tendem a ser executadas em um mecanismo de script que faz parte de um aplicativo maior. Por exemplo, o JavaScript é executado dentro do mecanismo de script do seu navegador.

Martin OConnor
fonte
Hilário que a resposta aceita tenha dois votos negativos.
Robert S.
1
Deve haver algum tipo de emblema para isso. Que tal "Não consigo lidar com a verdade."? Nah, um pouco prolixo. ;-)
Joseph Ferris
3
Perl, Python, Ruby, Tcl / Tk - para citar apenas quatro linguagens de script - não são construídos principalmente em um aplicativo maior.
Jonathan Leffler
3
Ergo - eles não são linguagens de script.
Milen A. Radev
3
Uh sim, seria bom se isso pudesse ser desmarcado como correto de alguma forma.
Noon Silk de
1

Uma linguagem de script é uma linguagem que é interpretada toda vez que o script é executado, isso implica ter um intérprete e a maioria é muito legível por humanos, para ser útil uma linguagem de script é fácil de aprender e usar.

Cada linguagem compilável pode ser transformada em uma linguagem de script e vice-versa, tudo depende da implementação de um interpretador ou compilador, por exemplo, C ++ tem um interpretador, então pode ser chamado de linguagem de script se usado (não é muito prático em geral como C ++ é uma linguagem muito complexa), uma das linguagens de script mais úteis no momento é o Python ...

Portanto, para responder à sua pergunta, a definição está no uso de um intérprete para executar programas de script rápidos e fáceis, para lidar com tarefas simples ou aplicativos de protótipo, o uso mais poderoso que se pode fazer das linguagens de script é incluir a possibilidade de cada uso para estender um aplicativo compilado.

Pânico
fonte
1

Prefiro que as pessoas não usem o termo "linguagem de script", pois acho que diminui o esforço. Pegue uma linguagem como Perl, frequentemente chamada de "linguagem de script".

  • Perl é uma linguagem de programação!
  • Perl é compilado como Java e C ++. Ele é compilado muito mais rápido!
  • Perl tem objetos, namespaces e closures.
  • Perl tem IDEs e depuradores e profilers.
  • Perl tem treinamento, suporte e comunidade.
  • Perl não é apenas web. Perl não é apenas administrador de sistemas. Perl não é apenas a fita adesiva da Internet.

Por que precisamos distinguir entre uma linguagem como Java que é compilada e Ruby que não é? Qual é o valor da rotulagem?

Para mais informações, consulte http://xoa.petdance.com/Stop_saying_script .

Andy Lester
fonte
Nenhum computador pode rodar perl ou ruby ​​(ou qualquer forma em que eles possam ser compilados) nativamente. Portanto, perl e ruby ​​são linguagens de script, interpretadas por um analisador ou VM.
anon6439
@psoul: sim. então é java.
Stefano Borini
Existem várias técnicas para compilar Ruby para código de máquina, embora eu não tenha certeza se alguma delas não apenas agrupa o interpretador com string representando código Ruby, mas mesmo se isso fosse verdade, um tradutor de Ruby para código de máquina pode ser feito. para o código de máquina não chegaria nem perto da velocidade c devido a todo o despacho dinâmico e gc, entre outras coisas. Eu não acho que haja qualquer processador Ruby, mas foram máquinas projetadas para se ajustar melhor ao modelo lisp e aos processadores que executam bytecode java.
Roman A. Taycher
1

Uma diferença importante é a tipagem forte (versus tipagem fraca ). As linguagens de script são frequentemente digitadas de maneira fraca , tornando possível escrever pequenos programas mais rapidamente. Para programas grandes, isso é uma desvantagem, pois inibe o compilador / interpretador de encontrar certos bugs de forma autônoma, tornando muito difícil refatorar o código.

Dimitri C.
fonte
1

Linguagens de script são linguagens de programação em que os programas são normalmente entregues aos usuários finais em uma forma textual legível e onde existe um programa que aparentemente pode executá-lo diretamente. (O programa pode muito bem compilar o script internamente; isso não é relevante aqui porque não é visível para o usuário.)

É relativamente comum que as linguagens de script sejam capazes de oferecer suporte a uma sessão interativa em que os usuários podem simplesmente digitar seu programa e executá-lo imediatamente. Isso ocorre porque esta é uma extensão trivial do requisito essencial do primeiro parágrafo; o principal requisito extra é a adição de um mecanismo para descobrir quando uma instrução digitada é concluída para que possa ser enviada para o mecanismo de execução.

Donal Fellows
fonte
1

Para uma visão ligeiramente diferente da questão. Uma linguagem de script é uma linguagem de programação, mas uma linguagem de programação não é necessariamente uma linguagem de script. Uma linguagem de script é usada para controlar ou criar um script de sistema. Esse sistema poderia ser um sistema operacional em que a linguagem de script seria o bash. O sistema pode ser um servidor web com PHP como linguagem de script. Linguagens de script são projetadas para preencher um nicho específico; são idiomas específicos de domínio. Os sistemas interativos têm linguagens de script interpretadas, dando origem à noção de que as linguagens de script são interpretadas; no entanto, isso é uma consequência do sistema e não da linguagem de script em si.

phreed
fonte
1

Uma linguagem de script é uma linguagem que configura ou estende um programa existente.
Uma linguagem de script é uma linguagem de programação.

Romain Hippeau
fonte
1

A definição de "linguagem de script" é bastante confusa. Eu basearia nas seguintes considerações:

  1. Linguagens de script geralmente não têm etapas de compilação visíveis ao usuário. Normalmente, o usuário pode apenas executar programas em um comando fácil.

  2. Os programas em linguagens de script são normalmente transmitidos na forma de origem.

  3. Linguagens de script normalmente têm tempos de execução que estão presentes em um grande número de sistemas, e os tempos de execução podem ser instalados facilmente na maioria dos sistemas.

  4. As linguagens de script tendem a ser multiplataforma e não específicas à máquina.

  5. As linguagens de script facilitam a chamada de outros programas e a interface com o sistema operacional.

  6. As linguagens de script são geralmente facilmente embutidas em sistemas maiores escritos em linguagens de programação mais convencionais.

  7. As linguagens de script são normalmente projetadas para facilitar a programação e com muito menos consideração pela velocidade de execução. (Se você quiser uma execução rápida, o conselho usual é codificar as partes demoradas em algo como C e incorporar a linguagem em C ou chamar os bits C da linguagem.)

Algumas das características que listei acima são verdadeiras para as implementações; nesse caso, estou me referindo às implementações mais comuns. Existem interpretadores C, com (AFAIK) nenhuma etapa de compilação óbvia, mas isso não é verdade para a maioria das implementações C. Você certamente poderia compilar um programa Perl para código nativo, mas não é assim que ele é normalmente usado. Algumas outras características são de natureza social. Alguns dos critérios acima se sobrepõem um pouco. Como eu disse, a definição é confusa.

David Thornley
fonte
0

Eu diria que a linguagem de script é aquela que manipula pesadamente as entidades que ela mesma não define. Por exemplo, JavaScript manipula objetos DOM fornecidos pelo navegador, PHP opera uma enorme biblioteca de funções baseadas em C e assim por diante. Claro que não é uma definição precisa, mais uma forma de pensar se ela.

Michael Pliskin
fonte
Mmm, PHP usa a biblioteca C subjacente, mas é o caso da maioria das linguagens, incluindo Java (no nível mais baixo). E não manipula essas funções ...
PhiLho
0

Se não funcionar ou não funcionar na CPU, é um script para mim. Se um intérprete precisa ser executado na CPU abaixo do programa, é um script e uma linguagem de script.

Não há razão para complicar mais do que isso?

Claro, na maioria (99%) dos casos, é claro se uma linguagem é uma linguagem de script. Mas considere que uma VM pode emular o conjunto de instruções x86, por exemplo. Isso não tornaria o bytecode x86 uma linguagem de script quando executado em uma VM? E se alguém fosse escrever um compilador que transformasse o código perl em um executável nativo? Nesse caso, eu não saberia mais como chamar a própria linguagem. Seria a saída que importaria, não o idioma.

Então, novamente, não estou ciente de que nada parecido tenha sido feito, então, por enquanto, ainda estou confortável em chamar linguagens interpretadas de linguagens de script.

anon6439
fonte
1
Você está chamando praticamente todas as linguagens, exceto aquelas que compilam em binário nativo para linguagens de script? Tenho certeza de que os desenvolvedores Java ficarão felizes em ser chamados de
criadores de
1
Eles são. Scripters, quero dizer.
anon6439
0

Um script é um programa relativamente pequeno . Um sistema é um programa relativamente grande ou uma coleção de programas relativamente grandes.

Algumas linguagens de programação são projetadas com recursos que o designer da linguagem e a comunidade de programação consideram úteis ao escrever programas relativamente pequenos. Essas linguagens de programação são conhecidas como linguagens de script , por exemplo, PHP.

Da mesma forma, outras linguagens de programação são projetadas com recursos que o designer da linguagem e a comunidade de programação consideram úteis ao escrever programas relativamente grandes. Essas linguagens de programação são conhecidas como linguagens de sistema , por exemplo, Java.

Agora, programas pequenos e grandes podem ser escritos em qualquer idioma. Um pequeno programa Java é um script. Por exemplo, um programa Java "Hello World" é um script, não um sistema. Um grande programa, ou coleção de programas, escrito em PHP é um sistema. Por exemplo, o Facebook, escrito em PHP, é um sistema, não um script.

É questionável considerar um único recurso de linguagem como um "teste decisivo" para decidir se a linguagem é mais adequada para scripts ou programação de sistemas. Por exemplo, os scripts podem ser compilados para código de byte ou código de máquina, ou podem ser executados por interpretação de árvore de sintaxe abstrata direta (AST).

Portanto, uma linguagem é uma linguagem de script se for normalmente usada para escrever scripts . Uma linguagem de script pode ser usada para escrever sistemas, mas esses aplicativos provavelmente serão considerados duvidosos.

Greg Mattes
fonte