Linguagem de script

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Disambig grey.svg Nota: Para outros significados, veja Script.
Exemplo de código em Python.

Um scripting ou linguagem de script é 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 poderiam alternativamente ser executadas uma por vez por um operador humano.[1] 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 combinas 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, que é também conhecida como uma linguagem de extensão. Linguagens de script são algumas vezes referidas como linguagem de programação de altíssimo nível, pois elas operam com um alto nível de abstração, ou como linguagens de controle, particularmente para linguagens de controle de emprego em mainframes.

O termo "linguagem de script" é também vagamente usado para se referir a linguagens de propósitos diversos de alto nível dinâmicas, tais como Perl,[2] Tcl, e Python,[3] com o termo "script" frequentemente usado para 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 extendidos em funcionalidade pelas extensões script. Em outros games como The Battle for Wesnoth, a variedade de games atuais jogados por jogadores são scripts escritos por outros usuários.

Características[editar | editar código-fonte]

Tipicamente as linguagens de script são entendidas de serem muito rápidas para aprender e escrever, ou como arquivos de código-fonte pequenos ou interativamente em um read–eval–print loop (REPL, linguagem shell).[4] Isso geralmente implica sintaxe e semântica relativamente simples; tipicamente um "script" (código escrito na linguagem de script) é executado do início para o fim, como um "script", com nenhum ponto de entrada explícito.

Por exemplo, é incomum caracterizar o Java 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, por causa de que os arquivos fonte podem apenas conter definições que devem ser invocadas externamente por uma aplicação host ou aplicação launcher.

public class HelloWorld {
  public void printHelloWorld() {
    System.out.println("Hello World");
  }
}

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.[5] Em contraste, no ambiente de software os scripts são escritos para uma forma de linguagem compilada e distribuída em código de máquina tipicamente escrita.

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 tipicamente usam abstração, uma forma de ocultação de informação, para poupar os usuários dos datalhes 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,[6] 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[editar | editar código-fonte]

Os primeiros computadores mainframes (na década 1950) foram não-interativos, ao invés de usarem processamento em batch. A Job Control Language (JCL) da IBM é o arquétipo das linguagens usadas para controlar o processamento em batch.[7]

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. Calvin Mooers em sua linguagem TRAC é geralmente atribuído a invenção da substituição de comandos, a habilidade de incorporar comandos em scripts que quando interpretados inseriam um caractere string.[8] Multics chama isso de funções ativas.[9] 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 batizado EXEC.[10] Multics incluíram um ramo do CTSS RUNCOM, também chamado de RUNCOM.[11] EXEC foi eventualmente 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 tipicamente 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[editar | editar código-fonte]

Linguagens aglutinativas (glue languages)[editar | editar código-fonte]

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, e uma linguagem especializada para este propósito é uma linguagem aglutinativa. Pipelines e shell scripting são exemplos arquétipos de linguagens aglutinativas, e Perl foi inicialmente desenvolvido para completar esta mesma função. O desenvolvimento web pode ser considerado um uso de linguagens aglutinativas, intermediando entre um banco de dados e um servidor web. Mas se uma quantidade substancial de lógica é escrita em script, ela é melhor caracterizada simplesmente como outro componente de software, não "aglutinativo".

Linguagens aglutinativas são especialmente úteis para escrever e mantendo:

  • comandos customizados para um comando shell;
  • pequenos programas que são melhor implementados em uma linguagem compilada;
  • programas "wrapper" (empacotadores) para executáveis, como um arquivo batch que move um 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[editar | editar código-fonte]

Ver artigo principal: Shell script

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[editar | editar código-fonte]

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 tipicamente usadas para automatizar as ações do usuário. Tais linguagens são também chamadas de "macros" quando o controle é através de botões pressionados ou cliques de mouse simulados, bem como tocando ou pressionando em uma tela ativada por toque.

Estas linguagens poderiam, a princípio, ser usadas para controlar alguma aplicação GUI; mas, na prática, seu uso é limitado porque seu uso precisa de 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. Estas linguagens de script GUI não dependem de suporte do sistema operacional ou aplicação.

