# Linguagem de script

Linguagem de script ou scripting é uma linguagem de programação que suporta scripts, programas escritos para um sistema de tempo de execução especial que automatiza a execução de tarefas que seriam executadas, uma de cada vez, por um operador humano. Linguagens de script são frequentemente interpretadas (ao invés de compiladas). Primitivas são frequentemente as tarefas elementares ou chamadas de API, e a linguagem permite a elas serem combinadas dentro de programas complexos. Os ambientes que podem ser automatizados através de scripting incluem aplicações de software, páginas web dentro de um navegador web, os shells de sistemas operacionais (OS), sistemas embarcados, bem como numerosos games. Uma linguagem de script pode ser vista como uma linguagem de domínio específico para um ambiente particular (no caso do scripting, uma aplicação também conhecida como uma "linguagem de extensão").
Linguagens de script são algumas vezes referidas como linguagens de programação de altíssimo nível, pois operam com um altíssimo nível de abstração, ou como linguagens de controle, particularmente para linguagens de controle de emprego em mainframes.
A expressão "linguagem de script" é também eventualmente empregada para se referir a linguagens de propósitos diversos de alto nível dinâmicas, tais como Perl, Tcl, e Python, sendo o termo "script" frequentemente aplicado a pequenos programas (pouco mais de alguns milhares de linhas de código) em tais linguagens, ou em linguagens de domínio específico tais como as linguagens de processamento de texto sed e AWK. Algumas destas linguagens foram originalmente desenvolvidas para uso dentro de um ambiente particular e, posteriormente, desenvolvidas em linguagens de propósitos diversos ou de domínio específico portáteis. Inversamente, muitas linguagens de propósitos diversos têm dialetos que podem ser usados como linguagens de script. Este artigo examina as linguagens de script no sentido estrito de linguagens para um ambiente específico.
O espectrum das linguagens de script varia de muito pequenas a altíssimas linguagens de domínio específico a linguagens de propósitos diversos usadas para scripting. Exemplos de norma de linguagens de script para ambientes específicos incluem: Bash, para o Unix ou sistemas operacionais tipo Unix; ECMAScript (JavaScript), para navegadores web; e Visual Basic for Applications, para aplicações Microsoft Office. Lua é uma linguagem projetada e amplamente usada como uma linguagem de extensão. Python é uma linguagem de propósitos diversos que é comumente usada como uma linguagem de extensão, enquanto ECMAScript é ainda primariamente uma linguagem de script para navegadores web, mas é também usada como uma linguagem de propósitos diversos. O dialeto Emacs Lisp do Lisp (para o editor Emacs) e o dialeto Visual Basic for Applications do Visual Basic são exemplos de dialetos de linguagens de script para linguagens de propósitos diversos. Alguns sistemas de jogos de computador, particularmente o mundo virtual Second Life e a franquia Trainz de simuladores de ferrovias, são consideravalmente estendidos em funcionalidade pelas extensões script. Em outros games, como The Battle for Wesnoth, são scripts escritos por outros usuários.

## Características

Geralmente, as linguagens de script são muito rápidas para aprender e escrever, seja como arquivos de código-fonte pequenos ou interativamente, em um read–eval–print loop (REPL, linguagem shell). Isso geralmente implica sintaxe e semântica relativamente simples; em geral, um script (código escrito na linguagem de script) é executado do início para o fim, com nenhum ponto de entrada explícito.
É incomum caracterizar o Java, por exemplo, como uma linguagem de script por causa de sua sintaxe tediosa e regras sobre quais classes existem em quais arquivos, e não é diretamente possível executar o Java interativamente, porque os arquivos-fonte podem apenas conter definições que devem ser invocadas externamente por uma aplicação host ou aplicação launcher.
Este pedaço de código entendido imprimir "Hello World" não faz nada, pois o main não é declarado na classe HelloWorld.
Em contraste, Python permite definição de algumas funções em um arquivo simples, ou evitar funções completamente e usar estilo de programação imperativa, ou ainda usar ela interativamente.
print ("Hello World")
Esta linha de código Python imprime "Hello World"; nenhuma afirmação declarativa como main é requisitada aqui.
Uma linguagem de script é frequentemente interpretada do código-fonte ou bytecode. Em contraste, no ambiente de software, os scripts são escritos numa forma de linguagem compilada e distribuída no código de máquina específico.
Linguagens de script devem ser projetadas para uso por usuários finais de um programa—desenvolvimento de usuário final—ou devem ser apenas para uso interno por desenvolvedores, dessa forma eles podem escrever porções do programa na linguagem de script. Linguagens de script geralmente usam abstração, uma forma de ocultação de informação, para poupar os usuários dos detalhes dos tipos de variáveis internas, armazenamento de dados e gerenciamento de memória.
Scripts são frequentemente criados ou modificados pela pessoa que os executa, mas eles são também frequentemente distribuídos, tais como quando porções largas de games são escritas em linguagem de script.

## História

Os primeiros computadores mainframes (na década de 1950) não eram interativos (não usavam processamento em batch). A Job Control Language (JCL), da IBM, é o arquétipo das linguagens usadas para controlar o processamento em batch.
Os primeiros shells interativos foram desenvolvidos na década de 1960 para possibilitar a operação remota dos primeiros sistemas de tempo compartilhado, e estes usavam shell scripts, que controlavam os programas de computador rodando dentro de um programa de computador, o shell. A Calvin Mooers, em sua linguagem TRAC, é geralmente atribuída a invenção da substituição de comandos - capacidade de incorporar comandos em scripts que, quando interpretados, inseriam um caractere string. Multics chama isso de funções ativas.
Louis Pouzin escreveu um primeiro processador para comandos scripts, chamado RUNCOM para CTSS, por volta de 1964. Stuart Madnick, no MIT, escreveu uma linguagem script para o CP/CMS da IBM, em 1966. Ele originalmente chamou este processador de COMMAND (mais tarde renomeado EXEC). Multics incluiu um ramo do CTSS RUNCOM, também chamado de RUNCOM. EXEC foi afinal substituído pelo EXEC 2 e REXX.
Linguagens como Tcl e Lua foram especificamente projetadas como linguagens de script para propósitos diversos que poderiam ser incorporadas em alguma aplicação. Outras linguagens como Visual Basic for Applications (VBA) forneceram integração forte com as facilidades de automação de um sistema subjacente. Incorporando tais linguagens de script de propósitos diversos em vez de desenvolver uma nova linguagem para cada aplicação tinha também benefícios óbvios, aliviando o desenvolvedor da aplicação de precisar codificar um tradutor da linguagem do rabisco e permitir ao usuário aplicar habilidades aprendidas em outro lugar.
Alguns softwares incorporam diversas linguagens de script. Os navegadores web modernos quase sempre fornecem uma linguagem para extensões escritas para o próprio navegador, e diversas linguagens padrão incorporadas para controlar o navegador, incluindo JavaScript (um dialeto do ECMAScript) ou XUL.

## Tipos de linguagens de script
### Linguagens aglutinativas (glue languages)