Linguagens de aplicações específicas[editar | editar código-fonte]

Muitos programas de grande aplicação incluem uma linguagem de script idiomática adaptada para as 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 deste tipo são projetadas para uma simples aplicação; e, enquanto elas devem superficialmente assemelhar-se uma linguagem de propósitos diversos específica (por exemplo, QuakeC, modelada do C), elas possuem destaques customizados que diferenciam elas. Emacs Lisp, enquanto dialeto completamente formado e competente do Lisp, contém muitos destaques especiais que fazem ela 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 para uma simples aplicação.

Linguagens de extensão/incorporadas[editar | editar código-fonte]

Um número de linguagens foi projetado para 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. Estas linguagens devem ser tecnicamente equivalentes para 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 ser hábil para transferir habilidades da aplicação para a 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 ela popular como uma 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 incorporando 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 usado 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 uma linguagem de extensão, bem como uma 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.[12][13]

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. Por exemplo, ferramentas de autoria 3D Autodesk Maya incorporaram a linguagem de script MEL, ou Blender que usa Python para preencher esta função.

Alguns tipos de aplicações que precisam de adição de recursos rápida ou ciclos de ajustar e executar (por exemplo, motores de jogos) também usam uma linguagem incorporada. Durante o desenvolvimento, isso permite a elas prototipar recursos rapidamente e ajustar mais livremente, sem a necessidade do usuário ter intimidade com o conhecimento do trabalho interno da aplicação ou reconstruir ela após cada ajuste (que pode tomar uma quantidade de tempo significante). As linguagens de script usadas para este propósito variam das mais comuns e mais famosas Lua e Python a 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++.

Ver também[editar | editar código-fonte]

Referências

  1. Eva, Oceguera. «Owner». Eva Oceguera  |website= e |publicado= redundantes (ajuda)[ligação inativa]
  2. Sheppard, Doug (16 de outubro de 2000). «Beginner's Introduction to Perl». dev.perl.org. Consultado em 8 de janeiro de 2011 
  3. Programming is Hard, Let's Go Scripting…, Larry Wall, December 6, 2007
  4. Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution Cambridge University Press [S.l.] p. 76. ISBN 978-1-31612322-5, "A maior característica das linguagens de script modernas é a sua interatividade, algumas vezes referida como um ambiente de programação REPL . […] As características da facilidade de uso e execução imediata com um ambiente REPL são algumas vezes tomadas como a definição de uma linguagem de script."  line feed character character in |postscript= at position 154 (ajuda)
  5. Brown, Vicki. «Scripting Languages». Consultado em 22 de julho de 2009 
  6. Loui, Ronald (2008). «In praise of scripting». IEEE Computer 
  7. IBM Corporation (1967). IBM System/360 Operating System Job Control Language (C28-6529-4) (PDF) [S.l.: s.n.] 
  8. Mooers, Calvin. «TRAC, A Procedure-Describing Language for the Reactive Typewriter». Cópia arquivada desde o original em 25 de abril de 2001. Consultado em March 9, 2012  Verifique data em: |access-date= (ajuda)
  9. Van Vleck(ed.), Thomas. «Multics Glossary -A- (active function)». Consultado em March 9, 2012  Verifique data em: |access-date= (ajuda)
  10. Varian, Melinda. «VM AND THE VM COMMUNITY: Past, Present, and Future» (PDF). Consultado em March 9, 2012  Verifique data em: |access-date= (ajuda)
  11. Van Vleck, Thomas(ed.). «Multics Glossary -R- (RUNCOM)». Consultado em March 9, 2012  Verifique data em: |access-date= (ajuda)
  12. Oraperl, CPAN]
  13. Perl, Underground Oracle FAQ
  14. Van Rossum, Guido (January 6–8, 1998). «Glue it all together». python.org  Verifique data em: |date= (ajuda); |website= e |publicado= redundantes (ajuda)

Leitura recomendada[editar | editar código-fonte]

  • Barron, David William (2000). The World of Scripting Languages [S.l.: s.n.] ISBN 0-471-99886-9 

Ligações externas[editar | editar código-fonte]