Scripting é frequentemente contrastado com programação de sistemas, como na dicotomia de Ousterhout ou "programação no grande e programação no pequeno".
Nesta visão, scripting é particularmente glue code, conectando componentes de software a uma linguagem especializada para este propósito. É uma linguagem aglutinativa. Pipelines e shell scripting são exemplos arquetípicos de linguagens aglutinativas, e Perl foi inicialmente desenvolvida para completar esta mesma função. O desenvolvimento web pode ser considerado um uso de linguagens aglutinativas, intermediando um banco de dados e um servidor web. Mas se uma quantidade substancial de lógica é escrita em script, ela é mais bem caracterizada simplesmente como outro componente de software, não aglutinativo.
Linguagens aglutinativas são especialmente úteis para escrever e manter:
* comandos customizados para um comando shell;
* pequenos programas que são mais bem implementados em uma linguagem compilada;
* programas wrapper (empacotadores) para executáveis, como um arquivo batch que move ou manipula arquivos e faz outras coisas com o sistema operacional, antes ou após rodar uma aplicação como um processador de texto, uma planilha eletrônica, um banco de dados, um assembler, um compilador etc.;
* scripts que devem mudar;
* protótipos rápidos de uma solução eventualmente implementada em outra linguagem, frequentemente compilada.
Exemplos de linguagens aglutinativas:
Linguagens macro expostas ao sistema operacional ou componentes de aplicação podem servir como linguagens aglutinativas. Estas incluem Visual Basic for Applications, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, SaxBasic, e WinWrap Basic. Outras ferramentas como AWK podem também ser consideradas como linguagens aglutinativas como pode alguma linguagem implementada por um motor Windows Script Host (VBScript, JScript e VBA por padrão no Windows e motores de terceiros incluindo implementações de Rexx, Perl, Tcl, Python, XSLT, Ruby, Delphi, &c). Uma maioria de aplicações podem acessar e usar componentes do sistema operacional via modelos de objetos ou suas próprias funções.
Outros dispostivos como calculadoras programáveis também devem possuir linguagens aglutinativas; os sistemas operacionais de PDAs, tais como Windows CE devem possuir ferramentas macro nativas disponíveis ou de terceiros junto com aplicações aglutinativas, em adição à implementações de linguagens aglutinativas comuns—incluindo Windows NT, MS-DOS e alguns shells Unix, Rexx, PHP, e Perl. Dependendo da versão do SO, WSH e motores de script padrão (VBScript e JScript) são disponíveis.
Calculadoras programáveis podem ser programadas com linguagens aglutinativas de três formas. Por exemplo, a Texas Instruments TI-92, por padrão de fábrica pode ser programada com uma linguagem de script de comando. A inclusão de scripting e a linguagem aglutinativa Lua nas séries TI-NSpire de calculadoras poderia ser visto como um sucessor disso. As linguagens de programação de alto nível primárias de muitas calculadoras gráficas (muito frequentes variantes de Basic, algumas vez derivações de Lisp, e mais raramente, derivações de C) em muitos casos podem aglutinar junto com as funções da calculadora—tais como gráficos, listas, matrizes etc. Implementações de terceiros de versão mais compreensiva de Basic que deve ser mais próxima a variantes listadas como linguagens aglutinativas neste artigo são disponíveis—e tentam implementar Perl, Rexx, ou vários shells de sistema operacional nas calculadoras gráficas TI e HP são também mencionadas. compiladores cruzados de computador pessoal baseados em C para algumas máquinas de TI e HP usaram em conjunção com ferramentas que convertem entre C e Perl, Rexx, AWK, bem como shell scripts para Perl, VBScript para e do Perl tornam isso possível para escrever um programa em uma linguagem aglutinativa para uma implementação eventual (como um programa compilado) na calculadora.

### Job control languages e shells

Uma principal classe de linguagens de script cresceu fora da automação de job control, que relata ao inicia e controla o comportamento dos programas do sistema. (Neste sentido, alguém pode pensar nos shells como sendo descendentes do JCL da IBM, ou Job Control Language, que foi usado exatamente para este propósito.) Muitos interpretadores destas linguagens duplicam como interpretadores de linha de comandos tais como o shell do Unix ou o COMMAND.COM do MS-DOS. Outros, tais como o AppleScript oferecem o uso de comandos semelhantes ao inglês para construir scripts.

### GUI scripting

Com o advento das interfaces gráficas do usuário, um tipo especializado de linguagem de script surgiu para controlar um computador. Estas linguagens interagem com as mesmas janelas gráficas, menus, botões, e dessa forma um usuário humano poderia. Elas podem fazer isso simulando as ações de um usuário. Estas linguagens são geralmente usadas para automatizar as ações do usuário. Tais linguagens são também chamadas de "macros", quando o controle é por meio de botões pressionados ou cliques de mouse simulados, ou tocando/pressionando uma tela ativada por toque.
Essas linguagens poderiam, em princípio, ser usadas para controlar alguma aplicação GUI; mas, na prática, seu uso é limitado porque requer suporte da aplicação e do sistema operacional. Há poucas exceções para esta limitação. Algumas linguagens de script GUI são baseadas no reconhecimento de objetos gráficos dos pixels de sua tela de exibição e, nesse caso, não dependem de suporte do sistema operacional ou aplicação.

### Linguagens de aplicações específicas

Muitos programas de grande aplicação incluem uma linguagem de script idiomática adaptada às necessidades do usuário da aplicação. Da mesma forma, muitos sistemas de jogos de computador usam uma linguagem de script customizada para expressar ações programadas de personagens não jogáveis e o ambiente do jogo. Linguagens dessa e tipo são projetadas para uma simples aplicação; e, embora elas devam assemelhar-se superficialmente a uma linguagem específica de propósitos diversos (por exemplo, QuakeC, modelada do C), possuem destaques customizados que as diferenciam. Emacs Lisp, enquanto dialeto completamente formado e competente do Lisp, contém muitos destaques especiais que a tornam muito útil para ampliar as funções de edição de Emacs. Uma linguagem de script de aplicação específica pode ser vista como uma linguagem de domínio específico especializada em uma simples aplicação.

### Linguagens de extensão/incorporadas

Um número de linguagens foi projetado com o propósito de substituir linguagens de script para aplicações específicas, sendo incorporadas em programas de aplicação. O programador de aplicação (trabalhando em C ou outra linguagem de sistema) inclui "ganchos" onde a linguagem de script pode controlar a aplicação. Essas linguagens devem ser tecnicamente equivalentes a uma linguagem de extensão de aplicação específica mas, quando uma aplicação incorpora uma linguagem "comum", o usuário obtém a vantagem de poder transferir capacidades de aplicação para aplicação. Uma alternativa mais genérica é simplesmente fornecer uma biblioteca (frequentemente uma biblioteca C) que uma linguagem de propósitos diversos possa utilizar para controlar a aplicação, sem modificações para domínio específico.
JavaScript começou e ainda é uma linguagem principalmente para scripting dentro do navegadores web; contudo, a padronização da linguagem como ECMAScript tornou-a popular como linguagem incorporada de propósitos diversos. Em particular, a implementação da Mozilla SpiderMonkey é incorporada em diversos ambientes, tais como o Yahoo! Widget Engine. Outras aplicações que incorporam implementações ECMAScript incluem os produtos Adobe, como o Adobe Flash (ActionScript) e Adobe Acrobat (para scripting de arquivos PDF).
Tcl foi criada como uma linguagem de extensão mas veio a ser usada mais frequentemente como uma linguagem de propósitos diversos em funções semelhantes ao Python, Perl e Ruby. Por outro lado, Rexx foi originalmente criada como uma job control language, mas é amplamente usada como linguagem de extensão e como linguagem de propósitos diversos. Perl é uma linguagem de propósitos diversos, mas tinha o dialeto Oraperl (1990), consistindo de um Perl 4 binário com uma Oracle Call Interface compilada nele. O dialeto foi, entretanto, substituído por uma biblioteca (Perl Module), DBD::Oracle.
Outras aplicações complexas e orientadas a tarefas devem unir e expor uma linguagem de programação incorporada para permitir a seus usuários mais controle e dar a eles mais funcionalidade que pode ser disponível através de uma interface de usuário, não importa quão sofisticada seja. Por exemplo, ferramentas de autoria 3D Autodesk Maya incorporaram a linguagem de script MEL; Blender usa Python para preencher essa função.
Alguns tipos de aplicações que precisam de rápida adição de recursos ou ciclos de ajustar e executar (por exemplo, motores de jogos) também usam uma linguagem incorporada. Durante o desenvolvimento, isso permite prototipar recursos rapidamente e fazer ajustes mais livremente, sem a necessidade de o usuário ter intimidade com o conhecimento do trabalho interno da aplicação ou reconstruí-la após cada ajuste (o que pode consumir um tempo considerável). As linguagens de script usadas para esse propósito variam das mais comuns e mais famosas, como Lua e Python, até as menos conhecidas, como AngelScript e Squirrel.
Ch é outra opção de scripting compatível com C para a indústria incorporar em programas de aplicação C/C++.